需要

2015-10-29 63 views
-1

https://developers.google.com/maps/documentation/javascript/examples/places-searchbox需要

我使用這是我從上面的鏈接得到的地圖從谷歌地圖API獲取經緯度。它在我的網站上工作正常。當我搜索一個地方時,該地點將顯示在地圖上。我需要獲取它的經度和緯度,並且當我點擊Google地圖上的某個地方時,應該顯示在文本框中。

的代碼如下所示

<!DOCTYPE html> 
<html> 
    <head> 
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no"> 
    <meta charset="utf-8"> 
    <style> 
     html, body { 
     height: 100%; 
     margin: 0; 
     padding: 0; 
     } 
     #map { 
     height: 100%; 
     } 
.controls { 
    margin-top: 10px; 
    border: 1px solid transparent; 
    border-radius: 2px 0 0 2px; 
    box-sizing: border-box; 
    -moz-box-sizing: border-box; 
    height: 32px; 
    outline: none; 
    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3); 
} 

#pac-input { 
    background-color: #fff; 
    font-family: Roboto; 
    font-size: 15px; 
    font-weight: 300; 
    margin-left: 12px; 
    padding: 0 11px 0 13px; 
    text-overflow: ellipsis; 
    width: 300px; 
} 

#pac-input:focus { 
    border-color: #4d90fe; 
} 

.pac-container { 
    font-family: Roboto; 
} 

#type-selector { 
    color: #fff; 
    background-color: #4d90fe; 
    padding: 5px 11px 0px 11px; 
} 

#type-selector label { 
    font-family: Roboto; 
    font-size: 13px; 
    font-weight: 300; 
} 

    </style> 
    <title>Places Searchbox</title> 
    <style> 
     #target { 
     width: 345px; 
     } 
    </style> 
    </head> 
    <body> 
    <input id="pac-input" class="controls" type="text" placeholder="Search Box"> 
    <div id="map"></div> 
    <script> 
// This example adds a search box to a map, using the Google Place Autocomplete 
// feature. People can enter geographical searches. The search box will return a 
// pick list containing a mix of places and predicted search terms. 

function initAutocomplete() { 
    var map = new google.maps.Map(document.getElementById('map'), { 
    center: {lat: -33.8688, lng: 151.2195}, 
    zoom: 13, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
    }); 

    // Create the search box and link it to the UI element. 
    var input = document.getElementById('pac-input'); 
    var searchBox = new google.maps.places.SearchBox(input); 
    map.controls[google.maps.ControlPosition.TOP_LEFT].push(input); 

    // Bias the SearchBox results towards current map's viewport. 
    map.addListener('bounds_changed', function() { 
    searchBox.setBounds(map.getBounds()); 
    }); 

    var markers = []; 
    // [START region_getplaces] 
    // Listen for the event fired when the user selects a prediction and retrieve 
    // more details for that place. 
    searchBox.addListener('places_changed', function() { 
    var places = searchBox.getPlaces(); 

    if (places.length == 0) { 
     return; 
    } 

    // Clear out the old markers. 
    markers.forEach(function(marker) { 
     marker.setMap(null); 
    }); 
    markers = []; 

    // For each place, get the icon, name and location. 
    var bounds = new google.maps.LatLngBounds(); 
    places.forEach(function(place) { 
     var icon = { 
     url: place.icon, 
     size: new google.maps.Size(71, 71), 
     origin: new google.maps.Point(0, 0), 
     anchor: new google.maps.Point(17, 34), 
     scaledSize: new google.maps.Size(25, 25) 
     }; 

     // Create a marker for each place. 
     markers.push(new google.maps.Marker({ 
     map: map, 
     icon: icon, 
     title: place.name, 
     position: place.geometry.location 
     })); 

     if (place.geometry.viewport) { 
     // Only geocodes have viewport. 
     bounds.union(place.geometry.viewport); 
     } else { 
     bounds.extend(place.geometry.location); 
     } 
    }); 
    map.fitBounds(bounds); 
    }); 
    // [END region_getplaces] 
} 


    </script> 
    <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyAkwr5rmzY9btU08sQlU9N0qfmo8YmE91Y&libraries=places&callback=initAutocomplete" 
     async defer></script> 
    </body> 
</html> 

回答

