Openlayers - Как потянуть многоугольник с обеих сторон Линии перемены даты

Я должен потянуть несколько больших многоугольников на карте. Многоугольник должен быть дублирован на всех сторонах Линии перемены даты. Они должны быть привлечены то же самое как на картах 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);
    }
4
nl ja de
Вы могли бы не хотеть просить мнения. Это чрезвычайно вводное ваш вопрос до бесконечных дебатов/обсуждения.
добавлено автор ChiefTwoPencils, источник

2 ответы

Я нашел a решение к этой проблеме. Это называют Arc.js и это для вычисления Больших маршрутов круга. Не только, что, это также разделит линию на линии перемены даты и предоставит вам два linestrings, которые встречаются в линии перемены даты, которую может легко нанести на карту OpenLayers

enter image description here enter image description here

1
добавлено

Это похоже на ограничение способа, которым OpenLayers в настоящее время тянет многоугольники. Вероятно, необходимо подать отчет об ошибках и надеяться, что он будет исправлен или исправит его сами... Вы могли произвести , вторые многоугольник сами, когда вы обнаруживаете этот случай.

1
добавлено