2012-11-09 132 views
1

我有一個數據庫包含精確到建設水平的地址。當我手動將這些手動放入Google地圖搜索時,Google地圖發現它們沒有問題 - 標記出現在正確的建築物的正上方。但是,當我使用下面的代碼將這些相同的地址傳遞給Google Maps API地址解析器時,標記僅在街道上顯示,而不在建築物中顯示。谷歌地圖geocoder不如谷歌地圖準確

如何提高準確度?

HTML/PHP:

<div id="addressline"><?php echo theaddress(); ?></div> 

JS:

 function myGeocodeFirst() { 
     geocoder = new google.maps.Geocoder(); 

     geocoder.geocode({'address': document.getElementById("addressline").innerHTML}, 
      function(results, status) { 
      if (status == google.maps.GeocoderStatus.OK) { 
       firstLoc = results[0].geometry.location; 
       map = new google.maps.Map(document.getElementById("map_canvas"), 
       { 
       center: firstLoc, 
       zoom: 15, 
       mapTypeId: google.maps.MapTypeId.ROADMAP 
       }); 
       markers = new google.maps.Marker({ 
       position: firstLoc, 
       map: map, 
     }); 

      } 
      else { 
       document.getElementById("text_status").value = status; 
      } 
      } 
     ); 
     } 
window.onload=myGeocodeFirst; 
+0

如果您已經擁有了正確的位置,爲什麼使用地理編碼器?您確定Google地圖所報告的位置不是來自位置數據庫的條目,而不是地理編碼器的條目嗎?你能提供例子嗎? – geocodezip

+0

我沒有經度/緯度,只是表格中的地址:123 Road,City,P05T C0D3 – user1444027

+0

您是否有示例地址顯示該問題? – geocodezip

回答

3

谷歌地圖使用多種不同的數據源,以在地圖上找到搜索結果。

您看到的「正確」條目是Places數據庫條目。查看this page並輸入搜索字符串(St Clement's Church,Edge Lane,Chorlton,M21 9JF)。

地址解析器被設計成返回郵政地址座標,沒有在你的字符串足夠的信息,它返回準確的結果:

http://www.geocodezip.com/v3_example_geo2.asp?addr1=St%20Clement%E2%80%99s%20Church,%20Edge%20Lane,%20Chorlton,%20M21%209JF&geocode=1

看起來它只是返回的地址解析郵編:

Manchester M21 9JF, UK (53.4414411, -2.285287100000005) 

它確實看起來像geocoder確實有它的位置。如果我使用 「聖克萊門特教堂,邊緣巷」,它似乎得到了 「屋頂」 的地址解析(雖然它報告 「近似」)

http://www.geocodezip.com/v3_example_geo2.asp?addr1=St%20Clement%E2%80%99s%20Church,%20Edge%20Lane,%20Chorlton,%20M21%209JF&geocode=1&addr2=St%20Clement%E2%80%99s%20Church,%20Edge%20Lane&geocode=2

St Clement's Church, 6 Edge Ln, Manchester, Lancashire M21 9JF, UK (53.4406823, -2.283755499999984) 

proof of concept fiddle

代碼片段:

var geocoder, map, service, infowindow, bounds; 
 

 
function initialize() { 
 
    map = new google.maps.Map(
 
    document.getElementById("map_canvas"), { 
 
     center: new google.maps.LatLng(37.4419, -122.1419), 
 
     zoom: 13, 
 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
 
    }); 
 
    var request = { 
 
    query: "St Clement’s Church, Edge Lane, Chorlton, M21 9JF" 
 
    } 
 
    infowindow = new google.maps.InfoWindow(); 
 
    service = new google.maps.places.PlacesService(map); 
 
    bounds = new google.maps.LatLngBounds(); 
 
    service.textSearch(request, callback); 
 

 
} 
 
google.maps.event.addDomListener(window, "load", initialize); 
 

 
function callback(results, status) { 
 
    if (status == google.maps.places.PlacesServiceStatus.OK) { 
 
    for (var i = 0; i < results.length; i++) { 
 
     var place = results[i]; 
 
     var marker = createMarker(results[i]); 
 
     bounds.extend(marker.getPosition()) 
 
    } 
 
    map.fitBounds(bounds); 
 
    google.maps.event.trigger(marker, 'click'); 
 
    } 
 
} 
 

 
function createMarker(place) { 
 
    var placeLoc = place.geometry.location; 
 
    var marker = new google.maps.Marker({ 
 
    map: map, 
 
    position: place.geometry.location 
 
    }); 
 

 
    google.maps.event.addListener(marker, 'click', function() { 
 
    infowindow.setContent(place.name); 
 
    infowindow.open(map, this); 
 
    }); 
 
    return marker; 
 
}
html, 
 
body, 
 
#map_canvas { 
 
    height: 100%; 
 
    width: 100%; 
 
    margin: 0px; 
 
    padding: 0px 
 
}
<script src="https://maps.googleapis.com/maps/api/js?libraries=places"></script> 
 
<div id="map_canvas"></div>

+0

好的,謝謝你看起來我所有的地址都是部分地址。有沒有辦法在部分地址的Google Maps API中獲得更準確的結果?我建立的編號/名稱,城市/地區和郵編主要是 – user1444027

+0

您可以嘗試查看Places API是否比使用您的數據的地理編碼器更好。 – geocodezip

+0

我們如何使用Places API與gecoder數據?@geocodezip –