Здравствуйте, уважаемые!
Пишу свою програму для отображения карты + трека с GPS-навигатора. Зачем пишу - ну надо и все.
Оно помимо отображения будет еще много чего делать.
Сейчас сделал компоненту которая занимается отрисовкой карты. Появилось несколько вопросов:
1. перерыв кучу формул, и запросов в гуугл, так и не смог найти нормальной формулы преобразования мировых координат(lat,lon) в плоскость. Пока остановился на тупой формуле
y=lat
x=lon*CosY
ну а дальше уже линейные преобразования на экран. Пока задачу выполняет, картинку кажит, но формула, мягко говоря... фиговая. Подскажите люди добрые, где нормальную формулу найти, чтоб оно Х,У в километрах выводило.
Т.е. нужно чтобы x1-x2 с учетом равенства y1=y2 давало расстояние в метрах(или км)
2. может я велосипед изобретаю, тут на форуме есть ссылки на открытые ГИС системы, подскажите можно ли их подключать в свой продукт? Хотелось бы что нибудь в виде компонент Дельфи или Билдера.
3. формат карт, который мне доступен - тектовый "Польский формат" .mp. Редактор, если можно так его назвать - MapEdit. Есть ли для этого формата нормальные редакторы, которые могут:
- Делать повороты, маштабирование объектов
- сохранять данные не с 5 занаками после запятой, а хотя бы 10, т.к. в МарЕдиторе все мелкие объекты из за этого кривые
- подставлять картинку или напрямую работать с гугле-мап(как вариант яндекс) с загрузкой вектора из него
Заранее спасибо за ответ
Софт для отображения карт
-
- Новоприбывший
- Сообщения: 2
- Зарегистрирован: 23 апр 2010, 05:09
- Репутация: 0
-
- Гуру
- Сообщения: 2627
- Зарегистрирован: 29 мар 2007, 14:12
- Репутация: 34
- Откуда: Ukraine
Re: Софт для отображения карт
Свободные ГИС можно использовать, при условии, что вы не будете нарушать лицензию. Так, если вы используете GPL код в своей программе, то и ваша программа должна быть под GPL
Готовых свободных компонент для интеграции в Delphi или С++ Builder не так уж и много. Посмотрите на MapWindow ActiveX Control.
Готовых свободных компонент для интеграции в Delphi или С++ Builder не так уж и много. Посмотрите на MapWindow ActiveX Control.
- JEY
- Активный участник
- Сообщения: 228
- Зарегистрирован: 17 июл 2008, 13:42
- Репутация: 1
Re: Софт для отображения карт
Приветствую! Ответ на первый вопрос здесь.
-
- Новоприбывший
- Сообщения: 2
- Зарегистрирован: 23 апр 2010, 05:09
- Репутация: 0
Re: Софт для отображения карт
Voltron
Так, с опенсерсом все ясно, спасибо, с компонентами посмотрим, но уже на картинке понятно что возможности у нее слабоватые, ну значит не зря клаву топчу...
JEY
Я так понимаю это форула
Y = R * Latitude;
X = R * Longitude;
где R - большая полуось "а"
Насколько я понимаю R это просто коэффициент пропорциональности на сфере, особенности строения геоида эта форула не учитывает.
есть формула вычисляющая радиус кривизны первого вертикала на данной широте
R = a/sqrt(1-e2*sin(lat)*sin(lat));
я пробовал подставлять этот радиус в Вашу формулу, в результате вся геометрия поплыла, может я туплю и такое вычисление радиуса делать не нужно, но тогда не понимаю почему в формуле не учитывается широта, ведь для северных широт одно и то же изменения долготы должно давать меньший прирост по Х, чем для южных, т.е.
GetLen(Lat,Lon, Lat,Lon+1)>GetLen(Lat+1,Lon, Lat+1,Lon+1)
ведь длинна одного градуса долготы разная для разных широт.
Или я все же туплю?
Так, с опенсерсом все ясно, спасибо, с компонентами посмотрим, но уже на картинке понятно что возможности у нее слабоватые, ну значит не зря клаву топчу...
JEY
Я так понимаю это форула
Y = R * Latitude;
X = R * Longitude;
где R - большая полуось "а"
Насколько я понимаю R это просто коэффициент пропорциональности на сфере, особенности строения геоида эта форула не учитывает.
есть формула вычисляющая радиус кривизны первого вертикала на данной широте
R = a/sqrt(1-e2*sin(lat)*sin(lat));
я пробовал подставлять этот радиус в Вашу формулу, в результате вся геометрия поплыла, может я туплю и такое вычисление радиуса делать не нужно, но тогда не понимаю почему в формуле не учитывается широта, ведь для северных широт одно и то же изменения долготы должно давать меньший прирост по Х, чем для южных, т.е.
GetLen(Lat,Lon, Lat,Lon+1)>GetLen(Lat+1,Lon, Lat+1,Lon+1)
ведь длинна одного градуса долготы разная для разных широт.
Или я все же туплю?
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя