我的数据库中有来自用户定义的多边形的经纬度顶点。我的问题是:我现在如何在地图上重新创建和显示它们?使用 Google Maps API 很容易做到这一点,但我找不到任何关于如何使用 OpenLayers 做到这一点的文档或示例。有没有人有这样做的经验?
问问题
30950 次
2 回答
42
经过大量的实验,我发现了如何做到这一点:
let sitePoints = [];
let siteStyle = {
// style_definition
};
let epsg4326 = new OpenLayers.Projection("EPSG:4326");
for (let i in coordinates) {
let coord = coordinates[i];
let point = new OpenLayers.Geometry.Point(coord.lng, coord.lat);
// transform from WGS 1984 to Spherical Mercator
point.transform(epsg4326, map.getProjectionObject());
sitePoints.push(point);
}
sitePoints.push(sitePoints[0]);
let linearRing = new OpenLayers.Geometry.LinearRing(sitePoints);
let geometry = new OpenLayers.Geometry.Polygon([linearRing]);
let polygonFeature = new OpenLayers.Feature.Vector(geometry, null, siteStyle);
vectors.addFeatures([polygonFeature]);
于 2010-10-24T05:12:28.890 回答
3
开放层 6
OpenLayers 6 的情况稍有不同,需要一段时间才能弄清楚。所以我把OL6的相关代码贴在这里。
coordinates
是 [[[number]]] 类型(这是多边形的 GeoJson 标准)。
styles
超出范围(如果有人感兴趣,我可以将其粘贴在这里,但每个应用程序都可以不同地定义它)。
var VectorSource = ol.source.Vector;
var {Tile, Vector} = ol.layer; //import {Tile as TileLayer, Vector as VectorLayer} from 'ol/layer.js';
var TileLayer = Tile;
var VectorLayer = Vector;
var map = new ol.Map(...);
function drawPolygonOnMap(coordinates) {
const polygonFeature = new ol.Feature(
new ol.geom.Polygon(coordinates).transform('EPSG:4326','EPSG:3857'));
let source = new VectorSource({
features: [polygonFeature]
});
var layer = new VectorLayer({
source: source,
style: styles
});
map.addLayer(layer);
}
于 2020-06-19T06:47:55.920 回答