OpenLayers 3:在日期线上绘制面要素

时间:2015-08-27 21:49:35

标签: javascript openlayers-3

我正在尝试绘制一个与国际日期线重叠的简单框多边形。目前,在创建多边形时,它会以相反的方向包裹。

完整示例:http://jsfiddle.net/mcroteau/dkk2yu3L/

期望输出:

Desired Polygon

实际输出:

enter image description here

Javascript:

var wgs84Proj = new ol.proj.Projection({ code : "EPSG:4326" });
var origProj = new ol.proj.Projection({ code : "EPSG:900913" });

var mapTile = new ol.layer.Tile({
    source: new ol.source.OSM()
});


var convertedCoordinates = [];            
var unformattedCoordinates = [[175, 70], [175, 60], [-160, 60], [-160, 70]];


$(unformattedCoordinates).each(function(index, coordinate){
    var lat = coordinate[0];
    var lon = coordinate[1];

    var circle = new ol.geom.Circle([lat, lon])
    circle.transform(wgs84Proj, origProj);

    convertedCoordinates.push(circle.getCenter());
});

var polygonGeometry = new ol.geom.Polygon([convertedCoordinates])
var polygonFeature = new ol.Feature({ geometry : polygonGeometry });

var vectorSource = new ol.source.Vector();
vectorSource.addFeature(polygonFeature);

var vectorLayer = new ol.layer.Vector({
    source: vectorSource
}); 


var mapView = new ol.View({
    center: [-19000000, 9500000],
    zoom: 3
})

var map = new ol.Map({
    layers : [mapTile],
    target : 'map',
    view   : mapView
});

map.addLayer(vectorLayer);

我不确定我是否在OpenLayers 3 API中遗漏了配置设置或者必须在数据点上进行转换。任何指导都将非常感激。

更新了工作示例

http://jsfiddle.net/mcroteau/edt92p23/

2 个答案:

答案 0 :(得分:5)

只需将360度(或所用投影的总宽度)添加到X坐标,使它们位于右侧的世界中。将[[175, 70], [175, 60], [200, 60], [200, 70]]更改为[-160, 70]

OpenLayers使用投影坐标。 [175, 70]位于{{1}}的左侧/西侧,因此点之间绘制的任何线都将向左移动(如示例所示)。要使它向右/向东,你必须确保X坐标更高。

http://jsfiddle.net/dkk2yu3L/4/

答案 1 :(得分:-1)

不确定是否可行,Openlayer无法在两个世界之间绘制!

我停用wrapX功能,你可以看到他看到的内容: http://jsfiddle.net/davidhequet/dkk2yu3L/3/

var vectorSource = new ol.source.Vector({wrapX:false});
vectorSource.addFeature(polygonFeature);

var vectorLayer = new ol.layer.Vector({
    source: vectorSource
});