Google 地图地理编码 API(如何获取 Lat/Long)
Google Maps Geocoding API (How to get Lat/Long)
我正在开发一个与地图交互的 Web 应用程序,所以我正在使用 Google 地图 JavaScript API (v3.0)。
该应用程序将有一个搜索框(一个 HTML <input>
标签),用户可以在其中输入人类可读的地名(例如“19/2 Pine Street, Seattle”)并点击按钮。输入应发送至 Google 地图 API,并且应 return 搜索地点的地理位置(纬度和经度)。
我已经搜索了 Google 地图 API 文档,但那里的一切都太混乱了。我希望是否有人可以帮助我提供自定义解决方案。
这是我到目前为止所做的:
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Demo Rails App</title>
<script src="https://maps.googleapis.com/maps/api/js?key=[key-here]"></script>
<script>
var geocoder;
function initialize() {
geocoder = new google.maps.Geocoder();
}
function codeAddress() {
var address = document.getElementById("address").value;
geocoder.geocode( { 'address': address }, function(r, s) {
alert(r[0].geometry.location);
});
}
</script>
</head>
<body onload="initialize()">
<input type="search" id="address">
<input type="button" value="Submit" onclick="codeAddress()">
</body>
</html>
谢谢!
<script src="https://maps.googleapis.com/maps/api/js?key=[key-here]">you forgot to close the script tag</script>
这就是它不起作用的原因
编辑:自动完成,我刚刚拼凑的一些东西
googlePlaceSearch = function (qry, callback) {
var placeSearch, autocomplete;
var addressParts = {
street_number: '',
route: '',
locality: '',
administrative_area_level_1: '',
country: '',
postal_code: ''
};
var componentForm = {
street_number: 'short_name',
route: 'long_name',
locality: 'long_name',
administrative_area_level_1: 'short_name',
country: 'long_name',
postal_code: 'short_name'
};
var fillInAddress() {
placeSearch.style.display = 'none';
var place = autocomplete.getPlace();
if (place) {
place.address_components.forEach(function (comp) {
var addressType = comp.types[0];
if (componentForm[addressType]) {
addressParts[addressType] = comp[componentForm[addressType]];
}
});
}
callback(addressParts);
google.maps.event.removeListener(autocomplete, 'place_changed', fillInAddress);
}
autocomplete = new google.maps.places.Autocomplete((document.querySelector(qry)), {
types: ['address']
});
google.maps.event.addListener(autocomplete, 'place_changed', fillInAddress);
};
开始使用
googlePlaceSearch("#address", someFn);
其中 #address 是一个 CSS 选择器来定位输入元素(在你的情况下很容易,就像我说的那样,#address,但我把它放在一起是为了灵活),和 someFn是一个接收addressParts
的函数,所以你可以用返回的地址
做你想做的事
哦,我刚刚找到解决方案:
<script src="https://maps.googleapis.com/maps/api/js?key=[key-here]&libraries=places"></script>
<script>
var geocoder;
function initialize() {
geocoder = new google.maps.Geocoder();
}
function codeAddress() {
var input = document.getElementById("address");
var autocomplete = new google.maps.places.Autocomplete(input);
var address = document.getElementById("address").value;
geocoder.geocode( { 'address': address }, function(r, s) {
alert(r[0].geometry.location);
});
}
</script>
和HTML:
<body onload="initialize()">
<input type="search" id="address">
<input type="button" value="Submit" onclick="codeAddress()">
</body>
我正在开发一个与地图交互的 Web 应用程序,所以我正在使用 Google 地图 JavaScript API (v3.0)。
该应用程序将有一个搜索框(一个 HTML <input>
标签),用户可以在其中输入人类可读的地名(例如“19/2 Pine Street, Seattle”)并点击按钮。输入应发送至 Google 地图 API,并且应 return 搜索地点的地理位置(纬度和经度)。
我已经搜索了 Google 地图 API 文档,但那里的一切都太混乱了。我希望是否有人可以帮助我提供自定义解决方案。
这是我到目前为止所做的:
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Demo Rails App</title>
<script src="https://maps.googleapis.com/maps/api/js?key=[key-here]"></script>
<script>
var geocoder;
function initialize() {
geocoder = new google.maps.Geocoder();
}
function codeAddress() {
var address = document.getElementById("address").value;
geocoder.geocode( { 'address': address }, function(r, s) {
alert(r[0].geometry.location);
});
}
</script>
</head>
<body onload="initialize()">
<input type="search" id="address">
<input type="button" value="Submit" onclick="codeAddress()">
</body>
</html>
谢谢!
<script src="https://maps.googleapis.com/maps/api/js?key=[key-here]">you forgot to close the script tag</script>
这就是它不起作用的原因
编辑:自动完成,我刚刚拼凑的一些东西
googlePlaceSearch = function (qry, callback) {
var placeSearch, autocomplete;
var addressParts = {
street_number: '',
route: '',
locality: '',
administrative_area_level_1: '',
country: '',
postal_code: ''
};
var componentForm = {
street_number: 'short_name',
route: 'long_name',
locality: 'long_name',
administrative_area_level_1: 'short_name',
country: 'long_name',
postal_code: 'short_name'
};
var fillInAddress() {
placeSearch.style.display = 'none';
var place = autocomplete.getPlace();
if (place) {
place.address_components.forEach(function (comp) {
var addressType = comp.types[0];
if (componentForm[addressType]) {
addressParts[addressType] = comp[componentForm[addressType]];
}
});
}
callback(addressParts);
google.maps.event.removeListener(autocomplete, 'place_changed', fillInAddress);
}
autocomplete = new google.maps.places.Autocomplete((document.querySelector(qry)), {
types: ['address']
});
google.maps.event.addListener(autocomplete, 'place_changed', fillInAddress);
};
开始使用
googlePlaceSearch("#address", someFn);
其中 #address 是一个 CSS 选择器来定位输入元素(在你的情况下很容易,就像我说的那样,#address,但我把它放在一起是为了灵活),和 someFn是一个接收addressParts
的函数,所以你可以用返回的地址
哦,我刚刚找到解决方案:
<script src="https://maps.googleapis.com/maps/api/js?key=[key-here]&libraries=places"></script>
<script>
var geocoder;
function initialize() {
geocoder = new google.maps.Geocoder();
}
function codeAddress() {
var input = document.getElementById("address");
var autocomplete = new google.maps.places.Autocomplete(input);
var address = document.getElementById("address").value;
geocoder.geocode( { 'address': address }, function(r, s) {
alert(r[0].geometry.location);
});
}
</script>
和HTML:
<body onload="initialize()">
<input type="search" id="address">
<input type="button" value="Submit" onclick="codeAddress()">
</body>