Преобразование longlat в google maps координаты
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 01 фев 2009, 04:25
- Репутация: 0
Преобразование longlat в google maps координаты
Здравствуйте.
Я отображаю данные через KML и openlayers. Координаты данных в longlat формате.
Проблема в том, что при проэкции их на гугломапс — данные отображаются немного криво, т.е. смещаются от того места, где они должны быть.
Я так понимаю, что у гугла своя КС и в неё надо бы спроецировать данные.
Вот и вопрос, как сделать?
Конкретный пример:
http://maps.ouvtk.ru/map.html
Если в поиске ввести "пл славы", то можно всё сразу увидеть.
Сами координаты правильные - т.к. mapserver нормально накладывает слой на гугломапс.
Я отображаю данные через KML и openlayers. Координаты данных в longlat формате.
Проблема в том, что при проэкции их на гугломапс — данные отображаются немного криво, т.е. смещаются от того места, где они должны быть.
Я так понимаю, что у гугла своя КС и в неё надо бы спроецировать данные.
Вот и вопрос, как сделать?
Конкретный пример:
http://maps.ouvtk.ru/map.html
Если в поиске ввести "пл славы", то можно всё сразу увидеть.
Сами координаты правильные - т.к. mapserver нормально накладывает слой на гугломапс.
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9129
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 748
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Преобразование longlat в google maps координаты
похоже проблема действительно в том что у вас данные в разных системах координат.
Какая система координат данных в KML? Только не говорите lat/long, этого недостаточно, нужно точно убедиться в том, какая именно.
Поясню почему, часто российские данные в ск pulkovo 1942, а накладывать вы их пытаетесь на данные GM, которые в WGS84. Разница между этими СК в районе харабовска примерно 70-90 метров (почему такая цифра).
Какая система координат данных в KML? Только не говорите lat/long, этого недостаточно, нужно точно убедиться в том, какая именно.
Поясню почему, часто российские данные в ск pulkovo 1942, а накладывать вы их пытаетесь на данные GM, которые в WGS84. Разница между этими СК в районе харабовска примерно 70-90 метров (почему такая цифра).
пристегивайтесь, турбулентность прямо по курсу
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 01 фев 2009, 04:25
- Репутация: 0
Re: Преобразование longlat в google maps координаты
В какой именно КС координаты не знаю, оригинальные данные в польском формате взяты отсюда:
http://code.google.com/p/khbmap2/source ... bmap%2B.mp
Еще интересный эффект - при увеличении зума, объект KML'ки приближается к правильному расположению.
http://code.google.com/p/khbmap2/source ... bmap%2B.mp
Еще интересный эффект - при увеличении зума, объект KML'ки приближается к правильному расположению.
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 01 фев 2009, 04:25
- Репутация: 0
Re: Преобразование longlat в google maps координаты
Выяснил - координаты данных тоже в WGS84.
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9129
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 748
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Преобразование longlat в google maps координаты
чтобы окончательно убедиться, что это не проблемы с преобразованием, попробуйте сделать следующее, возьмите одну точку - угол здания в KML, найдите ее координаты и определите координаты той же точки в GM, вполне возможно, что смещение вызвано тем, по каким материалам делались данные, а не потерями при отсутствие пересчета из одной СК в другую.
пристегивайтесь, турбулентность прямо по курсу
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 01 фев 2009, 04:25
- Репутация: 0
Re: Преобразование longlat в google maps координаты
Так и сделал. Проблема оказывается не в СК, бага где-то в самом openlayers'e. Потому что ту же KML'ку я сую в скрипт от гугломэпса - там всё накладывается как надо.
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9129
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 748
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Преобразование longlat в google maps координаты
хорошо, с ошибками в преобразованиях СК, точнее их отсутствием разобрались, можете ли выбрать пару приметных полигоном и приложить к теме? попробую у себя глянуть в чем дело.
пристегивайтесь, турбулентность прямо по курсу
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 01 фев 2009, 04:25
- Репутация: 0
Re: Преобразование longlat в google maps координаты
Вот:
Координаты для setCenter:
Для гугла удобно использовать display-kml.appspot.com
Код: Выделить всё
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<Style id="line">
<LineStyle>
<color>7f0000ff</color>
<width>4</width>
</LineStyle>
</Style>
<Placemark>
<name>Славы Пл.</name>
<styleUrl>#line</styleUrl>
<description> </description>
<LineString>
<extrude>1</extrude>
<tessellate>3</tessellate>
<altitudeMode>absolute</altitudeMode>
<coordinates>
135.066421,48.467071,0
135.065795,48.466751,0
135.065460,48.466751,0
135.065124,48.466812,0
135.064987,48.466533,0
135.065383,48.466468,0
135.065338,48.466255,0
135.066467,48.466064,0
135.067184,48.466533,0
</coordinates>
</LineString>
</Placemark>
<Placemark>
<name>Славы Пл.</name>
<styleUrl>#line</styleUrl>
<description> </description>
<LineString>
<extrude>1</extrude>
<tessellate>3</tessellate>
<altitudeMode>absolute</altitudeMode>
<coordinates>
135.066360,48.466472,0
</coordinates>
</LineString>
</Placemark>
</Document>
</kml>
Код: Выделить всё
{"lat":"48.4665710000","lon":"135.0658519000"}
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9129
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 748
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Преобразование longlat в google maps координаты
перед экспериментами хочу уточнить
я смотрю ваш пример в display-kml (красная линия) и сравниваю с maps.ouvtk.ru (желтый контур), одно и тоже вроде. Или вы про красную линию которая лежит криво? То есть то что подается MS - ок, а загрузка KML выдает ошибочное положение линии?
я смотрю ваш пример в display-kml (красная линия) и сравниваю с maps.ouvtk.ru (желтый контур), одно и тоже вроде. Или вы про красную линию которая лежит криво? То есть то что подается MS - ок, а загрузка KML выдает ошибочное положение линии?
пристегивайтесь, турбулентность прямо по курсу
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 01 фев 2009, 04:25
- Репутация: 0
Re: Преобразование longlat в google maps координаты
Да, всё так.
Желтый контур это результат работы мапсервера - он работает как часы.
А вот красный контур, который генерится через KML - смещен. Причем при увелечении зума он приближается к правильным координатам.
Желтый контур это результат работы мапсервера - он работает как часы.
А вот красный контур, который генерится через KML - смещен. Причем при увелечении зума он приближается к правильным координатам.
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9129
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 748
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Преобразование longlat в google maps координаты
одержал сокрушительную победу над openlayers
чуть попозже расскажу в чем дело было.