1
places.forEach(function(place) { 
console.log("lat: "+place.geometry.location.lat()+" lng: "+place.geometry.location.lng()) 
//etc 
+0

我是否需要更換代碼places.forEach(函數(地方){VAR 圖標= { url:place.icon, size:new google.maps.Size(71,71), origin:new google.maps.Point(0,0), anchor:new google.maps.Point(17,34), scaledSize:new google .maps.Size(25,25)用上面的代碼? – vyshakh

+0

不,上面的代碼會將您正在查找的座標記錄到控制檯。您應該添加該行並保留其他所有內容。雖然如果你想要在文本框中的數據,你需要將文本框添加到HTML,然後填充它們:'document.getElementById('latbox')。value = place.geometry.location.lat();' – lucas

+0

請考慮編輯您的帖子以添加有關您的代碼的功能的更多說明以及爲什麼它可以解決問題。一個主要包含代碼的答案(即使它正在工作)通常不會幫助OP瞭解他們的問題。 – SuperBiasedMan

0

您已經擁有了位置數據的收集地點,您可以使用循環。這是最簡單的方法。

for (var i = 0, place; place = places[i]; i++) { 

     alert("latitude: "+place.geometry.location.lat()+" longitude: "+place.geometry.location.lng()); 


}); 

,如果你想一個陣列

var locationArray[]; 

for (var i = 0, place; place = places[i]; i++) { 

     alert("latitude: "+place.geometry.location.lat()+" longitude: "+place.geometry.location.lng()); 

     locationArray[i]= places[i].geometry.location; 

}); 

在這裏添加這是代碼示例jsfiddle

+0

嗨...即時通訊獲取座標。事實上,當我點擊地圖上的某個位置時,我需要獲取每個座標。我該怎麼做? – vyshakh

+0

檢查編輯的答案,如果它可以幫助你不要忘記標記它正確 –

0

你就需要把地圖對象事件偵聽器,然後獲取座標當發生點擊事件時:

map.addListener('click', function (locationdata) { 
    document.getElementById("latitude").value =locationdata.latLng.lat(); 
    document.getElementById("longitude").value =locationdata.latLng.lng(); 
}); 

並調整您的html acco rdingly

0

爲每個標記添加一個監聽器,使用它將該標記的位置添加到文本框。

// Create a marker for each place. 
    var marker = new google.maps.Marker({ 
    map: map, 
    icon: icon, 
    title: place.name, 
    position: place.geometry.location 
    }); 
    google.maps.event.addListener(marker,'click',function(evt) { 
     document.getElementById('coordinates').value = marker.getPosition().toUrlValue(6); 
    }); 
    markers.push(marker); 

proof of concept fiddle

代碼片段:

// This example adds a search box to a map, using the Google Place Autocomplete 
 
// feature. People can enter geographical searches. The search box will return a 
 
// pick list containing a mix of places and predicted search terms. 
 
// clicked marker coordinates will be placed in the input text element with id="coordinates" 
 

 
function initAutocomplete() { 
 
    var map = new google.maps.Map(document.getElementById('map'), { 
 
    center: { 
 
     lat: -33.8688, 
 
     lng: 151.2195 
 
    }, 
 
    zoom: 13, 
 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
 
    }); 
 

 
    // Create the search box and link it to the UI element. 
 
    var input = document.getElementById('pac-input'); 
 
    var searchBox = new google.maps.places.SearchBox(input); 
 
    map.controls[google.maps.ControlPosition.TOP_LEFT].push(input); 
 

 
    // Bias the SearchBox results towards current map's viewport. 
 
    map.addListener('bounds_changed', function() { 
 
    searchBox.setBounds(map.getBounds()); 
 
    }); 
 

 
    var markers = []; 
 
    // [START region_getplaces] 
 
    // Listen for the event fired when the user selects a prediction and retrieve 
 
    // more details for that place. 
 
    searchBox.addListener('places_changed', function() { 
 
    var places = searchBox.getPlaces(); 
 

 
    if (places.length == 0) { 
 
     return; 
 
    } 
 

 
    // Clear out the old markers. 
 
    markers.forEach(function(marker) { 
 
     marker.setMap(null); 
 
    }); 
 
    markers = []; 
 

 
    // For each place, get the icon, name and location. 
 
    var bounds = new google.maps.LatLngBounds(); 
 
    places.forEach(function(place) { 
 
     var icon = { 
 
     url: place.icon, 
 
     size: new google.maps.Size(71, 71), 
 
     origin: new google.maps.Point(0, 0), 
 
     anchor: new google.maps.Point(17, 34), 
 
     scaledSize: new google.maps.Size(25, 25) 
 
     }; 
 

 
     // Create a marker for each place. 
 
     var marker = new google.maps.Marker({ 
 
     map: map, 
 
     icon: icon, 
 
     title: place.name, 
 
     position: place.geometry.location 
 
     }); 
 
     google.maps.event.addListener(marker, 'click', function(evt) { 
 
     document.getElementById('coordinates').value = marker.getPosition().toUrlValue(6); 
 
     }); 
 
     markers.push(marker); 
 
     if (place.geometry.viewport) { 
 
     // Only geocodes have viewport. 
 
     bounds.union(place.geometry.viewport); 
 
     } else { 
 
     bounds.extend(place.geometry.location); 
 
     } 
 
    }); 
 
    map.fitBounds(bounds); 
 
    }); 
 
    // [END region_getplaces] 
 
} 
 
google.maps.event.addDomListener(window, 'load', initAutocomplete);
html, 
 
body { 
 
    height: 100%; 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 
#map { 
 
    height: 100%; 
 
} 
 
.controls { 
 
    margin-top: 10px; 
 
    border: 1px solid transparent; 
 
    border-radius: 2px 0 0 2px; 
 
    box-sizing: border-box; 
 
    -moz-box-sizing: border-box; 
 
    height: 32px; 
 
    outline: none; 
 
    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3); 
 
} 
 
#pac-input { 
 
    background-color: #fff; 
 
    font-family: Roboto; 
 
    font-size: 15px; 
 
    font-weight: 300; 
 
    margin-left: 12px; 
 
    padding: 0 11px 0 13px; 
 
    text-overflow: ellipsis; 
 
    width: 300px; 
 
} 
 
#pac-input:focus { 
 
    border-color: #4d90fe; 
 
} 
 
.pac-container { 
 
    font-family: Roboto; 
 
} 
 
#type-selector { 
 
    color: #fff; 
 
    background-color: #4d90fe; 
 
    padding: 5px 11px 0px 11px; 
 
} 
 
#type-selector label { 
 
    font-family: Roboto; 
 
    font-size: 13px; 
 
    font-weight: 300; 
 
} 
 
#target { 
 
    width: 345px; 
 
}
<script src="https://maps.googleapis.com/maps/api/js?libraries=places"></script> 
 
<input id="coordinates" type="text" size="30" /> 
 
<input id="pac-input" class="controls" type="text" placeholder="Search Box"> 
 
<div id="map"></div>

+0

@geocodezip ...但如何改變座標,當我點擊easch地方? – vyshakh

+0

單擊標記時,座標會發生變化。在搜索框中選擇一個條目可能會有多個結果。 – geocodezip