<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDAodeKstiifB9WhEnZrZY7_mA8abcyJpY&libraries=places"></script>
<input ref="autosearch" type="text" size="50" />
因使用React所以google前面加上window
var autocomplete = new window.google.maps.places.Autocomplete(this.refs.autosearch);
1.用了除與2是因為他有兩個數值(目前不清楚f,b分別表示什麼) 2.可使用geocode來把經緯度轉換為地址(但geocode api官方表示耗用資源高,所以每天有限制免費的request數目,超過將收費)
const context = this;
window.google.maps.event.addListener(autocomplete, 'place_changed', function () {
var place = autocomplete.getPlace();
console.log(place)
if(typeof place.geometry.viewport === 'undefined') {
alert('您好,此位置無法識別請輸入其他地址,謝謝');
context.refs.autosearch.value = '';
return
}
if (place.geometry.viewport) {
const lat = (place.geometry.viewport.f.b + place.geometry.viewport.f.f) / 2;
const lng = (place.geometry.viewport.b.b + place.geometry.viewport.b.f) / 2;
axios.get('https://maps.googleapis.com/maps/api/geocode/json?latlng=' + lat + ',' + lng)
.then((data) => {
let placeInfo = {
address: place.formatted_address,
minAddress: data.data.results[data.data.results.length - 4].formatted_address,
lat: lat,
lng: lng
}
context.setState({place: placeInfo});
console.log(placeInfo)
});
}
});