привязать географические координаты (широта, долгота) к карте (х, у) - PullRequest
5 голосов
/ 19 сентября 2010

У меня есть географические координаты (широта и долгота) некоторых городов, и я хотел бы получить координаты x, y, чтобы их можно было отобразить на карте.

Карта стандартная, как, например, http://www.wordtravels.com/images/map/Spain/Fuerteventura_map.jpg.

Я попробовал несколько формул, которые я нашел, но, похоже, ни одна из них не работает :(. Лучше всего использовать простой код JavaScript или ruby:)

Ответы [ 5 ]

3 голосов
/ 19 сентября 2010

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

Если вы знаете, что ваша карта относится к многообразию проекций Меркатора, то координаты широты / долготы можно просто рассматривать как X /Y, масштабируется и переводится соответственно.То есть вы найдете простой топор + b и cy + d, которые выполняют эту работу.

Если ваша карта не является проекцией Меркатора (как, вероятно, нет, если она пытается получить согласованный масштаб,как этот, кажется, делает) тогда лучше всего предположить, что это "касательная к земле" проекция.(Это хорошо для небольших массивов.) В этом случае вам сначала нужно спроецировать широту / долготу в трехмерную систему координат.

z=sin(lat)
x=cos(lat)*sin(long)
y=cos(lat)*cos(long)

Положительные z указывают на северный полюс.Положительные y указывают на 0, 0, а положительные x указывают на lat 0 long 90 (восток), а положительные lat / long - север и восток.Конечно, вы должны сначала преобразовать в радианы.

Все это предполагает сферическую Землю, что не совсем верно, но это достаточно близко, если вы не стреляете из дальних минометов.

В любом случае, когда у вас есть XYZ, вам нужно будет поворачивать и масштабировать карту.Чтобы повернуть вокруг оси Z, просто вычтите базовую долготу, прежде чем проецировать в три измерения.Сделайте это, чтобы центрировать карту на нулевой долготе для простоты математики.

После того, как вы это сделаете, вам нужно будет только вращать земной шар вперед, пока исходная карта не окажется лицом вперед.Сделайте это с помощью 2-го поворота по оси YZ.Используйте http://en.wikipedia.org/wiki/Coordinate_rotations_and_reflections, чтобы вычислить эту часть.

Наконец, ваши координаты x, z будут очень хорошо совмещаться с координатами x, y вашей карты для соответствующего масштаба / перевода, как описано ранее..

2 голосов
/ 21 января 2011

возможно, это поможет, я сделал реализацию для США, используя только javascript.

demo / code: http://the55.net/_11/sketch/us_map

2 голосов
/ 06 декабря 2010

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

1 голос
/ 19 сентября 2010

Используйте API Карт Google, вы можете наложить JPG на карту и правильно расположить его.

Вот пример http://code.google.com/apis/maps/documentation/javascript/examples/overlay-hideshow.html

и вот страница API с оверлеями http://code.google.com/apis/maps/documentation/javascript/overlays.html

0 голосов
/ 19 сентября 2010

Вам будет нелегко, если вы работаете в очень маленьком масштабе (и близко к экватору). Географическая система координат Википедии - хорошее начало ...

Самый простой путь - использовать что-то вроде веб-картографирование и придерживаться широт и долгот.

...