Supermap GIS二次开发之查询面内数据是否有点数据

Supermap GIS二次开发之查询面内数据是否有点数据

作者:谢景,撰写时间:2019-1-18

在我们进行GIS二次开发的时候,经常会需要查询某个面区域里是否有点数据,或者是面区域里面的点数据是否超过多少个,如果超过,则该面区域高亮显示。
举个例子,就像我做的慢性病GIS系统,就需要查询一个社区里面的病人是否超过3人,超过则该社区高亮,在这里,病人坐标就是点数据。
下面做个简单的Demo演示一下查询过程。

思路:先查出面数据,然后再以面数据作为范围过滤条件对点数据进行查询,如果查出数据,则该面数据高亮。
下面演示代码:

function SelectRegion(){  //查询面数据的方法
		 var queryRegion, queryByBoundsParams, queryService;//定义变量
		 queryRegion = new SuperMap.REST.FilterParameter({ name: "Region@XJ" });//设置查询图层,这里是面数据所在的图层
		 // QueryBySQLParameters  SQL 查询参数类
		  queryByBoundsParams = new SuperMap.REST.QueryBySQLParameters({
			   queryParams: [queryRegion],    //queryParams:该类用于设置查询数据集的查询过滤参数。
			   });
		 queryService = new SuperMap.REST.QueryBySQLService(url, {
		        //processCompleted:设置成功回调函数
                eventListeners: { "processCompleted": processCompleted_selectAddress }
            });
            queryService.processAsync(queryByBoundsParams);//负责将客户端的动态分段服务参数传递到服务端。
	  }
	function processCompleted_selectAddress(obj){ //成功回调函数  obj是服务端传回来的数据
		 var i, len, features, feature,geometry, result = obj.result.recordsets;//声明变量
		  features = result[0].features;
		  for (i = 0, len = features.length; i < len; i++) { //循环面数据,调用查询点数据的方法,每个面数据都是查询点数据的范围过滤条件
                    feature = features[i];
                    geometry=feature.geometry;
			  SelectPoint(feature);//查询点数据的方法
		  }
	}
	function SelectPoint(feature){//查询点数据的方法
		 var queryRegion, queryByGeometryParams, queryService;
		queryRegion = new SuperMap.REST.FilterParameter({ name: "Point@XJ" });//点数据所在图层
		queryByGeometryParams = new SuperMap.REST.QueryByGeometryParameters({
                    queryParams: [queryRegion],
                    geometry: feature.geometry,//范围过滤条件
                    spatialQueryMode: SuperMap.REST.SpatialQueryMode.INTERSECT
                });
                queryService = new SuperMap.REST.QueryByGeometryService(url, {
                    eventListeners: {
                    //成功的回调函数是匿名方法
                        "processCompleted": function(obj){
                        //判断以面数据作为范围过滤条件下,有没有查询点数据,如果没有,则证明该面数据内没有点数据,如果有点数据,则使该面高亮显示。
							if(obj.result.recordsets[0].features.length>0){
								feature.style = {//设置面的样式
                                    strokeColor: "#304DBE",
                                    strokeWidth: 2,
                                    pointerEvents: "visiblePainted",
                                    fillColor: "#304DBE",
									fillOpacity: 0.4
                                 } 
			                        vectorLayer.addFeatures(feature);//将该面数据添加到vectorLayer图层中显示。
		                        }	
						}
                      
                    }
                });

                queryService.processAsync(queryByGeometryParams);//负责将客户端的动态分段服务参数传递到服务端。
	}

效果图如下:
Supermap GIS二次开发之查询面内数据是否有点数据_第1张图片

你可能感兴趣的:(Supermap)