六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 54|回复: 0

Google Maps API 地图线路相关

[复制链接]

升级  23.33%

21

主题

21

主题

21

主题

秀才

Rank: 2

积分
85
 楼主| 发表于 2013-1-29 09:32:04 | 显示全部楼层 |阅读模式
本位属转载,作者:再见西瓜虫

简介

Google Maps JavaScript API方便用户将Google Map嵌入到他们的网页中,在iPhone中若要调用JavaScript API, 需要创建UIWebView并将HTML页面嵌入到UIWebView中。

源码:
   1: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">   2: <html xmlns="http://www.w3.org/1999/xhtml">   3: <head>   4:     <meta http-equiv="content-type" content="text/html; charset=utf-8" />   5:     <title>Google 地图 JavaScript API 示例</title>   6:     <script src="http://ditu.google.com/maps?file=api&v=2" type="text/javascript"></script>   7:     <script type="text/javascript">   8:         var map = null;// GMap2对象   9:         var directions = null;// GDirections对象  10:         var isFirstClick = true; // 用于判断地图上是否已有路线  11:         var firstPin = null;// 清除地图上所有的控件后,第一次点击生成的GMarker对象  12:         var secondPin = null;// 第二次点击的GMarker对象  13:         var polyline = null;// 路线  14:    15:         var zoomLevel = null;// 缩放等级  16:         var center = null;// 地图中心  17:    18:         var defaultPin = 'file:\\E:/Pin2.png';// 默认大头针图片  19:         var movedPin = 'file:\\E:/PinFloating.png';// 移动时的大头针图片  20:    21:         function load() {  22:             if (GBrowserIsCompatible()) {  23:                 map = new GMap2(document.getElementById("map"));  24:                 map.setCenter(new GLatLng(31.877557643340015, 117.24609375), 13);  25:                 map.disableDoubleClickZoom();  26:                 directions = new GDirections(map);  27:    28:                 //自定义GMarker.  29:                 var pinIcon = new GIcon(G_DEFAULT_ICON);  30:                 pinIcon.image = defaultPin;  31:                 pinIcon.iconSize = new GSize(29, 32);  32:                 pinIcon.iconAnchor = new GPoint(5, 27);  33:                 pinIcon.shadow = null;  34:                 markOptions = { draggable: true, icon: pinIcon };// 这这里我们设置GMarker可以拖动.  35:    36:                 // 对firstPin和secondPin进行初始化.  37:                 firstPin = new GMarker(new GLatLng(31.877557643340015, 117.24609375), markOptions);  38:                 secondPin = new GMarker(new GLatLng(31.877557643340015, 117.24609375), markOptions);  39:    40:                 // 添加监听.  41:                 addMapClickListener();  42:                 addDraggingListener();  43:                 addDirectionsListener();  44:             }  45:    46:             // 监听地图的点击事件.  47:             function addMapClickListener() {  48:                 if (map != null) {  49:                     GEvent.addListener(map, "click", function (marker, point) {  50:                         if (marker) {  51:                             map.removeOverlay(marker);  52:                         }  53:                         else {  54:                             if (isFirstClick == true) {  55:                                 // 因为我们只想地图上只有一条路线,所以  56:                                 // 在每次添加起点大头针时,清除地图上所有的控件.  57:                                 map.clearOverlays();  58:                                 polyline = null;  59:                                 isFirstClick = false;  60:    61:                                 firstPin.setLatLng(point);  62:                                 map.addOverlay(firstPin);  63:                             }  64:                             else {  65:                                 isFirstClick = true;  66:                                 secondPin.setLatLng(point);  67:                                 map.addOverlay(secondPin);  68:    69:                                 // 获取最短路径.  70:                                 loadDirections(firstPin.getLatLng(), secondPin.getLatLng(), null);  71:                             }  72:                         }  73:                     });  74:                 }  75:             }  76:    77:             // 监听大头针的拖动事件.  78:             function addDraggingListener() {  79:                 if (firstPin != null && secondPin != null) {  80:    81:                     // 当开始拖动大头针时,我们需要将大头针的图片(Pin2.png)修改成拖动时的图片(PinFloating.png).  82:                     GEvent.addListener(firstPin, 'dragstart', function (latlng) {  83:                         firstPin.setImage(movedPin);  84:                     });  85:    86:                     GEvent.addListener(secondPin, 'dragstart', function (latlng) {  87:                         secondPin.setImage(movedPin);  88:                     });  89:    90:                     // 当结束拖动时,需要将大头针的图片改回拖动前,并重新获取最短路线.  91:                     GEvent.addListener(firstPin, 'dragend', function (latlng) {  92:                         firstPin.setImage(defaultPin);  93:    94:                         if (latlng != null && polyline != null) {  95:    96:                             window.setTimeout(function () {  97:                                 loadDirections(latlng, secondPin.getLatLng());  98:                             }, 300);  99:                         } 100:                     }); 101:   102:                     GEvent.addListener(secondPin, 'dragend', function (latlng) { 103:                         secondPin.setImage(defaultPin); 104:   105:                         if (latlng != null && polyline != null) { 106:   107:                             window.setTimeout(function () { 108:                                 loadDirections(firstPin.getLatLng(), latlng); 109:                             }, 350); 110:                         } 111:                     }); 112:                 } 113:             } 114:   115:             // 获取最短路径. 116:             function loadDirections(startLatLng, endLatLng, travelModel) { 117:   118:                 if (startLatLng == null || endLatLng == null) { 119:                     return; 120:                 } 121:   122:                 // 获取缩放级别和中心点的经纬度. 123:                 // 由于在GDirections.load得到经纬度之后,地图会自动缩放并平移, 124:                 // 所以需要在这里获取到load之前的值,在load结束后重新修改缩放级别 125:                 // 和中心点. 126:                 zoomLevel = map.getZoom(); 127:                 center = map.getCenter(); 128:   129:                 if (travelModel == null) { 130:                     directions.loadFromWaypoints(new Array(startLatLng, endLatLng)); 131:                 } 132:                 else { 133:                     directions.loadFromWaypoints(new Array(startLatLng, endLatLng), 134:                 { travelMode: travelModel }); 135:                 } 136:             } 137:   138:             // 监听GDirection的'addOverly'事件. 139:             function addDirectionsListener() { 140:   141:                 // 由于地图会在GDirection.load事件后自动添加起点和终点的GMarker控件, 142:                 // 这是在页面上会出现2个起点和2个终点,我们需要将自动添加的GMarker删除, 143:                 // 并重新添加|firstPin|和|secondPin|。同时clearOverlays方法也会将地图 144:                 // 上的路线删除,所以我们在添加Garker的同时,也需要将路线重新添加到Map. 145:                 GEvent.addListener(directions, 'addoverlay', function () { 146:                     if (directions != null) { 147:                         map.clearOverlays(); 148:   149:                         var startMarker = directions.getMarker(0); 150:                         var endMarker = directions.getMarker(1); 151:                         polyline = directions.getPolyline(); 152:   153:                         firstPin.setLatLng(startMarker.getLatLng()); 154:                         secondPin.setLatLng(endMarker.getLatLng()); 155:   156:                         map.addOverlay(firstPin); 157:                         map.addOverlay(secondPin); 158:                         map.addOverlay(polyline); 159:   160:                         map.setZoom(zoomLevel); 161:                         map.setCenter(center); 162:                     } 163:                 }); 164:             } 165:         } 166:   167:     </script> 168: </head> 169: <body  onunload="GUnload()" style="margin: 0px 0px 0px 0px;"> 170:     <div id="map" style="width: 320px; height: 480px;"> 171:     </div> 172: </body> 173: </html>
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表