这里主要的一个重点是使用了google的地理解析包google.maps.Geocoder
当传入值为address信息的时候,即告知google要查找的信息为地理坐标,通常情况下一个正确的地理位置会获得多个返回结果,即使搜索北京也会得到多个点(美国有个地方也叫北京)
通过回调函数的方法function(results, status)可以得到的就是点集合、还有查询状态信息,和HTTP类似同样会有网络连接正常,错误,或者请求太过频繁被屏蔽(测试中连续点击大约20次左右,发现google拒绝再次返回地理信息),必要的用户信息提示还是必须的,不过用户一般不会太在意错误原因,告诉他再次刷新页面就好,或者是查询地理信息不存在没有结果等等
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <meta http-equiv="Content-Type" content="text/html;charset=GBK" /> <title>反向解析地址</title> <style> html,body{height:100%;margin:0;padding:0;} #map_canvas{height:87%;} @media print{ html,body{height:auto;} #map_canvas{height:100%;} } </style> <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&language=zh-CN"></script> <script type="text/javascript"> // map.js start var $G,$O,$M,$L,$I; (function(undefined){ O = function (id) { return "string" == typeof id ? document.getElementById(id):id; }; MP = { y:39.9, x:116.4, point:function(y,x){ return new google.maps.LatLng(y,x); }, getCanvas:function(id){ var mapid = id?id:'map_canvas'; return document.getElementById(mapid); }, options:function(center,z){ return { zoom: z?z:14, center: center?center:this.getCenter(), navigationControl: true, scaleControl: true, streetViewControl: true, mapTypeId: google.maps.MapTypeId.ROADMAP } }, } M = { mark:function(map,latLng,title){ if(title) return new google.maps.Marker({ icon: this.icon, position: latLng, map: map, title:title }); else return new google.maps.Marker({ //icon: this.icon, position: latLng, map: map }); } } I = { infos:[], add:function(info,latLng,w,h){ if(w&&h) return new google.maps.InfoWindow({ content: info, size: new google.maps.Size(w,h), position: latLng }); else if(latLng) return new google.maps.InfoWindow({ content: info, position: latLng }); else return new google.maps.InfoWindow({ content: info }); } } //event 事件 L = { listen:null, add:function(dom,event,fn){ return google.maps.event.addDomListener(dom, event, fn); }, addOnce:function(dom, event, fn){ return google.maps.event.addListenerOnce(dom, event, fn) } } $G = MP; $O = O; $M = M; $L = L; $I = I; })(); // map.js end </script> <script type="text/javascript"> var map; var geocoder = new google.maps.Geocoder(); //申明地址解析对象 var z = 8; function initialize(){ var point = $G.point($G.y,$G.x); //初始中心点 map = new google.maps.Map($G.getCanvas("map_canvas"), $G.options(point,z)); //初始化地图 } function searchaddress(){ var address = $O("address").value; if (geocoder) { geocoder.geocode( { 'address': address,"language":"zh_cn"}, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { if(results[0]){ var point = results[0].geometry.location; map.setCenter(point); var marker = $M.mark(map,point); $L.add(marker,"click",function(){ $I.add("我在这里").open(map,marker); }) } } else { alert("Geocode was not successful for the following reason: " + status); } }); } } </script> </head> <body onload="initialize()"> <form id="form1" runat="server" action="#"> <div> <input id="address" type="textbox" value="天津"> <input type="button" value="反向地址解析" onclick="searchaddress()"> </div> </form> <div id="map_canvas"></div> </body> </html>
