首页 / 浏览问题 / WebGIS / 问题详情
反向地址匹配无法返回数据
27EXP 2023年08月18日
clickStart: function () {
  this.startLatlng = this.rightClickPosition;
  if (this.startMarker) {
    this.map.removeLayer(this.startMarker);
  }
  // 在此处添加一个起点的marker
  this.startMarker = L.marker([this.rightClickPosition.lat, this.rightClickPosition.lng], {icon: this.startIco});
  this.startMarker.addTo(this.map);
  this.showMenu = false;
  // 向仓库提交修改导航组件的显示状态
  this.$store.commit('changeNavStatus', true);

  // 反向匹配参数
  let geoDecodeParam = new GeoDecodingParameter({
    x: this.startLatlng.lng, // 横坐标
    y: this.startLatlng.lat, // 纵坐标
    fromIndex: 0, // 设置返回对象的起始索引值
    toIndex: 10, // 设置返回对象的结束索引值
    // filters: "", // 过滤字段
    prjCoordSys: {"epsgCode": 4326}, // 坐标设置
    maxReturn: 3, // 最大结果数
    geoDecodingRadius: 1000 // 查询半径
  });
  // 创建地址匹配服务
  let addressMatchService = new AddressMatchService(this.addressMatchUrl);
  // console.log(addressMatchService);
  // 向服务端发送请求进行反向地址匹配,并获取返回的结果
  addressMatchService.decode(geoDecodeParam, (obj) => {
    console.log(obj.result);
  });
},

为什么我在触发clickStart事件后,在浏览器的调试工具中会夯住,并没有打印出obj.result的值,当我再次刷新页面时,打印窗口会快速弹出一个undefined
之后浏览器就会刷新一个新的页面,也就是我并没有拿到反向地址匹配的数据

1个回答

你好,在调用反向地址匹配接口时,看一下请求是否触发、状态代码是否为200,如果有报错,报错信息可以截图展示一下。

在iserver服务中的address-geodecoding反向匹配页面可以传入相同参数测试是否成功,注意查询半径单位与索引的投影系统单位一致。

https://iclient.supermap.io/examples/leaflet/editor.html#addressMatchService

1,865EXP 2023年08月18日

在iserver服务中同样也无法拿到服务器返回结果,一直处于加载的状态
我又重新尝试了,应该就是查询半径有问题,我设置为-1时就能拿到返回结果,但是其他值就会夯住,无法返回。
您说的这个"注意查询半径单位与索引的投影系统单位一致"我不太明白什么意思,但是问题好像就出在这个上面,麻烦给解答一下

如果查询半径未设置,则使用默认值 -1,表示对整个图层范围内进行查询。查询半径单位与索引的投影系统单位一致,比如以度为单位时,查询半径默认为0.01度;以米为单位时,查询半径默认为500米。根据你的坐标系单位进行设置。
这里边是有什么换算关系吗,比如我的项目里使用的是epsgCode:4326,我想要反向匹配当前坐标点半径200米内的poi点,应该怎么设置查询半径?

4326坐标系单位为度,如果是查询200米范围,需要将米换算为度再进行查询,可以根据米和度之间的换算公式进行计算。

https://blog.csdn.net/jackliuy/article/details/54311539

...