如何使用lat& amp;获取确切的位置名称长谷歌地图?

时间:2017-01-11 09:30:39

标签: api dictionary location

我希望使用像任何剧院,餐厅,着名公园,度假胜地,购物商店一样的用户的经纬度来获取位置名称。我使用谷歌地图api,但他们只显示区域名称而不是任何商店名称。我如何获得位置名称?

1 个答案:

答案 0 :(得分:1)

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

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

您可以在RapidAPI here.中对此进行测试。我已将您直接链接到getNearbyPlaces端点。只需填写你的apiKey,纬度,经度,半径(我喜欢将它保持在20米左右以获得特异性),以及任何其他可选参数。单击“TEST功能”以查看详细的JSON响应。我将向您展示这个样子的截图。

responseScreenshot

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

enter image description here

希望这有帮助!还有一件事......由于结果按人气排序,第一个结果可能并不总是理想的结果。 API提供了“rankBy”参数,但我认为谷歌仍然在研究它的一些错误。在此期间,我将构建一个循环,通过距离找到最接近的结果项。您需要做的就是使用Haversine公式创建距离函数。我会为你建立一个快速的功能!我使用了来自this post.的hasrsine公式函数。这是代码。

// 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);
}

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

enter image description here

快乐的编码!