Leaflet 单张点击地图并检索地址

Leaflet 单张点击地图并检索地址,leaflet,reverse-geocoding,Leaflet,Reverse Geocoding,我正在制作一张基于地图的传单。根据您在地图上单击的位置,您将获得真实地址(街道、城市、地区)或商业名称:在链接的示例中,缩放地图,然后单击任何餐厅,您将获得“皇家孟加拉印度餐厅”,而不是地址。。。 为了避免这种情况,我尝试首先检测地址是否为真实地址: map.on('click', function (e) { geocodeService.reverse().latlng(e.latlng).run(function (error, result) { if (err

我正在制作一张基于地图的传单。根据您在地图上单击的位置,您将获得真实地址(街道、城市、地区)或商业名称:在链接的示例中,缩放地图,然后单击任何餐厅,您将获得“皇家孟加拉印度餐厅”,而不是地址。。。 为了避免这种情况,我尝试首先检测地址是否为真实地址:

  map.on('click', function (e) {

    geocodeService.reverse().latlng(e.latlng).run(function (error, result) {
      if (error) {  return; }

      let address = result.address.Match_addr;
          lat = parseFloat(e.latlng.lat);
          lon = parseFloat(e.latlng.lng);

      getAddress(address,lat,lon);

    });  

 });   

 function getAddress(addr,lat,lon) {

     let ad = addr.split(',');

     if(typeof ad[1] == "string") { // OK -> real address

        alert(ad[0]+', '+ad[2]+' '+ad[1]+'');
        //   street      city     zip code     ----> works perfectly

     }

     else if(typeof ad[1] == "undefined") { // commercial name

        // ...now what I'm tying to achieve: fire pseudo-click with new coords on map

        morelat = lat+0.00005;
        morelon = lon+0.00005;

        map.fire('click',[morelat,morelon]) // <--- doesn't work but looking for something like

     }

 }

有什么好办法吗?

好的,看起来很简单:

result.address.LongLabel是完整地址,包括第一位的商业名称(如果提供)

result.address.Match_addr是商业名称(如果提供),否则是真实地址(如果没有提供)

LongLabel.length(在我的测试中)是6(真实地址)或7(带有商业地址)


好的:真正的地址是longLabel JSON…它似乎对法国是可用的。将针对其他国家/地区/地址系统进行测试。
     else if(typeof ad[1] == "undefined") { // commercial name

        morelat = lat+0.00005;
        morelon = lon+0.00005;

        geocodeService.reverse().latlng([morelat,morelon]).run(function (error, result) {
            if (error) { return; }
            getAddress(addr,morelat,morelon)
        });

     }
      map.on('click', function (e) {

          geocodeService.reverse().latlng(e.latlng).run(function (error, result) {
              if (error) {  return; }
              let elems = result.address.LongLabel.split(',')
              if(elems.length==6) {
                address = result.address.LongLabel;
              }
              if(elems.length==7) {
                // remove commercial name
                address = result.address.LongLabel.replace(result.address.Match_addr+',','');
              }
              let ad = address.split(',');
              alert(ad[0]+', '+ad[2]+' '+ad[1]+'');
          });  

      });