【发布时间】:2012-06-14 21:32:37
【问题描述】:
我只是想从街道地址 => lat/long 转换表单字段。 理想情况下,用户输入邮政编码或完整的街道地址,隐藏字段会填充相应的纬度/经度。 无需创建地图。 不需要方向。 只是一个简单的转换。 有什么想法吗?
【问题讨论】:
标签: google-maps google-maps-api-3 geolocation
我只是想从街道地址 => lat/long 转换表单字段。 理想情况下,用户输入邮政编码或完整的街道地址,隐藏字段会填充相应的纬度/经度。 无需创建地图。 不需要方向。 只是一个简单的转换。 有什么想法吗?
【问题讨论】:
标签: google-maps google-maps-api-3 geolocation
您可以使用Google Maps Geocoding web service。但请注意,根据服务条款,您必须在 Google 地图上显示结果。
如果你想使用 JavaScript,可以使用Google Maps API Geocoder。
【讨论】:
SmartyStreets 有一个名为 LiveAddress 的 API,它非常容易挂钩,它不仅可以对地址进行地理编码,还可以验证它是否正确和完整。这是一个简单的带有 JSON 输出的 REST 端点,因此很容易与 Javascript、PHP 等一起使用。(它实际上每秒可以支持数千个地址,每个请求最多支持 100 个地址。)
正如 Andres 所提到的,在使用他们的服务获取纬度/经度时,您需要出示 Google 地图。还有其他 API 没有这个限制,但它们中的大多数都不会验证地址是否实际存在(例如 Google,它只是近似值)并且它们通常具有较低的使用限制。
像 LiveAddress 这样的 API 只会返回有效地址的结果,并且会返回匹配的结果如果它们是真实的,并且没有会阻止您在特定情况下使用它的许可限制。
我是 SmartyStreets 的开发人员之一,因此我很乐意帮助您解决有关使用地址的任何其他问题。
顺便说一句,这里有一个不为人知的秘密:您实际上可以将地址作为一行提交(这意味着您的表单中只需要一个字段而不是 4 或 5)和你仍然会得到有效的结果。这是jQuery 和PHP 的示例。
【讨论】:
<script> function convertAddress() { var geocoder; var address = document.getElementById("address").value; geocoder = new google.maps.Geocoder(); geocoder.geocode( { 'address': address}, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { document.getElementById('latlong').value = (results[0].geometry.location); } else { alert("Geocode was not successful for the following reason: " + status); } }); } </script>