Вопрос про координаты xyz

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
anubis
Новоприбывший
Сообщения: 5
Зарегистрирован: 06 авг 2012, 11:29
Репутация: 0

Вопрос про координаты xyz

Сообщение anubis » 06 авг 2012, 18:52

Всем привет.Не знаю куда писать поэтому напишу сюда.
У меня есть задача нужно увязать карту openstreetmap.org и сервис по земельным участкам(это не самое сложное,в принципе тут помощь особо не нужна) , т.е запросить сервер, получить картинку земельного участка и слоем отобразить на карте опенстрит.

по сути получается такая цепочка
Страница html( с картой) - java servlet - сервер с земельными участками.

при реализации этой задачи столкнулся с следующими проблемами
1) как перевести координаты xyz в Web Mercator Auxiliary Sphere(WMAS), дело в том как я понимаю xyz возвращает две координаты, а WMAS их 4.
2) как получить эти пресловутые координаты xyz и передать их в сервлет( сейчас делаю так, полный код выложу в самом конце поста).

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

            servletLayer = new OpenLayers.Layer.XYZ('osm', 'servlet_path?z=${z}&x=${x}&y=${y}');
            servletLayer.getXYZ();
Проблема в том что эти координаты туда никакие не передаются. пробовал делать по другому, выносил этот код в отдельную js функцию

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

  function test(){
        window.location = "servlet_path?z=${z}&x=${x}&y=${y}" }
и все равно x,y,z пустые.

Полный код странницы

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

<html>
<head>
    <title>Simple OSM GPX Track</title>
    <script src="http://www.openlayers.org/api/OpenLayers.js"></script>
    <script src="http://www.openstreetmap.org/openlayers/OpenStreetMap.js"></script>

    <script type="text/javascript">
        var lat=47.496792
        var lon=7.571726
        var zoom=13

        var map; //complex object of type OpenLayers.Map

        function init() {
            map = new OpenLayers.Map ("map", {
                controls:[
                    new OpenLayers.Control.Navigation(),
                    new OpenLayers.Control.PanZoomBar(),
                    new OpenLayers.Control.LayerSwitcher(),
                    new OpenLayers.Control.Attribution()],
                maxExtent: new OpenLayers.Bounds(OpenLayers.Bounds.left,6648435.0478947,15823659.4554552,20037508.34),
                maxResolution: 156543.0399,
                numZoomLevels: 19,
                units: 'm',
                projection: new OpenLayers.Projection("EPSG:900913"),
                displayProjection: new OpenLayers.Projection("EPSG:4326")
            } );


            layerMapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik");
            map.addLayer(layerMapnik);
            layerCycleMap = new OpenLayers.Layer.OSM.CycleMap("CycleMap");
            map.addLayer(layerCycleMap);
            layerMarkers = new OpenLayers.Layer.Markers("Markers");
            servletLayer = new OpenLayers.Layer.XYZ('osm', 'servlet_path?z=${z}&x=${x}&y=${y}');
            servletLayer.getXYZ();
            map.addLayer(servletLayer);
            map.addLayer(layerMarkers);
        }
    </script>

</head>
<body onload="init();">
<div style="width:90%; height:90%" id="map"></div>
</body>
</html>
Помогите кодом или примером, желательно поподробнее, так как только начал развлекаться с этой темой.
Сильно не пинайте, если написал не в тот раздел.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Вопрос про координаты xyz

Сообщение Denis Rykov » 07 авг 2012, 05:14

А вы правильно понимаете, что такое x,y,z? Это адресация тайлов в XYZ-схеме. Описание слоя XYZ у вас совсем не верное, плюс зачем вы вручную вызываете внутренний метода getXYZ(), причём вызываете его неверно, не передавая на вход охват. Короче ошибок куча, да к тому же я не понял, что вы хотите получить в итоге.
Spatial is now, more than ever, just another column- The Geometry Column.

anubis
Новоприбывший
Сообщения: 5
Зарегистрирован: 06 авг 2012, 11:29
Репутация: 0

Re: Вопрос про координаты xyz

Сообщение anubis » 07 авг 2012, 09:35

Как я понимаю xyz - это центр тайла.
Хочу получить эти координаты и перевести в Wmas. Wmas координаты передаются другому сервису, с которого приходит нужная мне инфомация.

И как мне надо описывать слой xyz?

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Вопрос про координаты xyz

Сообщение Denis Rykov » 07 авг 2012, 09:48

Объясните мне что принимает на входе ваш сервис и что выдаёт на выходе? XYZ - это не координаты, это параметры адресации тайла, подробнее на русском тут.
Spatial is now, more than ever, just another column- The Geometry Column.

anubis
Новоприбывший
Сообщения: 5
Зарегистрирован: 06 авг 2012, 11:29
Репутация: 0

Re: Вопрос про координаты xyz

Сообщение anubis » 07 авг 2012, 13:18

Сервер принимает параметры названные Bounding Box: то есть это строка вида

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

1500906.27859085,4732029.32513987,19600736.4656307,12206959.1952019
А возвращает он картинку земельного участка.

