Преобразование longlat в google maps координаты

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
foler
Новоприбывший
Сообщения: 8
Зарегистрирован: 01 фев 2009, 04:25
Репутация: 0

Преобразование longlat в google maps координаты

Сообщение foler » 01 фев 2009, 04:34

Здравствуйте.

Я отображаю данные через KML и openlayers. Координаты данных в longlat формате.
Проблема в том, что при проэкции их на гугломапс — данные отображаются немного криво, т.е. смещаются от того места, где они должны быть.
Я так понимаю, что у гугла своя КС и в неё надо бы спроецировать данные.
Вот и вопрос, как сделать?

Конкретный пример:
http://maps.ouvtk.ru/map.html
Если в поиске ввести "пл славы", то можно всё сразу увидеть.
Сами координаты правильные - т.к. mapserver нормально накладывает слой на гугломапс.

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Преобразование longlat в google maps координаты

Сообщение Максим Дубинин » 01 фев 2009, 04:43

похоже проблема действительно в том что у вас данные в разных системах координат.
Какая система координат данных в KML? Только не говорите lat/long, этого недостаточно, нужно точно убедиться в том, какая именно.

Поясню почему, часто российские данные в ск pulkovo 1942, а накладывать вы их пытаетесь на данные GM, которые в WGS84. Разница между этими СК в районе харабовска примерно 70-90 метров (почему такая цифра).
пристегивайтесь, турбулентность прямо по курсу

foler
Новоприбывший
Сообщения: 8
Зарегистрирован: 01 фев 2009, 04:25
Репутация: 0

Re: Преобразование longlat в google maps координаты

Сообщение foler » 01 фев 2009, 09:51

В какой именно КС координаты не знаю, оригинальные данные в польском формате взяты отсюда:
http://code.google.com/p/khbmap2/source ... bmap%2B.mp

Еще интересный эффект - при увеличении зума, объект KML'ки приближается к правильному расположению.

foler
Новоприбывший
Сообщения: 8
Зарегистрирован: 01 фев 2009, 04:25
Репутация: 0

Re: Преобразование longlat в google maps координаты

Сообщение foler » 02 фев 2009, 04:08

Выяснил - координаты данных тоже в WGS84.

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Преобразование longlat в google maps координаты

Сообщение Максим Дубинин » 02 фев 2009, 05:51

чтобы окончательно убедиться, что это не проблемы с преобразованием, попробуйте сделать следующее, возьмите одну точку - угол здания в KML, найдите ее координаты и определите координаты той же точки в GM, вполне возможно, что смещение вызвано тем, по каким материалам делались данные, а не потерями при отсутствие пересчета из одной СК в другую.
пристегивайтесь, турбулентность прямо по курсу

foler
Новоприбывший
Сообщения: 8
Зарегистрирован: 01 фев 2009, 04:25
Репутация: 0

Re: Преобразование longlat в google maps координаты

Сообщение foler » 03 фев 2009, 08:30

Так и сделал. Проблема оказывается не в СК, бага где-то в самом openlayers'e. Потому что ту же KML'ку я сую в скрипт от гугломэпса - там всё накладывается как надо.

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Преобразование longlat в google maps координаты

Сообщение Максим Дубинин » 03 фев 2009, 08:40

хорошо, с ошибками в преобразованиях СК, точнее их отсутствием разобрались, можете ли выбрать пару приметных полигоном и приложить к теме? попробую у себя глянуть в чем дело.
пристегивайтесь, турбулентность прямо по курсу

foler
Новоприбывший
Сообщения: 8
Зарегистрирован: 01 фев 2009, 04:25
Репутация: 0

Re: Преобразование longlat в google maps координаты

Сообщение foler » 04 фев 2009, 04:23

Вот:

Код: Выделить всё

<?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>
Координаты для setCenter:

Код: Выделить всё

{"lat":"48.4665710000","lon":"135.0658519000"}
Для гугла удобно использовать display-kml.appspot.com

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Преобразование longlat в google maps координаты

Сообщение Максим Дубинин » 04 фев 2009, 05:53

перед экспериментами хочу уточнить

я смотрю ваш пример в display-kml (красная линия) и сравниваю с maps.ouvtk.ru (желтый контур), одно и тоже вроде. Или вы про красную линию которая лежит криво? То есть то что подается MS - ок, а загрузка KML выдает ошибочное положение линии?
пристегивайтесь, турбулентность прямо по курсу

foler
Новоприбывший
Сообщения: 8
Зарегистрирован: 01 фев 2009, 04:25
Репутация: 0

Re: Преобразование longlat в google maps координаты

Сообщение foler » 04 фев 2009, 11:14

Да, всё так.
Желтый контур это результат работы мапсервера - он работает как часы.
А вот красный контур, который генерится через KML - смещен. Причем при увелечении зума он приближается к правильным координатам.

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Преобразование longlat в google maps координаты

Сообщение Максим Дубинин » 05 фев 2009, 10:02

одержал сокрушительную победу над openlayers :) чуть попозже расскажу в чем дело было.
пристегивайтесь, турбулентность прямо по курсу

foler
Новоприбывший
Сообщения: 8
Зарегистрирован: 01 фев 2009, 04:25
Репутация: 0

Re: Преобразование longlat в google maps координаты

Сообщение foler » 05 фев 2009, 15:30

Круто! Прям нетерпится :)

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Преобразование longlat в google maps координаты

Сообщение Максим Дубинин » 06 фев 2009, 07:33

итак, вот работающий скрипт, посмотреть в действии с вашим кусочком данных можно в статье про 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>
пристегивайтесь, турбулентность прямо по курсу

foler
Новоприбывший
Сообщения: 8
Зарегистрирован: 01 фев 2009, 04:25
Репутация: 0

Re: Преобразование longlat в google maps координаты

Сообщение foler » 06 фев 2009, 15:03

Спасибо, всё работает.

Ответить

Вернуться в «Веб-картография»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость