首页 / 浏览问题 / 云GIS / 问题详情
for Leaflet,如何获取自己画的多边形
72EXP 2017年10月09日

通过参考SuperMap iClient 9D for Leaflet中标绘,捕捉与修改绘制多边形,如下图所示:

我想查询这个多边形区域内的数据,就如下面的代码所示:

var polygon = L.polygon([[10, 100], [10, 124], [40, 124], [40, 100], [10, 100]]);
var getFeatureParams = new SuperMap.GetFeaturesByGeometryParameters({
    toIndex: -1,
    datasetNames: ["World:Capitals"],
    geometry: polygon
});

问题:我如何把我绘制的图形传给polygon呢?示例代码中的查询都是给的死的区域。

如下图所示:

〉〉〉〉〉〉〉〉〉〉〉〉〉〉解决方法

示例代码是这样的

var polygon = L.polygon([[10, 100], [10, 124], [40, 124], [40, 100], [10, 100]]);

我们只要拿到自己所画图形的坐标就行了。

我画图是使用的leaflet.draw插件:

map.on(L.Draw.Event.CREATED, function (e) {
    var type = e.layerType,
        layer = e.layer;
    if (type === 'marker') {
        layer.bindPopup('A popup!');
    }
    editableLayers.addLayer(layer);

    //将图形信息传给下一步,进行查询功能
    var locationArray = e.layer.getLatLngs()[0];
    polygonArray = Array();
    var midArray = Array();
    var firstX = locationArray[0].lat;
    var firstY = locationArray[0].lng;
    for(var i =0;i<locationArray.length;i++){
        var x = locationArray[i].lat;
        var y = locationArray[i].lng;
        midArray.push(x);
        midArray.push(y);
        polygonArray.push(midArray);
        midArray = Array();
    }
    midArray.push(firstX);
    midArray.push(firstY);
    polygonArray.push(midArray);//我们要的就是这个数组
});

var polygon = L.polygon(polygonArray);

这样就好了!!

1个回答

你好,这个捕捉与修改的范例是用的leaflet的一个插件,leaflet.pm

详情可见这个具体的原生代码,可以监听map的drawend事件,在回调中获取绘制的这个geometry

还有一个方法就是用绘制与修改这个范例,在监听的L.Draw.Event.CREATED这个事件里面去将把FeatureGroup用toGeoJSON()方法,即可获取到绘制的所有的geometry对象

1,603EXP 2017年10月09日
监听了,但不知道polygon信息在哪里

原生的我也找不到啊,求教啊。具体怎么获得,怎么利用呢?

你可以参考下这个网址上面的方法

https://github.com/codeofsumit/leaflet.pm

这个就是这个插件所有的方法,就是我给你截图的那个

...