简体   繁体   English

打开图层3如何以编程方式绘制多边形?

[英]open layers 3 how to draw a polygon programmatically?

How to draw a polygon use open layer 3 programmatically? 如何绘制多边形以编程方式使用open layer 3?

i have a json array coordinate: 我有一个json数组坐标:

[
        {
            "lng": 106.972534,
            "lat": -6.147714
        },
        {
            "lng": 106.972519,
            "lat": -6.133398
        },
        {
            "lng": 106.972496,
            "lat": -6.105892
        }
]

and now i want to draw it on map use open layers. 现在我想在地图上使用开放图层绘制它。 how to do it? 怎么做?

You need to use the ol.geom.Polygon constructor. 您需要使用ol.geom.Polygon构造函数。 That constructor expects an array of rings, each ring being an array of coordinates. 该构造函数需要一个环数组,每个环是一个坐标数组。

In your case this is how you will create the polygon (this assumes your array of lng lat pairs is named a ): 在您的情况下,这是您将如何创建多边形(这假设您的lng lat对数组被命名为a ):

// A ring must be closed, that is its last coordinate
// should be the same as its first coordinate.
var ring = [
  [a[0].lng, a[0].lat], [a[1].lng, a[1].lat],
  [a[2].lng, a[2].lat], [a[0].lng, a[0].lat]
];

// A polygon is an array of rings, the first ring is
// the exterior ring, the others are the interior rings.
// In your case there is one ring only.
var polygon = new ol.geom.Polygon([ring]);

Now if you want to display this polygon in a map with a view whose projection is Web Mercator ( EPSG:3857 ) you will need to transform the polygon from EPSG:4326 to EPSG:3857 : 现在,如果要在具有投影为Web Mercator( EPSG:3857 )的视图的地图中显示此多边形,则需要将多边形从EPSG:4326EPSG:3857

polygon.transform('EPSG:4326', 'EPSG:3857');

And to actually display the polygon you need to wrap it in a feature object, and add it to a vector layer (a vector source really, see below), which you add to the map as any other layer: 要实际显示您需要将其包裹在要素对象中的多边形,并将其添加到矢量图层(实际上是矢量源,请参阅下文),您可以将其添加到地图中,作为任何其他图层:

// Create feature with polygon.
var feature = new ol.Feature(polygon);

// Create vector source and the feature to it.
var vectorSource = new ol.source.Vector();
vectorSource.addFeature(feature);

// Create vector layer attached to the vector source.
var vectorLayer = new ol.layer.Vector({
  source: vectorSource
});

// Add the vector layer to the map.
map.addLayer(vectorLayer);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM