首页 / 浏览问题 / 组件GIS / 问题详情
Iclient Leaflet 图形相交查询
125EXP 2020年02月21日

请问Leaflet用GetFeatureBySQLParameters获取的结果怎么应用到GetFeatureByGeometryParameters()里面的geometry?谢谢!目的是想用SQL查出来的行政区划,与其他图层叠加相交,显示行政区划范围内的要素。

1个回答

您可以在外部定义一个全局变量将query的结果赋值给外部定义的变量传入到第二个查询中
5,668EXP 2020年02月21日

你好,我在前面获取的feature转换不成后面需要的geometry格式,这个图上是serviceResult.result.features.features[0].geometry获取到的,但是用到后面的getFeaturesByGeometry上面不行。

下面那种传入的geometry需要的格式和你上面获取的features对象的geometry不一样。他需要传入L.point、L.polygon这种,如果是获取到上面的geometry了可以遍历他的坐标值转换成面或点等leaflet格式。

比如第一个查询返回的是features[0]的geometry,这个是他的地理属性,获取它的coordinate数组遍历转换成L.polygon,这个是下面的query1需要的geo对象

你好,因为这个是中国的行政边界,是multipolygon,我用L。polygon画出来图形不对,变形了,位置也跑偏了,数据是官网的数据,您能给看一下吗,谢谢!

   


  var host = window.isLocal ? window.server : "https://iserver.supermap.io";
    var map, resultLayer,polygon,resultLayer1,
        baseUrl = host + "/iserver/services/map-world/rest/maps/World",
        data_url = host + "/iserver/services/data-world/rest/data";

 function query() {
    	var sqlParam = new SuperMap.GetFeaturesBySQLParameters({
            queryParameter: {
                name: "Countries@World",
                attributeFilter: "COUNTRY = '中华人民共和国' "
            },
            datasetNames: ["World:Countries"]
        });
        L.supermap.featureService(data_url).getFeaturesBySQL(sqlParam, function (serviceResult) {
                resultLayer = L.geoJSON(serviceResult.result.features,{
                	onEachFeature: function (feature, layer) {
                        layer.bindPopup(feature.properties.COUNTRY+ ":" + feature.properties.CAPITAL_CH);
                    	var polygonList= new Array();
                    	for(var i=0;i<feature.geometry.coordinates[0][0].length;i++){
                    		polygonList.push(feature.geometry.coordinates[0][0][i]);
                    	}
                    	var polygon=L.polygon(polygonList, {color: 'red'});
                    	polygon.addTo(map);
                	}
                }).addTo(map).bindPopup('SMID = 247');
               
            });
    }

已解决,需要调换坐标
你好,还有个问题,我的数据建立了空间索引和字段索引,但是用山东省的行政边界去和其他要素层做相交,速度上大概需要2s多,江苏省需要5s,请问有没有提高相交分析速度的方法,谢谢!
矢量数据的话还可以进行文件编码的操作,也可以提供一些查询的效率,因为如果需要做精确的查询的话不能对数据进行重采样等操作,所以只能通过建立索引、文件编码来提高查询的性能
好的,这些行政区划是不变的,不知道有没有什么方法把行政区划的图形缓存起来,下次就不用计算了,现在是每次先去提取行政区划的图形,构造起L.polygon后再去与要素层相交,这个环节可不可以进行优化呢?谢谢!
这个可以考虑在桌面做个地图缓存,矢量类型的,但是如果去做查询的话最终也还是需要构建出对应的L.polygon来查询相交,您可以尝试一下
...