|
楼主 |
发表于 2008-12-4 08:42:16
|
显示全部楼层
Google Maps的反向地理编码来了
Made In Zeal 转载请保留原始链接:http://www.zeali.net/entry/593
标签 ( Tags ): geocoding , google , api
半年前在说 Google Maps API 的反向地理编码(Reverse Geocoding)很遗憾的不提供中国地区的查询,现在终于等到70多个国家都开放的一天了。虽然目前中国地图地址解析器还只支持市/县/区级别的地址,但跟之前只能定位到国家级别比起来已经是能够做一些比较实际的应用了。
具体的实现还是使用 GClientGeocoder 接口的 getLocations(address, callback) 方法,在第一个参数传递坐标信息,callback中处理返回数据。
view plainprint?
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html
xmlns="http://www.w3.org/1999/xhtml"
lang="zh"> - <head>
- <meta
http-equiv="Content-Type"
content="text/html; charset=UTF-8"
/> - <script
language="JavaScript" - src="http://www.google.com/jsapi?key=your api key here"
- type="text/javascript"></script>
- <script
type="text/javascript"> - //<![CDATA[
- google.load("maps", "2.x",{"language" : "zh_CN"});
- var GoogleGeocoder = null;
- google.setOnLoadCallback(function(){
- if (google.maps.BrowserIsCompatible()) {
- var map = new google.maps.Map2(document.getElementById("GmApBrIdD"));
- map.addControl(new google.maps.LargeMapControl());
- map.setCenter(new google.maps.LatLng(36.94989178681327,106.083984375), 4);
- GoogleGeocoder = new GClientGeocoder();
- var onGMapClicked = function(overlay,latlng){
- if (latlng) {
- GoogleGeocoder.getLocations(latlng, function(addresses) {
- if(addresses.Status.code != 200) {
- alert("failed to find an address for " + latlng.toUrlValue());
- }
- else {
- var myHtml = '';
- function showAllItems(t,prefix){
- for(var k in t){
- var curprefix = prefix.length > 0 ? prefix+'.'+k : k;
- if(typeof(t[k]) != 'object'){
- myHtml += '<br />'+curprefix+' = '+t[k];
- }
- else{
- showAllItems(t[k],curprefix);
- }
- }
- }
- showAllItems(addresses,'addresses');
- map.openInfoWindow(latlng, '<div style="font-size:12px;">'+myHtml+'</div>');
- }
- });
- }
- };
- google.maps.Event.addListener(map, "click", onGMapClicked);
- }
- });
- //]]>
- </script>
- <title>reverse geocoding example - zeali.net</title>
- </head>
- <body
onunload="google.maps.Unload()"> - <div
- id="GmApBrIdD"
- style="width: 800px; height: 600px;margin: 0 auto 0 auto; border: 1px solid #ccc;">
- </div>
- </body></html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="zh"><head><meta http-equiv="Content-Type" c /><script language="JavaScript" src="http://www.google.com/jsapi?key=your api key here" type="text/javascript"></script><script type="text/javascript">//<![CDATA[google.load("maps", "2.x",{"language" : "zh_CN"});var GoogleGeocoder = null;google.setOnLoadCallback(function(){ if (google.maps.BrowserIsCompatible()) { var map = new google.maps.Map2(document.getElementById("GmApBrIdD")); map.addControl(new google.maps.LargeMapControl()); map.setCenter(new google.maps.LatLng(36.94989178681327,106.083984375), 4); GoogleGeocoder = new GClientGeocoder(); var onGMapClicked = function(overlay,latlng){ if (latlng) { GoogleGeocoder.getLocations(latlng, function(addresses) { if(addresses.Status.code != 200) { alert("failed to find an address for " + latlng.toUrlValue()); } else { var myHtml = ''; function showAllItems(t,prefix){ for(var k in t){ var curprefix = prefix.length > 0 ? prefix+'.'+k : k; if(typeof(t[k]) != 'object'){ myHtml += '<br />'+curprefix+' = '+t[k]; } else{ showAllItems(t[k],curprefix); } } } showAllItems(addresses,'addresses'); map.openInfoWindow(latlng, '<div style="font-size:12px;">'+myHtml+'</div>'); } }); } }; google.maps.Event.addListener(map, "click", onGMapClicked); }});//]]></script><title>reverse geocoding example - zeali.net</title></head><body ><div id="GmApBrIdD" style="width: 800px; height: 600px;margin: 0 auto 0 auto; border: 1px solid #ccc;"></div></body></html> 目前 2.s 还貌似还没有提供该功能,需要用 2.x 引用最新版本的 API 。
如果你设置了自己的 Google 账户的全局界面语言为不是简体中文的其他语言的话,在 google.load 中传递参数 {"language": "zh_CN"} 可以让地图上的语言显示为中文,但当使用 GClientGeocoder getLocations来获取地址信息的时候,返回的内容将不是中文而是拼音。这个问题挺烦人,目前还不知道如何解决。
另外点击台湾省的时候,返回的地址信息没有国家只有地区信息,不知道是不是又会给 Google 点麻烦。 |
|