Страница 1 из 1

Софт для отображения карт

Добавлено: 23 апр 2010, 05:34
Vaicartana
Здравствуйте, уважаемые!

Пишу свою програму для отображения карты + трека с GPS-навигатора. Зачем пишу - ну надо и все.
Оно помимо отображения будет еще много чего делать.
Сейчас сделал компоненту которая занимается отрисовкой карты. Появилось несколько вопросов:

1. перерыв кучу формул, и запросов в гуугл, так и не смог найти нормальной формулы преобразования мировых координат(lat,lon) в плоскость. Пока остановился на тупой формуле
y=lat
x=lon*CosY
ну а дальше уже линейные преобразования на экран. Пока задачу выполняет, картинку кажит, но формула, мягко говоря... фиговая. Подскажите люди добрые, где нормальную формулу найти, чтоб оно Х,У в километрах выводило.
Т.е. нужно чтобы x1-x2 с учетом равенства y1=y2 давало расстояние в метрах(или км)

2. может я велосипед изобретаю, тут на форуме есть ссылки на открытые ГИС системы, подскажите можно ли их подключать в свой продукт? Хотелось бы что нибудь в виде компонент Дельфи или Билдера.

3. формат карт, который мне доступен - тектовый "Польский формат" .mp. Редактор, если можно так его назвать - MapEdit. Есть ли для этого формата нормальные редакторы, которые могут:
- Делать повороты, маштабирование объектов
- сохранять данные не с 5 занаками после запятой, а хотя бы 10, т.к. в МарЕдиторе все мелкие объекты из за этого кривые
- подставлять картинку или напрямую работать с гугле-мап(как вариант яндекс) с загрузкой вектора из него

Заранее спасибо за ответ

Re: Софт для отображения карт

Добавлено: 23 апр 2010, 08:48
Voltron
Свободные ГИС можно использовать, при условии, что вы не будете нарушать лицензию. Так, если вы используете GPL код в своей программе, то и ваша программа должна быть под GPL

Готовых свободных компонент для интеграции в Delphi или С++ Builder не так уж и много. Посмотрите на MapWindow ActiveX Control.

Re: Софт для отображения карт

Добавлено: 23 апр 2010, 09:01
JEY
Приветствую! Ответ на первый вопрос здесь.

Re: Софт для отображения карт

Добавлено: 26 апр 2010, 05:40
Vaicartana
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)
ведь длинна одного градуса долготы разная для разных широт.
Или я все же туплю?