【问题标题】:How to get exact location name with lat & long google map?如何使用经纬度谷歌地图获取确切的位置名称?
【发布时间】:2017-05-26 00:30:03
【问题描述】:

我想使用用户的纬度和经度来获取位置名称,例如任何剧院、餐厅、著名公园、度假胜地、购物商店。我正在使用谷歌地图 api,但它们只显示区域名称而不是任何商店名称。如何获取位置名称?

【问题讨论】:

    标签: api dictionary location


    【解决方案1】:

    您可以使用 Google Places API 来获取此信息。 Google 地图不会返回基于纬度和经度参数的商店或地点数据。

    我会让您的 API 密钥与 Google Places API 一起使用,然后调用 getNearbyPlaces 端点。端点需要纬度、经度和半径(必须在其中找到结果的距离,以米为单位)参数。请记住,这仍然是一个查询,因此您的响应将包含多个结果,默认情况下,结果按受欢迎程度排序。我还喜欢指定一个“type=establishment”作为可选参数,这样我就不会得到像“route”这样的抽象结果。

    您可以在RapidAPI here. 中对此进行测试,我已将您直接链接到 getNearbyPlaces 端点。只需填写您的 apiKey、纬度、经度、半径(为了具体起见,我喜欢将其保持在 20 米左右)和任何其他可选参数。单击“测试函数”以查看详细的 JSON 响应。我会给你看一个截图。

    在此示例中,我查找了 Bob's Doughnuts 的纬度和经度。繁荣!事实上,我的第一个结果是旧金山的 Bob's Donuts。 RapidAPI 还允许您生成代码 sn-p,您可以将其复制并直接粘贴到您自己的代码中。您只需单击响应上方的“代码”按钮,登录并选择您使用的语言。上述调用提供的代码 sn-p 如下所示:

    希望这会有所帮助!还有一件事.. 由于结果是按受欢迎程度排序的,所以第一个结果可能并不总是理想的结果。 API 提供了一个“rankBy”参数,但我认为 Google 仍在解决一些错误。同时,我将构建一个循环,按距离查找最近的结果项。您需要做的就是使用 Haversine 公式创建一个距离函数。我会为你建立一个快速的功能!我使用了this post.的haversine公式函数,代码如下。

    // Still using my Bob's Doughnuts example
    const startLatitude = "37.7918904"; // your original query latitude
    const startLongitude = "-122.4209966"; // your original query longitude
    
    function closestResult(results) {
      let closestResult = null;
      let shortestDistance = null;
    
      for (let i = 0; i < results.length; i++) {
        let location = results[i].geometry.location;
        let currentDistance =
          getDistanceFromLatLonInKm(startLatitude, startLongitude, location.lat, location.lng);
        if (shortestDistance === null) {
          closestResult = results[i];
          shortestDistance = currentDistance;
        } else if (currentDistance < shortestDistance) {
          closestResult = results[i];
          shortestDistance = currentDistance;
        }
      }
      return closestResult;
    }
    
    function getDistanceFromLatLonInKm(lat1,lon1,lat2,lon2) {
      var R = 6371; // Radius of the earth in km
      var dLat = deg2rad(lat2-lat1);  // deg2rad below
      var dLon = deg2rad(lon2-lon1);
      var a =
        Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) *
        Math.sin(dLon/2) * Math.sin(dLon/2)
        ;
      var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
      var d = R * c; // Distance in km
      return d;
    }
    
    function deg2rad(deg) {
      return deg * (Math.PI/180);
    }
    

    现在您的成功回调可能如下所示:

    编码愉快!

    【讨论】:

      猜你喜欢
      • 2019-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-01
      • 2013-10-30
      • 1970-01-01
      • 2015-03-24
      • 1970-01-01
      相关资源
      最近更新 更多