Как я могу преобразовать широту и долготу в x, y в Java? - PullRequest
3 голосов
/ 12 мая 2010

Я работаю над географическим проектом на Java.

Вводимые координаты: 24,4444 N и т. Д. Вывод: карта PLAIN (не круглая), показывающая точку координат.

Я не знаю алгоритм преобразования координат в x, y на компоненте J, кто-нибудь может мне помочь?

Карта выглядит так: http://upload.wikimedia.org/wikipedia/commons/7/74/Mercator-projection.jpg

Спасибо

Ответы [ 2 ]

3 голосов
/ 12 мая 2010

Учитывая ваш разреженный пример, диапазон ваших входов будет (90.0N - 90.0S) и (180W - 180E). Это проще всего - и стандартно - если вы конвертируете Юг и Запад в негативы, давая вам широту (90,0 ..- 90,0) и долготу (180,0 ..- 180,0).

Учитывая размер вашего холста - скажем, 140x120 пикселей - вы получите:

x = (latitude * canvas_height / 180.0) + (canvas_height / 2)
y = (longitude * canvas_width / 360.0) + (canvas_width / 2)

или

x = (longitude * 120.0 / 180.0) + (120/2)
y = (latitude  * 140.0 / 360.0) + (140/2)

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

Добавлено : вы только что добавили немного о проекциях Меркатора, сделав мой простой ответ неправильным (но, возможно, все еще пригодным для использования вами, если вы не заботитесь о проекции)

0 голосов
/ 12 мая 2010

ТБО обеспечили хороший пример. В конечном итоге алгоритм зависит от используемой проекции карты. Вот несколько хороших ресурсов, которые я использовал в прошлом.

Следующая ссылка является хорошей ссылкой на ряд различных картографических проекций с достаточным количеством математических формул, чтобы задушить лошадь.

http://www.remotesensing.org/geotiff/proj_list/

Вот хороший пример для этого в PhP. Хотя это и не Java, оно должно быть достаточно простым, чтобы применять изложенные принципы.

http://www.web -max.ca / PHP / article_1.php

...