首页 / 浏览问题 / 云GIS / 问题详情
怎么判断我上报的点在我数据集面要素里面
79EXP 2018年05月21日
使用产品:iserver 8c 操作系统:win10  x64

数据类型: 文件型

问题详细描述:我的数据库里面存有多个面数据,我想判断上报的点是否在指定的面数据中,怎么判断,有示例吗

1个回答

您好,可以使用geometry.intersects();方法实现,主要代码及效果如下:

function addData() {
	//点对象
	var point = new SuperMap.Geometry.Point(-125, 50);
	var pointVector = new SuperMap.Feature.Vector(point);
	pointVector.style = {
		fillColor: "red",
		strokeColor: "yellow",
		pointRadius: 6
	};
	//六边形
	var points2 = [
		new SuperMap.Geometry.Point(-120, 54.142),
		new SuperMap.Geometry.Point(-110, 40),
		new SuperMap.Geometry.Point(-120, 25.857),
		new SuperMap.Geometry.Point(-140, 25.857),
		new SuperMap.Geometry.Point(-150, 40),
		new SuperMap.Geometry.Point(-140, 54.142)
	],
	linearRings = new SuperMap.Geometry.LinearRing(points2),
	region = new SuperMap.Geometry.Polygon([linearRings]);
	var polygonVector = new SuperMap.Feature.Vector(region);
	vector.addFeatures([pointVector, polygonVector]);
	var a = region.intersects(point);
	console.log(a);
}

4,524EXP 2018年05月21日
我的面是数据库里面的数据集,不是画出来的,怎么办,我看你上面是画出来的。

不管是前端绘制还是数据库中存储的数据都是geometry没区别的,您自己查一条数据试试就知道了。

你说的没问题,是我不太会,我现在不知道咋把数据库中的面读取出来用geometry

关于如何读取使用geometry其实我们的范例sql查询是个很好的例子,查询到的结果高亮显示其实就是把查询到的feature(result.recordsets[i].features[j];)直接add到矢量图层上;你自己的geometry的使用思路同理,查询到结果取到geometry,依旧参考sql查询范例,打印出查询结果(console.log(result);)看一下就知道了,截图如下

我也按照你这样查询出来了,就是你图中圈住的那部分,那怎么调用intersects()方法呢

你看我最早给你贴的代码,region.intersects(point);其实就是geometry1.intersects(geometry2);你自己查询到的那个geometry其实就是result.recordsets[i].features[j].geometry嘛,那就var geometry1 = result.recordsets[i].features[j].geometry,剩下的那个geometry2你就再自己传点呗

好了,解决了,谢谢您,老师,这么耐心。
为什么我获取不到面的数据也是这么写的var geometry1 = result.recordsets[i].features[j].geometry
...