сейчас модифицировал свой код, следующим образом

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

<html>
<head>
    <title>Карта</title>
    <script src="http://www.openlayers.org/api/OpenLayers.js"></script>
    <script src="http://www.openstreetmap.org/openlayers/OpenStreetMap.js"></script>

    <script type="text/javascript">

        function init() {
            map = new OpenLayers.Map("basicMap");
            var mapnik = new OpenLayers.Layer.OSM();
            map.addLayer(mapnik);
            map.setCenter(new OpenLayers.LonLat(43.998779,56.316537) // Центр карты
                    .transform(
                    new OpenLayers.Projection("EPSG:4326"), // преобразование из WGS 1984
                    new OpenLayers.Projection("EPSG:900913") // в Spherical Mercator Projection
            ), 12 // Уровень масштаба
            );
            map.events.register('click', map, handleMapClick);

        }


        function handleMapClick(e){
            var lonlat = map.getLonLatFromViewPortPx(e.xy);

            // If you are using OpenStreetMap (etc) tiles and want to convert back
            // to gps coords add the following line :-
            window.alert(lonlat.transform( map.projection,map.displayProjection));           
        }
    </script>
</head>
<body onload="init();">
    <div style="width:90%; height:90%" id="basicMap"></div>
</body>
</html>
То есть по клику на карте я могу получить две координаты, а мне надо 4.

Аватара пользователя
dobeer
Активный участник
Сообщения: 199
Зарегистрирован: 25 дек 2009, 21:54
Репутация: 1
Откуда: Чита
Контактная информация:

Re: Вопрос про координаты xyz

Сообщение dobeer » 07 авг 2012, 19:15

Извиняюсь, что влез в дискусию, но вдруг стало очень интересно как узнать параметры адресации тайла XYZ в известной системе координат тайловой системы, если известен bbox тайла?

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Вопрос про координаты xyz

Сообщение Denis Rykov » 08 авг 2012, 05:00

2anubis
Честно говоря так и не понял, что вы хотите. Как можно преобразовать координаты клика в BBOX - это две совершенно ортогональные величины. Объясните внятно зачем вам кликать в карту, если сервер принимает на вход координаты BBOX. И формат ответа сервера совершенно не ясен, величина Zoom-level (Z-в схеме адресации XYZ) как-то учитывается?

2dobeer
Если заданы координаты точки и зум, то чтобы получить координаты тайла - переводим координаты в пиксельные, а затем определяем координаты тайла (пример на Python):

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

 
def PixelsToTile(px, py):
"Returns a tile covering region in given pixel coordinates"

tx = int( math.ceil( px / float(self.tileSize) ) - 1 )
ty = int( math.ceil( py / float(self.tileSize) ) - 1 )
return tx, ty
Spatial is now, more than ever, just another column- The Geometry Column.

anubis
Новоприбывший
Сообщения: 5
Зарегистрирован: 06 авг 2012, 11:29
Репутация: 0

Re: Вопрос про координаты xyz

Сообщение anubis » 08 авг 2012, 11:32

сервер возвращает картинку, которая потом будет добавлена слоем на карту. Дело в том что на сервере нет больших картинок.
Для начала мне надо передать серверу 4 координаты bounding box.
Так вот как для определенного тайла можно узнать эти координаты, как я понимаю, это xmin, ymin и xmax, ymax.
а как узнать эти координаты, я не знаю.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Вопрос про координаты xyz

Сообщение Denis Rykov » 08 авг 2012, 12:34

Для начала попробуйте все это дело реализовать вручную, передавая, например, серверу не охват тайла, а текущий охват карты. В консоли:

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


OpenLayers.Request.GET({
url: "host",
params: {'bbox': map.getExtent().toBBOX()},
success: function(e) {
}
});

Данная функция отправит GET запрос (OpenLayers.POST, если сервер работает с POST-запросами), ответ можно посмотреть, выведя console.log(e) внутри колбека success, здесь же можно попытаться реализовать добавление на карту. Опять таки я не понимаю логики, если эти картинки - слой карты, то зачем я должен передавать BBOX какого-то тайла, чтобы их получить, почему бы просто автоматом не загружать нужные изображения при изменении BBOX-а текущего вида.
Spatial is now, more than ever, just another column- The Geometry Column.

anubis
Новоприбывший
Сообщения: 5
Зарегистрирован: 06 авг 2012, 11:29
Репутация: 0

Re: Вопрос про координаты xyz

Сообщение anubis » 10 авг 2012, 10:04

Пока нет возможности протестировать ваш код, потому что сервер не работает.
Мне объясняли, что сервер не обладает такими большими картинками и поэтому надо получать координаты тайла.
Хотя, скорее всего вы правы и так будет разумнее, посмотрим, что получится из вашего кода выше.

Аватара пользователя
dobeer
Активный участник
Сообщения: 199
Зарегистрирован: 25 дек 2009, 21:54
Репутация: 1
Откуда: Чита
Контактная информация:

Re: Вопрос про координаты xyz

Сообщение dobeer » 15 авг 2012, 18:05

Спасибо за наводку Денис, получилось.

Ответить

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

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

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