точка на карте

  • Автор темы glukerrr
  • Дата начала

glukerrr

Guest
точка на карте

Добрый день!
Нужна такой скрипт, который бы генерил точку на карте по широте и долготе.. Есть у кого-нибудь что-то на примете?
 

Мутник

Новичок
glukerrr


GD библиотека + математические рассчеты...

P.S. указывал бы задачу поконкретнее...
 

glukerrr

Guest
НУЖНО:
КАРТА МИРА + способ на ней рисовать точку по широте и долготе
 

neko

tеam neko
интересно тут уже были люди которым нужен скрипт печатающий баксы?
 

wanderer

PHP - rulez!...
да! я первый в очереди! :) как кто-то напишет, намыльте мне! %)
 

DimbIch

Новичок
glukerrr
а в чем проблема нанести на рисунок точку ???
или ты не знаешь как высчитать долготу или широту ???
так это в школу иди...
 

Silent

Новичок
DimbIch

Я так понимаю, что ты можешь рассчитать координаты точки для любой существующей проекции, которых наверняка не меньше десятка?


glukerrr

Тебя устроит совсем любоя карта мира? Или может ты сначла сам найдешь нужную карту и потом уже будешь думать как для нее преобразовывать координаты?
 

DimbIch

Новичок
Silent
идеальный вариант
найти карту мира развернутую на плоскую поверхность учитывая проекции и тд...
а потом нанести точку на карту согласно какой то формуле расчета координат для это карты...

тут надо знать математику и ничего сложного здесь нет...
 

Silent

Новичок
DimbIch
Конечно ничего сложного тут нет. Нужно просто знать, в какой проекции нарисована данная карта, нужно знать формулы трансформации координат для этой проекции и нужно определить параметры для данной конкретной карты. Судя по тону твоего сообщения от "02.04.05 11:56" ты все формулы знаешь, иначе как-то странно выглядит - сам не знаешь, а над другими насмехаешься.

P.S. Тут можно посмотреть примеры 37 различных проекций: http://members.shaw.ca/quadibloc/maps/mapint.htm
 

glukerrr

Guest
Привет, Silent.
Карта есть.. Вот она http://www.ziclon.spb.ru/nohtml/images/maps/k_pol.jpg
а нужно отображение f из (ш,д)->(x,y) для данной карты.

Кстати.. будет ли такое отображение линейным? Т.е. при уменьшении широты и высоты карты в n и k раз? соответственно, мы сможем воспользоваться тем же отображением.. т.е. f(ш,д)=(x/n, y/k)
 

untied

Сдвинутый новичок
Товаришч, автор!
ИМХО: ставить точки по географическим координатам на карте мира -- дурное и вредное занятие.
И вот почему. Скорее всего, у тебя уже должно быть множество заранее известных точек, которые нужно отметить на карте. Например: нужно отмечать точки, в которые доставляет груз некая транспортная компания. Допустим, имеется пункт назначения "Анкара", информацию по которому сохраняем в базе данных. В этой же базе данных для пункта назначения "Анкара" сохраняем -- помимо всего прочего -- пиксельные координаты точки, которую нужно отметить на карте. Пиксельные координаты Анкары получаем элементарным образом, просто загрузив карту в Фотошоп и ткнув курсор в Анкару (то бишь, ручками).
Когда требуется ввести в БД новый пункт назначения, проводим ту же самую операцию: мануально находим пиксельные координаты точки на карте и заносим их в базу.
Задача выделения нужной точки на карте по известным пиксельным координатам решается тривиально, с помощью GD.

PS. Задачи, когда реально нужно отмечать на карте произвольные географические координаты, встречаются достаточно редко. Например, мне попадалась задача отмечать на карте пункты маршрута, координаты которых были замерены с помощью GPS-навигаторов. А поскольку решение требовалось для сайта любителей внедорожников ( offroad.ru ), то эти географические координаты действительно оказывались произвольными. Но там было проще: использовались карты крупного масштаба ( где-то 1:10000, 1:50000 ). Поэтому учитывать искажения проекции шара на плоскость не приходилось.
 

Silent

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

Теперь тебе осталось определить, что за проекция была использована в этой карте (например найти аналогичную карту из того списка проекций, что я давал) и затем найти в Гугле для этой проекции формулы трансформации.

Не уверен, но возможно какие-нибудь ГИС сами умеют определять проекцию, если им дать координаты нескольких точек на карте.
 

glukerrr

Guest
Уважаемый, untied. К сожалению, я не смогу пойти по тому пути, что Вы предложили. Задача у меня такая..
IP -> GeoIP(IP) -> (широта, долгота) -> (x,y)->сгенерированная карта

создавать карты для всего многообразия IP адресов <=> создавать карты для всего многообразия населенных пунктов где есть интернет.

С другой стороны.. При среднем размере карты 500x300 можно сгенерить 150000 карт =) и успокоиться =) Но все равно нужно понять какую карту подгружать ...

2Silent

Спасибо. Яснее не стало.. но появились какие-то идеи. У меня вопрос. Можно ли как-то апроксимизировать это преобразование? На карте которую я прислал в окресности центра смело можно говорить что преобразование примерно равно f(ш,д)=(a*ш + b, c*д + d) чем дальше от центра тем больше погрешность. На вскидку можно точно апроксимизировать многочленом второй степени.
 

Silent

Новичок
glukerrr Нет, многочленами тут наверняка не обойдешься. Ты бы походил по тому сайту, ссылку на который я давал. Твоя карта очень похожа на "The Eckert IV Projection" (http://members.shaw.ca/quadibloc/maps/mps0405.htm), хотя на 100% не уверен.
 

untied

Сдвинутый новичок
Автор оригинала: glukerrr
Но все равно нужно понять какую карту подгружать ...
Да это несложно как раз. Храни для каждой карты в БД географические координаты левой верхней и правой нижней точек. Если координаты точки, которую нужно отобразить, попадют в эти диапазоны, то выбираем для отображения точки данную карту.
Есть одно но: масштабы. Выбранная точка может попасть в диапазоны сразу нескольких карт, причем карты будут разных масштабов. В таком случае, нужно выбирать карту с оптимальным масштабом для отображения.
 

glukerrr

Guest
нет-нет-нет.. не понял.. карта ОДНА. Задача нарисовать на карте точку по заданной широте и долготе. ПРОБЛЕМА - нелинейное преобразование.. =((

2Silent ага ошибся.. там тригонометрия.. а я к элипсу пытался свести.. типа a*x^2 + b*y^2 = const
 
Сверху