Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2011, 14:10   #1
Merkator
Читаю Кормена
Пользователь
 
Аватар для Merkator
 
Регистрация: 28.12.2008
Сообщений: 46
По умолчанию Площадь по геокоординатам

Я конечно не студент, но нужна помощь.
Нужно найти площадь многоугольника, заданного вершинами (longitude, latitude)
(Англоязычный гугл исхожен вдоль и поперек, в русскоязычном ничего адекватного не нашел)
Мое решение на питоне pastebin.

Сразу поясню:
В начале мы имеем некий набор координат в формате degrees, minutes
Я перевожу их прям там же в стандартный формат (градусы с десятичной частью).

Дальше по формулам из wiki перевожу их в формат ECEF (earth-centred, earth-fixed).

А вот в дальнейшем коде я не уверен. Я считаю площадь зоны, ограниченной этими точками, методом векторного произведения.
Я сомневаюсь, что это верно.

Нужна Ваша помощь в подсчете площади.

PS для любопытных: координаты в программе - зона в Финском заливе.

Последний раз редактировалось Merkator; 06.07.2011 в 14:12.
Merkator вне форума Ответить с цитированием
Старый 06.07.2011, 18:53   #2
Merkator
Читаю Кормена
Пользователь
 
Аватар для Merkator
 
Регистрация: 28.12.2008
Сообщений: 46
По умолчанию

Ладно... видимо задача несколько отличного от форумского профиля.
Merkator вне форума Ответить с цитированием
Старый 06.07.2011, 19:37   #3
l1pton17
Пользователь
 
Аватар для l1pton17
 
Регистрация: 01.11.2010
Сообщений: 75
По умолчанию

терпеливее будьте или вы думаете, что после размещения вашей проблемы, сразу же весь форум полезет её решать?
l1pton17 вне форума Ответить с цитированием
Старый 07.07.2011, 10:47   #4
Merkator
Читаю Кормена
Пользователь
 
Аватар для Merkator
 
Регистрация: 28.12.2008
Сообщений: 46
По умолчанию

Прошу прощения, что задел ваши чувства.
Я и не думал, что весь форум сразу же полезет ее решать. Я почитал последние вопросы, понял специфику форума и то, что задачу я здесь (скорее всего) зря опубликовал.

Но раз опубликовал, то постараюсь довести решение до логического конца:

Я понял в чем ошибка в моем коде. Тем методом, которым я считаю площадь, я получаю не площадь нужной мне фигуры, а площадь боковых граней "пирамиды" с центром в (0, 0) и основанием - тем самым полигоном. Пирамида в кавычках потому, что основание у нее не плоское, а некий сектор сферы (геоида).

Ищу теперь иной метод для подсчета.
Merkator вне форума Ответить с цитированием
Старый 07.07.2011, 12:12   #5
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от Merkator Посмотреть сообщение
Я понял в чем ошибка в моем коде. Тем методом, которым я считаю площадь, я получаю не площадь нужной мне фигуры, а площадь боковых граней "пирамиды" с центром в (0, 0) и основанием - тем самым полигоном.
Там, у Вас, на самом деле, по-моему, тоже немного не так, но для начала скажите, пожалуйста: а Вам от кординаты Z отказаться - очень тяжело? Ну вот у Вас в примере: 5502.7, 5507.3, 5493.1, 5489.1. Относительная величина "плавания" Z - 3 десятых процента. Может, ну её, эту выпуклость Земли?..
Vago вне форума Ответить с цитированием
Старый 07.07.2011, 13:25   #6
Merkator
Читаю Кормена
Пользователь
 
Аватар для Merkator
 
Регистрация: 28.12.2008
Сообщений: 46
По умолчанию

Vago, мне кажется, что Z - не просто выпуклость Земли. Насколько я понял систему ECEF, то просто из центра Земли определенным образом отложена декартова система координат. И если я откажусь от Z, то скажем не в Финском заливе, а где-нибудь в Атлантике программа перестанет работать. (координата Z будет сильно меняться, а какая-нибудь Y наоборот не будет)

Но Ваша идея - хорошая, если ее доработать: давайте представим, что мы не уберем третью координату, а просто нормализуем (спроецируем) координаты, переведя все в плоскость. Тогда можно будет использовать алгоритм векторного произведения.

Тогда появляется новый вопрос: как правильно нормализовать координаты?

Последний раз редактировалось Merkator; 07.07.2011 в 13:34.
Merkator вне форума Ответить с цитированием
Старый 07.07.2011, 14:12   #7
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Merkator, я - не специалист по ГИС и, к сожалению, ничего не знаю о картографических проекциях и нормализации. Меня пока смущает другое. У Вас там ответственность за то, чтобы вершины были введены "по порядку", на программисте лежит, да?
Vago вне форума Ответить с цитированием
Старый 07.07.2011, 14:13   #8
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

По-моему нужно просто переместить все точки до совмещения, например, ndata[0] с центром координат. Тогда Ваш цикл будет суммировать площади треугольников:

Код:
area = 0;
for i := 1 to len(ndata)-2   // не знаю как это в Питоне
	area += 0.5*sqrt(dot(cross(ndata[i], ndata[i+1]), cross(ndata[i], ndata[i+1])))
alexBlack вне форума Ответить с цитированием
Старый 07.07.2011, 14:29   #9
Merkator
Читаю Кормена
Пользователь
 
Аватар для Merkator
 
Регистрация: 28.12.2008
Сообщений: 46
По умолчанию

Цитата:
Сообщение от Vago Посмотреть сообщение
Merkator, я - не специалист по ГИС и, к сожалению, ничего не знаю о картографических проекциях и нормализации. Меня пока смущает другое. У Вас там ответственность за то, чтобы вершины были введены "по порядку", на программисте лежит, да?
Нет, они уже даны в порядке обхода. А что?
Merkator вне форума Ответить с цитированием
Старый 07.07.2011, 14:31   #10
Merkator
Читаю Кормена
Пользователь
 
Аватар для Merkator
 
Регистрация: 28.12.2008
Сообщений: 46
По умолчанию

Цитата:
Сообщение от alexBlack Посмотреть сообщение
По-моему нужно просто переместить все точки до совмещения, например, ndata[0] с центром координат. Тогда Ваш цикл будет суммировать площади треугольников:

Код:
area = 0;
for i := 1 to len(ndata)-2   // не знаю как это в Питоне
	area += 0.5*sqrt(dot(cross(ndata[i], ndata[i+1]), cross(ndata[i], ndata[i+1])))
Возможно... сейчас попробую.
Спасибо!
Merkator вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Даны площадь круга и площадь квадрата Joker<777> Паскаль, Turbo Pascal, PascalABC.NET 10 17.01.2012 07:00
ООП (паскаль) - дан ромб. найти площадь. построить пирамиду, найти её площадь Rfn.if Помощь студентам 0 27.04.2011 16:10
Площадь прямоугольников savraska Помощь студентам 7 04.06.2010 16:42
Вычислить площадь и т.д. rmdzn Microsoft Office Excel 3 31.05.2010 22:16
Площадь фигур Вор Паскаль, Turbo Pascal, PascalABC.NET 3 18.05.2009 22:44