是否可以允许我的网站用户在我使用Google Maps API显示的地图上标记地点?然后我需要将位置坐标保存到db。
我一直在浏览谷歌地图API,我发现我可以使用网络服务进行这样的搜索:
http://maps.google.com/maps/geo?q=Maine,+United+States&output=json&oe=utf8\&sensor=false&key=my_key
但我不确定它是否正在处理门牌号码(我需要它),而且我不确定如何显示“你的意思是什么?”当他拼错地址时给用户..
有人有想法吗?
谢谢,
答案 0 :(得分:2)
有你想要的好例子
http://digitalinspiration.com/community/location.html
使用这样的代码:
var map = null;
var geocoder = null;
function initialize() {
if (GBrowserIsCompatible()) {
map = new GMap2(document.getElementById("map"));
map.addControl(new GLargeMapControl());
map.addControl(new GMapTypeControl());
map.setCenter(new GLatLng(37.4419, -122.1419), 14);
map.enableScrollWheelZoom();
geocoder = new GClientGeocoder();
GEvent.addListener(map, "click", clicked);
}
}
function showAddress(address) {
if (geocoder) {
geocoder.getLatLng(
address,
function(point) {
if (!point) {
alert("We're sorry but '" + address + "' cannot be found on Google Maps. Please try again.");
} else {
map.panTo(point);
}
});
}
}
function clicked(overlay, latlng) {
if (latlng) {
geocoder.getLocations(latlng, function(addresses) {
if(addresses.Status.code != 200) {
alert("reverse geocoder failed to find an address for " + latlng.toUrlValue());
}
else {
address = addresses.Placemark[0];
var myHtml = address.address;
map.openInfoWindow(latlng, myHtml);
}
});
}
}
应该是你想要的。
答案 1 :(得分:0)
我建立了一个使用Maps API在全球范围内展示活动的网站(300多个体育赛事),所以是的,这是可能的。地理编码通常非常有效(就像在地图站点上一样)。我已经将它用于地图显示,用户可以拖动标记来调整确切的位置,然后保存坐标。通过这种方式,你真的不需要'你的意思吗?' - 打字盒。
答案 2 :(得分:0)
我最近编写并开源了SDK for Google's Geocoding API,这样可以更轻松地使用API。
请注意,这是针对 v3 API的,而在上面的代码中,您引用了 v2 API(现已弃用)
API本身将自动更正输入中的拼写错误。因此,如果您想确保用户输入的位置实际上是街道地址,那么您就是这样做的(使用我的SDK)
$service = new GoogleGeocodeServiceV3( new CurlCommunicator() );
$response = $service->geocode( '123 Any Street, USA' );
if ( $response->isValid() && $response->hasResults() )
{
// Is it a street-level result?
if ( $response->assertType( GoogleGeocodeResponseV3::ACT_STREET_ADDRESS ) )
{
// Street-level address found
} else {
// Not a street-level address
}
}
如果他们的拼写错误让API无法找到任何内容,那么$response->hasResults()
将返回false
(或count( $response )
将0
)