iClient for Leaflet实现动态绘圆的几何查询
创始人
2024-02-20 06:44:06

作者:ls

【目录】

  • 背景
  • 前期准备
  • 呈现效果
  • 实现过程
  • 完整代码

【背景】

几何查询是WebGIS项目中一项比较常用的功能,SuperMap iClient 产品支持的几何对象类型众多,能够满足用户的许多需求。

图1 可用于查询的几何对象近期遇到许多小伙伴反应,绘制圆形进行几何查询却得不到预期结果。这是因为 GeoJSON 规范中不支持圆,在主流框架下绘制的圆形并非面对象(Polygon),而是由圆心和半径定义得到的一个圆对象。为了实现圆形查询,就需要将圆对象转化为面对象,接下来让我们看一下实现效果和具体过程:
(1)添加绘制控件;
(2)获取绘制结果并利用插件生成面对象;
(3)将面对象传入几何对象查询,在地图上呈现结果。

【前期准备】

①地图服务:https://iserver.supermap.io/iserver/services/map-world/rest/maps/World
②所需插件:leaflet.draw、leaflet-geoman

【呈现效果】

在这里插入图片描述

【实现过程】

(1)引入必要文件




(2)加载地图服务

var map, url = "https://iserver.supermap.io/iserver/services/map-world/rest/maps/World";
map = L.map('map', {crs: L.CRS.EPSG4326,center: [0, 0],maxZoom: 18,zoom: 1
});
new L.supermap.TiledMapLayer(url).addTo(map);

(3)定义查询功能

function query(lat,lng,r) {// 利用传入的经纬度和半径值构造一个L.circle对象var circle = L.circle([lat,lng], {color: 'red',radius:r});// 借助circleToPolygon()方法,将L.circle转换为L.polygon,其中第二个参数为polygon边的数量var polygon = L.PM.Utils.circleToPolygon(circle, 600);var param = new L.supermap.QueryByGeometryParameters({queryParams: {name: "Capitals@World.1"},geometry: polygon});new L.supermap.QueryService(url).queryByGeometry(param, function (serviceResult) {var result = serviceResult.result;var count = result.totalCount;resultLayer = L.geoJSON(result.recordsets[0].features).addTo(map);var popup = L.popup().setLatLng([lat,lng]).setContent('半径约为:'+ (r/1000).toFixed(2) +'千米
结果数量:'+count+'个').openOn(map);});}

(4)加载绘制工具,仅开启圆形绘制功能

var editableLayers = new L.FeatureGroup();map.addLayer(editableLayers);var options = {position: 'topleft',draw: {polyline: false,polygon: false,circle: {},rectangle: false,marker: false,remove: false},edit: {featureGroup: editableLayers,remove: false}};var drawControl = new L.Control.Draw(options);map.addControl(drawControl);

(5)添加绘制触发事件方法

handleMapEvent(drawControl._container, map);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);// 获取绘制圆形的半径、圆心经纬度,并传入query()方法var r = layer._mRadius;var lat = layer._latlng.lat;var lng = layer._latlng.lng;query(lat,lng,r);});

【完整代码】









代码运行方式:
①在线编辑器:将完整代码复制到 SuperMap iClient 在线示例中运行;
②本地运行:保存完整代码为html文件,将其放置于iServer安装目录\iClient\forJavaScript\examples\leaflet,然后运行该示例。

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...