пристегивайтесь, турбулентность прямо по курсу
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 01 фев 2009, 04:25
- Репутация: 0
Re: Преобразование longlat в google maps координаты
Круто! Прям нетерпится 

- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9129
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 748
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Преобразование longlat в google maps координаты
итак, вот работающий скрипт, посмотреть в действии с вашим кусочком данных можно в статье про OL, я добавил еще один способ, связанный с преобразованием координат. Правда пока толком не документировал, чуть позже.
Код: Выделить всё
<script type="text/javascript">
var lon = 135.0658519;
var lat = 48.466571;
var zoom = 16;
var options = {
projection: new OpenLayers.Projection("EPSG:900913"),
displayProjection: new OpenLayers.Projection("EPSG:4326"),
maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34, 20037508.34, 20037508.34)
};
map = new OpenLayers.Map('map5', options);
var layer = new OpenLayers.Layer.Google(
"GoogleSoft", {
type: G_SATELLITE_MAP,
numZoomLevels: 20,
'sphericalMercator': true
});
map.addLayer(layer);
var myKML = new OpenLayers.Layer.GML(
"KML",
"test.kml", {
format: OpenLayers.Format.KML,
projection: map.displayProjection
});
map.addLayer(myKML);
var proj = new OpenLayers.Projection("EPSG:4326");
var point = new OpenLayers.LonLat(lon, lat);
map.setCenter(point.transform(proj, map.getProjectionObject()), zoom);
</script>
пристегивайтесь, турбулентность прямо по курсу
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 01 фев 2009, 04:25
- Репутация: 0
Re: Преобразование longlat в google maps координаты
Спасибо, всё работает.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость