首页 / 浏览问题 / 组件GIS / 问题详情
拉框查询地图上的feature怎么实现?
64EXP 2019年11月20日

使用产品:iserver 9d 操作系统:win10 x64
数据类型: oracle 12c x64 
问题详细描述:

var self = this;
			if (this.source == null) {
				this.source = new ol.source.Vector({ wrapX: false });
				this.vector.setSource(this.source);
			}
			//绘制类型
			var geometryFunction, maxPoints;
			if (value === 'Circle') {
				//圆形
				geometryFunction = ol.interaction.Draw.createRegularPolygon(0);
			} else if (value === 'Polygon') {
				value = 'Polygon';
			} else if (value === 'Rectangle') {
				value = 'LineString';
				maxPoints = 2;
				geometryFunction = function (coordinates, geometry) {
					if (!geometry) {
						//多边形
						geometry = new ol.geom.Polygon(null);
					}
					var start = coordinates[0];
					var end = coordinates[1];
					geometry.setCoordinates([
						[start, [start[0], end[1]], end, [end[0], start[1]], start]
					]);
					return geometry;
				};
			}
			//实例化交互绘制类对象并添加到地图容器中
			var draw = this.draw = new ol.interaction.Draw({
				//绘制层数据源
				source: this.source,
				/** @type {ol.geom.GeometryType}几何图形类型 */
				type: value,
				//几何信息变更时调用函数
				geometryFunction: geometryFunction,
				//最大点数
				maxPoints: maxPoints
			});
			this.iMap.addInteraction(draw);

			//点击查询的回调函数
			draw.on('drawend', function (evt) {
				self.drawControlback();
			}, this);

地图上有若干在vector layer中的feature,我使用ol.interaction.Draw绘制了圆、长方形和多边形,如何查询绘制图形范围内的feature?(如何获取绘制图形的geometry、bound,使用范围查询还是sql查询?)

QQ:532594038       来自超图产品多年使用者,之前一版使用的是之前版本的supermap for javascript,现如今升级代码

1个回答

你好,这个其实很简单的,你可以为draw控件注册事件 draw.on("drawend",(e)=>{console.log(e.feature.getGeometry())})   如果你那边是想进行一个类似几何查询的操作,使用 可使用http://iclient.supermap.io/examples/openlayers/editor.html#02_getFeatureByGeometry几何查询方式

new ol.supermap.FeatureService(url).getFeaturesByGeometry 这个接口,然后查询参数里面设置{geometry: e.feature.getGeometry()} 即可

3,357EXP 2019年11月20日
circle rectangle Polygon都一样吗?之前版本的绘制是不一样的
Polygon没有问题的,rectangle 可以用darw控件画出吗?我官网api里没看到呢。  圆的话有两种方式可以代替,一个是转换为polygon对象,一个用距离查询方式替代
ol.geom.Polygon.fromCircle(geo.feature.getGeometry())

rectangle可以用draw绘出来,对draw的geometryFunction事件监听,同时绘制4个点,最大点数设置为2,本质上还是Polygon

geometryFunction = function (coordinates, geometry) {
 if (!geometry) {
  geometry = new ol.geom.Polygon(null);
 }
 var start = coordinates[0];
 var end = coordinates[1];
 geometry.setCoordinates([
  [start, [start[0], end[1]], end, [end[0], start[1]], start]
 ]);
 return geometry;
};

但是circle怎么转换为Polygon啊

好吧,谢谢了,我试试
当然你这个方法是可以的画出矩形,我的意思是draw控件没有直接绘制的option,刚才给你发了转换的方法 你可以试试

ol.geom.Polygon.fromCircle(geo.feature.getGeometry())

使用这个方法转换时会报错

额。。。是这个调用函数产生了影响ol.interaction.Draw.createRegularPolygon(0);
...