![]() |
Определение расстояния на карте
Привет. Мне нужно сделать что-то вроде этого: http://www.yourcharter.ru/map/
То есть имеется географическая карта. Мы указываем две точки и получаем расстояние в километрах. Вообщем-то всё уже готово за исключением корректного определения расстояния по карте. Я сначала думал, что это будет просто, но выяснилось что таки нет. То есть по идее нужно взять расстояние в пикселях и умножить на масштаб, но на деле так не получается. Все карты которые я смог найти имеют не постоянный масштаб. То есть к примеру если 100 пикселей в одном месте карты равны 1000 км, то в другом месте карты 100 пикселей могут быть равны 1700 км. Так что такой вариант не проходит. Как можно померять расстояние по такой карте? Кто-то сталкивался с подобными задачами? Может быть есть карты с постоянным масштабом? Пока что единственная идея - использовать меркаторскую проекцию, приводить экранные координаты к географическим, а по географическим уже считать расстояние. ИМХО не лучший вариант. Помогите плиз. Спасибо. |
а что мешает воспользоваться нормальной картой с обозначенный масштабом 1:..., перерисовать в кривые (если надо)
и использовать именно её. Ну и далее уже производить расчет... Вопрос в другом, как расчитать это расстояние на любой карте не по прямой, а с учетом существующих дорог и прочего, т .е. особенностей местности без заморочек с расстановкой клипов и проверкой каждого, в поисках ближайшего, чтобы уже от клипа к клипу рисовать кривую, что в последствии будет выглядеть как проложеный маршрут... |
Здесь как раз выскакивают мои пробелы знаний в географии. Какая карта подойдёт в данном случае? Я смотрел инфу по разным картографическим проекциям и так и не смог найти проекцию, при котором длины бы не искажались, а масштаб оставался постоянным. Мне не требуется учитывать дороги, просто расстояние по прямой(на самом деле по дуге большого круга).
Если можно - дай ссылку на нормальную карту, хоть посмотрю как они выглядят. PS вообще мне нужны крупномасштабные карты Евразии или мира. На мелкомасштабных картах ИМХО неточность измерения можно и не заметить. UPD, да, в флешке с примером они же как-то определяют расстояние. И карта у них тоже с не постоянным масштабом (можно приложить ручку к монитору в одном месте карты, померять, повторить то же самое в другом месте и результат будет разный). Цитата:
|
Цитата:
Карт полно... |
Класс не очень точен, но для больших карт (и даже для масштаба города) вполне подходит.
Код:
package fzn7.utils |
Цитата:
Цитата:
UPD: †‡Paladin‡†, спасибо, посмотрю UPD2: †‡Paladin‡†, здесь я так понял, требуется для начала пребразовать экранные координаты в географические? Такой метод я описывал в первом посте. Вообще по идее надо ещё учитывать наименование широты и долготы (СШ/ЮШ или ЗД/ВД) и в зависимости от неё выбирать знак числа, который передать в твой метод getDistance . Не помнишь как? |
Если карта ТОПОГРАФИЧЕСКАЯ, т.е. крупномасштабная, то мерить расстояние легко и просто - так же как линейкой на распечатке этой карты. Разумеется в любом случае надо знать масштаб.
Но если речь о длине большого круга и более мелком масштабе - то тут совсем другая история. Придется рисовать сетку координат, и уже по координатам (долгота/широта) рассчитывать расстояния. Я вот так делал похожую задачу: http://flasher.ru/forum/showthread.php?t=103787 |
Цитата:
Я его юзал при работе с yahoo maps, что-бы не бегать к ним на сервер для расчета расстояния. К счастью ихний API сам отдает правильною широту и долготу. |
http://mainmaps.com/fly - старушка, еще на Flash MX. С точки зрения флеш-проекта - мягко скажем слабенько. Но расстояния считает четко. Договаривайся, я там уже не работаю.:)
|
Всем спасибо, сделал(почти, жду пока дизайнер карту подготовит) определением расстояния по географическим координатам.
dantist86, что-то мне подсказывает, что раз уж меркаторская проекция, то сделано тем же способом что и у меня. Кстати, до сих пор не могу представить как можно получить из экранных координат географические на проекциях, где параллели не перпендикулярны меридианам. Вот код мегакласса с комментариями (: Может кому-то когда-то пригодится. Код:
/* |
| Часовой пояс GMT +4, время: 08:14. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.