2016-07-29 46 views
0

我碰到一個緯度給出的位置和經度:谷歌地理編碼器將返回來自請求的值不同的緯度和經度

getLocationFromCoords(lat, lng) { 
    var geocoder = new google.maps.Geocoder(); 
    var latLng = new google.maps.LatLng(parseFloat(lat), parseFloat(lng)); 
    geocoder.geocode({ 
     'latLng': latLng 
    }, function (results, status) { 
     if (status === google.maps.GeocoderStatus.OK) { 
      if (typeof results[0].geometry.location != 'undefined') { 

       console.log(lat, lng); 
       console.log(results[0].geometry.location.lat(), results[0].geometry.location.lng()); 

       // set the location 
      } else { 
       //... 
      } 
     }); 
    }); 
} 

的問題是,從results[0].geometry.location緯度和經度從值不同請求。上面的代碼顯示在控制檯:

38.9067339 1.4205983

38.9069681 1.4205133000000387

所以我錯過了什麼?爲什麼不是相同的值?

+1

什麼你想幹什麼? LatLong地址或LatLong地址? –

+0

@TuğcaEker - LatLong地址(它也包含經緯度)。 – Manolo

+1

好的。您正在申請**反向地理編碼**將座標轉換爲地址。您無法獲得完全相同的GeoLocation,因爲Google會向您返回最近的記錄。作爲一個檢查,預期和結果之間只有20-30米。別擔心,這很正常。 –

回答

1

地理編碼或反向地理編碼無法給出確切的結果。如果您將Geocode地址發送到LatLong,您將從Google獲得最合適且最近的記錄。這是正常的行爲。谷歌的官方例子也有同樣的行爲。 (沒有錯誤或問題)。

檢查fiddle;當你搜索一個已知地址或已知的地方

function initMap() { 
 
    var map = new google.maps.Map(document.getElementById('map'), { 
 
    zoom: 8, 
 
    center: {lat: 40.731, lng: -73.997} 
 
    }); 
 
    var geocoder = new google.maps.Geocoder; 
 
    var infowindow = new google.maps.InfoWindow; 
 

 
    document.getElementById('submit').addEventListener('click', function() { 
 
    geocodeLatLng(geocoder, map, infowindow); 
 
    }); 
 
} 
 

 
function geocodeLatLng(geocoder, map, infowindow) { 
 
    var input = document.getElementById('latlng').value; 
 
    var latlngStr = input.split(',', 2); 
 
    var latlng = {lat: parseFloat(latlngStr[0]), lng: parseFloat(latlngStr[1])}; 
 
    geocoder.geocode({'location': latlng}, function(results, status) { 
 
    if (status === 'OK') { 
 
     if (results[1]) { 
 
     map.setZoom(11); 
 
     var marker = new google.maps.Marker({ 
 
      position: latlng, 
 
      map: map 
 
     }); 
 
     infowindow.setContent(
 
     \t results[1].formatted_address + "<br />" + results[1].geometry.location 
 
     ); 
 
     infowindow.open(map, marker); 
 
     } else { 
 
     window.alert('No results found'); 
 
     } 
 
    } else { 
 
     window.alert('Geocoder failed due to: ' + status); 
 
    } 
 
    }); 
 
}
html, body { 
 
    height: 100%; 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 
#map { 
 
    height: 100%; 
 
} 
 
#floating-panel { 
 
    position: absolute; 
 
    top: 10px; 
 
    left: 25%; 
 
    z-index: 5; 
 
    background-color: #fff; 
 
    padding: 5px; 
 
    border: 1px solid #999; 
 
    text-align: center; 
 
    font-family: 'Roboto','sans-serif'; 
 
    line-height: 30px; 
 
    padding-left: 10px; 
 
} 
 
#floating-panel { 
 
    position: absolute; 
 
    top: 5px; 
 
    left: 50%; 
 
    margin-left: -180px; 
 
    width: 350px; 
 
    z-index: 5; 
 
    background-color: #fff; 
 
    padding: 5px; 
 
    border: 1px solid #999; 
 
} 
 
#latlng { 
 
    width: 225px; 
 
}
<div id="floating-panel"> 
 
    <input id="latlng" type="text" value="40.714224,-73.961452"> 
 
    <input id="submit" type="button" value="Reverse Geocode"> 
 
</div> 
 
<div id="map"></div> 
 
<!-- Replace the value of the key parameter with your own API key. --> 
 
<script async defer 
 
src="https://maps.googleapis.com/maps/api/js?callback=initMap"> 
 
</script>

0

天氣預報(匹配地點經緯度,反之亦然)只精確。有數據庫可以提供所有實際地址的確切信息。而且,還有專門使用這種數據的服務和API。例如,地址驗證服務根據真實地址列表進行搜索。他們解析地址輸入,並可以確定輸入是否是真實地址。對於使用這些服務的人員(如處理運輸的人員),確切的準確性對於他們的地址很重要。

但是,即使沒有完美的地理編碼服務,即使沒有與輸入相匹配的官方數據,許多地理編碼服務也傾向於給用戶一個答案。例如,Google的地圖服務即使輸入不是真實地址,也會給你一個結果。他們使用好的算法在地圖上爲您提供「估計的猜測」。 Google的服務有很多好處,但其中一個弱點是某些回覆不準確。

在其他情況下,大型公共場所或其他指定位置可能會匹配多個緯度和經度對,但匹配該名稱的數據與搜索輸入略有不同。

在您的具體情況中,Google可能會發現您的緯度和經度輸入與實際地標或地點非常接近,並且認爲這是您想要的。或者,這個地方很大(像一個公園),谷歌對該公園的信息指出了一個不同的「中間」地點。

谷歌的結果通常很接近,如前所述。當您使用其中一種服務並輸入緯度和經度時,搜索相應的地點,然後再轉換爲經度和緯度,很可能會發生輕微變化。


(全面披露:我爲SmartyStreets工作,一個地址驗證的公司。)

相關問題