gpt4 book ai didi

javascript - 查找最近的已知位置 : Google Reverse Geocoding

转载 作者:行者123 更新时间:2023-11-30 16:41:41 24 4
gpt4 key购买 nike

我需要使用 Google Maps API 获取给定坐标的格式化地址。我用 Google Reverse Geo coding用于查找位置名称。当 Google map 数据库中的位置有可用名称时,此方法工作正常。

大多数时候,给定的坐标来自远离城市边界的位置(例如在高速公路上)。该函数返回 ZERO_RESULTS,因为 map 上没有定义名称。要求是找到距离最近的已知定位地址返回。

从功能上讲,这是一个很好的消息,但从技术上讲,如何去做呢?

目前我正在寻找距离该点几(公里)米的位置,检查该位置是否有名称,并递归直到我得到一个名称。

个人不喜欢这种方法,原因如下:

  1. 猜不到去哪个方向才能找到有名字的位置

  2. 我可能会朝一个方向走,但已知的地方在相反的方向只有几米。

  3. 我可能会在增量过程中走得太远,比如在 15 的地方kms away 有一个名字。我搜索 10 公里外的名字并查看又是 20 公里,因为增量标识是 10 公里。

以下是完整的代码,可以正常工作,但存在上述问题。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Map Test</title>
<script type="text/javascript" src="//code.jquery.com/jquery-1.11.1.min.js"></script>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp"></script>

</head>
<body>
<span id="spanId">Loading...</span>
<script>
Number.prototype.toRad = function () {
return this * Math.PI / 180;
}

Number.prototype.toDeg = function () {
return this * 180 / Math.PI;
}

google.maps.LatLng.prototype.destinationPoint = function (brng, dist) {
dist = dist / 6371;
brng = brng.toRad();

var lat1 = this.lat().toRad(), lon1 = this.lng().toRad();

var lat2 = Math.asin(Math.sin(lat1) * Math.cos(dist) +
Math.cos(lat1) * Math.sin(dist) * Math.cos(brng));

var lon2 = lon1 + Math.atan2(Math.sin(brng) * Math.sin(dist) *
Math.cos(lat1),
Math.cos(dist) - Math.sin(lat1) *
Math.sin(lat2));

if (isNaN(lat2) || isNaN(lon2)) return null;

return new google.maps.LatLng(lat2.toDeg(), lon2.toDeg());
}

var pointA = new google.maps.LatLng(32.6811,74.8732);

getLocation(pointA);
var distance = 0;
function getLocation(info) {

var myCenter = info; //new google.maps.LatLng(info.split(",", 3)[1], info.split(",", 3)[2]);
var gc = new google.maps.Geocoder();

gc.geocode({ 'location': myCenter }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[1]) {
document.getElementById('spanId').innerHTML = results[1].formatted_address + ', ' + distance + ' kms away from original point' ;
} else {
window.alert('No results found');
}
} else {
if (status == 'ZERO_RESULTS' )
{
var radiusInKm = 10;
distance += radiusInKm;
document.getElementById('spanId').innerHTML = 'Getting results from ' + distance + ' kms away';
var pointB = pointA.destinationPoint(90, distance);
setTimeout(function(){
getLocation(pointB);
}, 2000);
}

}
});
}


</script>
</body>
</html>

如果有人有好的解决方案,我将不胜感激。

JSFiddle 链接:https://jsfiddle.net/hbybs68q/1/

谢谢。

最佳答案

您需要修改getLocation 函数中的if 条件。 检查结果 [0] 而不是结果 [1]。

if (status == google.maps.GeocoderStatus.OK) {
if (results[0]) {
document.getElementById('spanId').innerHTML = results[0].formatted_address + ', ' + distance + ' kms away from original point' ;
} else {
window.alert('No results found');
}
} else {
window.alert('Geocoder failed due to - ' + status)
}

关于javascript - 查找最近的已知位置 : Google Reverse Geocoding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31875483/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com