【问题标题】:OpenLayers - how do I draw a Polygon from existing lonLat points?OpenLayers - 如何从现有的 lonLat 点绘制多边形?
【发布时间】:2010-10-23 07:37:44
【问题描述】:

我的数据库中有来自用户定义多边形的经纬度顶点。我的问题是:我现在如何在地图上重新创建和显示它们?使用 Google Maps API 很容易做到这一点,但我找不到任何关于如何使用 OpenLayers 做到这一点的文档或示例。有没有人有这样做的经验?

【问题讨论】:

    标签: openlayers


    【解决方案1】:

    经过大量实验,我发现了如何做到这一点:

    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]);
    

    【讨论】:

    • 不确定从那以后更新了多少东西,但不是这样:site_points.push(site_points[0]); 对于LinearRing 来说没有必要,因为它们会自动关闭?
    • 您能否分享一下您在jsfiddle.net 上的成就。这将有很大帮助。谢谢
    【解决方案2】:

    OpenLayers 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);
    }
    

    【讨论】:

    • 我正在尝试以下new Polygon([[5724580.263018008, 2915911.362231543], [5724954.871637587, 2916119.9031961635], [5724619.881135941, 2915429.991834908], [5724580.263018008, 2915911.362231543]]).transform('EPSG:4326', 'EPSG:3857') 并且由于某种原因它现在仍在绘制,(奇怪的是,如果 idraw 在从绘制多边形获取坐标后它可以工作,即使它是相同的值) 有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多