Openlayers: отображение полигона через линию Перемены Даты

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
Nemkir
Новоприбывший
Сообщения: 2
Зарегистрирован: 03 фев 2013, 10:18
Репутация: 0

Openlayers: отображение полигона через линию Перемены Даты

Сообщение Nemkir »

Здравствуйте.
У меня есть необходимость одновременно отображать несколько больших полигонов на карте. Полигоны должны отображаться на всех сторонах от линии перемены даты. При минимальном зуме, полигон должен дублироваться на всех сторонах карты. Вот мой пример (мне надо достичь того же, что и на карте google).
Итак, вопросы:
1) Как правильно отображать полигон, пересекающий линию перемены даты?
Я нашел этот пример, но при отображении полигона мне пришлось добавлять 360 градусов к долготе:

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

for (var i = 1; i < polygonPoints.length; i++) {
            var dY = polygonPoints[i][1] - polygonPoints[i-1][1];
            if(Math.abs(dY) > 180)
                polygonPoints[i][1] += 360;
        }
Есть ли способ, как этого можно избежать?

2) Как отображать (дублировать) полигон на всех видимых частях карты?

Моя пример:

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

var map;    // openlayers map

    // [[latitude, longitude], ...]
    var polygonPoints = [[10, -100],[30, -70],[38, -30],[40, 0],[38, 50 ],[20, 100],[50, 170],[55, 180],
                        [50, -170], [40, -160],[10, 170],[0, -170],[-10, -160],[-25, -170], [-30, 100 ],
                        [-45, 10 ],[-50, -20],[-55, 30],[-35, -160],[-40, -160],[-60, 30],  [-50, -30 ],
                        [-40, 10 ],[-25, 100], [-20, -175],[-10, -165],[0, -180 ],[10, 165],[50, -180],
                        [45, 170],[15, 100],[33, 50 ],[35, 0 ],[35, -30],[25, -70],[5, -100],[10, -100] ];
    function InitOL(){
        var wgs84Projection = new OpenLayers.Projection("EPSG:4326");
        var epsg900913 = new OpenLayers.Projection('EPSG:900913');

        var options = {
            div: "openLayersMap",
            projection: wgs84Projection,
            displayProjection: epsg900913,
            allOverlays: true,
            zoom: 1
        };

        map = new OpenLayers.Map(options);
        var mapserv = new OpenLayers.Layer.MapServer( "OpenLayers Basic",
                    "http://vmap0.tiles.osgeo.org/wms/vmap0",
                    {layers: 'basic'},
                    {wrapDateLine: true} );

        var polygonsLayer = new OpenLayers.Layer.Vector("PolygonsLayer", null, { wrapDateLine: true });

        map.addLayers([mapserv, polygonsLayer]);
        map.addControl(new OpenLayers.Control.LayerSwitcher());
        map.addControl(new OpenLayers.Control.MousePosition());
        map.zoomToMaxExtent();
        map.setCenter(new OpenLayers.LonLat(-100, 0));

        for (var i = 1; i < polygonPoints.length; i++) {
            var dY = polygonPoints[i][1] - polygonPoints[i-1][1];
            if(Math.abs(dY) > 180)
                polygonPoints[i][1] += 360;
        }

        var olPoints = [];
        for (var j = 0; j < polygonPoints.length; j++) {
            olPoints.push(new OpenLayers.Geometry.Point(polygonPoints[j][1], polygonPoints[j][0]));
        }
        var linearRing = new OpenLayers.Geometry.LinearRing(olPoints);
        var bounds = new OpenLayers.Bounds([-180, -90, 180, 90]);
        linearRing.setBounds(bounds);

        var polygonStyle = {
                strokeColor: "#770077",
                strokeOpacity: 1,
                strokeWidth: 2,
                fillColor: "#770077",
                fillOpacity: 0.5
            };

        var olPolygon = new OpenLayers.Geometry.Polygon(linearRing);
        var polygonFeature = new OpenLayers.Feature.Vector(olPolygon);
        polygonFeature.style = polygonStyle;
        polygonsLayer.addFeatures(polygonFeature);
    }
Nemkir
Новоприбывший
Сообщения: 2
Зарегистрирован: 03 фев 2013, 10:18
Репутация: 0

Openlayers: отображение полигона через линию Перемены Даты

Сообщение Nemkir »

Ещё раз здравствуйте.

Я так и не смог решить вопрос с отображение полигона, пересекающего линию перемены даты, и его дублирования ена всех видимых частях карты :(

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

На данный момент попробовал leaflet. Она мне очень понравилась, но с ней тоже не получилось решить вопрос с дублированием полигона на все видимые частях карты.

Буду рад любой помощи.
Ответить

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

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

Сейчас этот форум просматривают: Amazon [Bot] и 1 гость