網頁中Google Map的使用

要在自己的網頁中嵌入地圖,常用的方法可以歸納爲以下幾種:

1、最簡單的方法 ——使用谷歌地圖主頁的"鏈接"

      如果你只需要在自己的頁面上顯示某個特定範圍的地圖,比如你的公司所在地,但是不需要在地圖上添加任何額外的內容,比如標記、折線等等,那麼,使用這個方法來嵌入谷歌地圖是最簡單的。

      登錄谷歌地圖主頁,定位你需要顯示的範圍後,點擊地圖左上角的“鏈接”,會出現一個信息框,給出兩個輸入框,把第二個輸入框中的內容拷貝到你的頁面上就可以了。

     

      其實,這段嵌入代碼就是一個iframe的聲明,所以,雖然地圖主頁提供一個自定義地圖並預覽的功能,但是隻能自定義地圖的大小,如果需要的話,我們完全可以通過手動修改這個iframe聲明來實現更多的自定義,比如,給這段iframe加上自定義的樣式。

2、最精簡的方法 ——使用谷歌靜態地圖

      如果你需要顯示某個特定範圍的地圖,而且需要在地圖上加上一些標記、折線。但是,你並不在乎你網頁上的地圖能否拖拽,那麼,這個靜態地圖應該就是你需要的了。

      所謂靜態地圖,意思就是你在頁面上嵌入的其實只是一個GIF圖片,這個GIF圖片是你通過URL從谷歌動態獲取的,這樣的嵌入地圖就有別於我們常用的“動態”地圖了,而且,加載這樣的地圖,比加載一個完整的地圖要快捷的多。

      要在你的頁面上使用這樣的靜態地圖,只需要使用一個img標籤,把這個標籤的src屬性指定爲谷歌靜態地圖的url就可以了。

      看一個簡單的靜態地圖,以下示例包含紐約市區靜態地圖圖片的網址,如下所示:

http://maps.googleapis.com/maps/api/staticmap?center=Brooklyn+Bridge,New+York,NY&zoom=13&size=600x300&maptype=roadmap
&markers=color:blue%7Clabel:S%7C40.702147,-74.015794&markers=color:green%7Clabel:G%7C40.711614,-74.012318
&markers=color:red%7Ccolor:red%7Clabel:C%7C40.718217,-73.998284&sensor=false

      在這個URL中,你可以編輯center、zoom、size這些參數來指定地圖的中心點、縮放級別、地圖大小等等,當然,如果需要在地圖上添加標記、折線,你還可以加上對應的參數。不過,不用擔心你要記住這麼多參數,這裏有一個定製靜態地圖的嚮導,簡單的幾步就可以得到你需要的URL了。

       請注意,您並非一定要使用密鑰(雖然我們推薦這麼做)。本文中的示例都不包含 key 參數,因此將適用於剪切粘貼該代碼的所有用戶。

      嚴格來說,谷歌靜態地圖也是谷歌地圖API的一種,所以,使用靜態地圖是需要你的谷歌地圖API密鑰的,如果你之前定義過地圖API的密鑰,直接copy過來就可以了,不需要再去註冊。

3、最自由的方法 --使用谷歌地圖API

      如果上面兩種方式都不能滿足你的需求,那麼,就來試試 谷歌地圖API吧。雖然谷歌地圖API已經細分爲JavaScript、Flash、Earth、Static等等多個版本,但是,在我看來,JavaScript API是谷歌地圖API的根本,所以,在我的博客裏,除非特別指明,說到谷歌地圖API都是指谷歌地圖JavaScript API。使用這個API,你可以用你願意的任何可行的表現形式在地圖上展現你的數據,甚至可以把你自己的地圖做的比谷歌地圖還漂亮。

      要使用這個API在頁面中嵌入地圖,簡單的步驟就是:

      1)使用JavaScript標籤導入地圖API類庫;

      2)在頁面上定義一個裝載地圖的元素,通常使用一個div標籤,指定width和height;

      3)在你的JavaScript代碼中new GMap2(document.getElementById("your map container's id"));

      4)使用GMarker、GPolyline等API中提供的類定製你要在地圖上添加的標記、折線等等。

一個簡單的完整HTML如下:   

<!DOCTYPE html>
<html>
  <head>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <style type="text/css">
      html { height: 100% }
      body { height: 100%; margin: 0; padding: 0 }
      #map_canvas { height: 100% }
    </style>
    <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&sensor=SET_TO_TRUE_OR_FALSE">
    //sensor 是否會使用 GPS 定位器等傳感器來確定用戶的位置,必須將該值明確設爲 true 或 false
    </script>
    <script type="text/javascript">
//初始化地圖,使用Map類
      function initialize() {
        var mapOptions = {
          center: new google.maps.LatLng(-34.397, 150.644),   //指地圖定位的座標,需要LatLng對象,對象參數就是緯度和經度
          zoom: 8,
          mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        var map = new google.maps.Map(document.getElementById("map_canvas"),    //地圖div對象的id名,這個div要指明高度和寬度要不地圖沒法初始化
            mapOptions);
      }
    </script>
  </head>
  <body onload="initialize()">
    <div id="map_canvas" style="width:100%; height:100%"></div>
  </body>
</html>

地圖類型 google.maps.MapTypeId

  • ROADMAP,用於顯示 Google 地圖的默認、普通 2D 圖塊。
  • SATELLITE,用於顯示拍攝的圖塊。
  • HYBRID,用於同時顯示拍攝的圖塊和重要地圖項(道路、城市名)的圖塊圖層。
  • TERRAIN,用於顯示自然地形圖塊,其中包含海拔和水體地圖項(山脈、河流等)。

    除了上面說的這幾種方法,其實還有一些比較少用的方法也可以在網頁中嵌入地圖,比如比如使用Google Gadget API,我在博客右邊欄嵌入的地圖使用的就是Gadget API。

Marker類、InfoWindow

添加自定義的marker:

var userMarker = new google.maps.Marker( {
        position : new google.maps.LatLng(30,120),
        map : map,
        title : "鼠標懸浮時提示的信息",
        icon : "圖片位置字符串"
    });
var yourInfoWindow;

(function(userMarker) {
    google.maps.event.addListener(userMarker, 'click', function() {
        if (!yourInfoWindow) {
            yourInfoWindow = new google.maps.InfoWindow( {});
        }
        yourInfoWindow.setContent(userMarker.title);
        yourInfoWindow.open(map, userMarker);
    });
})(userMarker);

1、Marker類是爲地圖上添加類似小圖釘似的提示位置用的東西 

2、Marker需要設置座標和地圖對象來初始化

3、同一個Marker對象要重用時使用下面語句重新使用

userMarker.setMap(null);  

4、最後是爲marker對象添加點擊事件,使用的是嵌套寫法(用在for循環裏更好使) 

5、infowindow是彈出的那個大窗體,他的setContent方法是支持html和css代碼的,可以放進去div或table設置樣式

LatLngBounds類
Map範圍自適應:

var bounds = new google.maps.LatLngBounds();
bounds.extend(new google.maps.LatLng(30,120));
//爲新的結果創建marker
for ( var i in member) {
    bounds.extend(new google.maps.LatLng(member[i][2],member[i][3]));
    var marker = new google.maps.Marker( {
        position : new google.maps.LatLng(member[i][2],    member[i][3]),
        map : map,
        title : "title",
        icon : "imageAddress"
    });
    markers.push(marker);
    //爲marker添加infowindow,添加點擊事件
    (function(i, marker) {
        google.maps.event.addListener(
            marker,
            'click',
            function() {
                if (!infoawindow) {//單例infowindow
                    infoawindow = new google.maps.InfoWindow(
                                                        {});
                }
                infoawindow.open(map, marker);
        });
    })(i, marker);
}
map.fitBounds(bounds);//這句最重要

Geocoder類
提交地址字符串返回經緯度(很好用的功能),查詢全靠它

    如果你不需要在自己的頁面中嵌入地圖,或者,你沒有自己的網站,那麼,使用Mapplet API也是一個不錯的創建你自己的地圖的方式。這是一個可以在谷歌地圖主頁上“我的地圖”中運行的小程序,它的API其實就是谷歌地圖API的一個子集,因爲要在谷歌地圖主頁中嵌入,所以與谷歌地圖API稍稍有一些不同。詳細情況可以參考一下Mapplet API的開發文檔

var geocoder = new google.maps.Geocoder();
    geocoder.geocode( {
        'address' : "格式可以是不分割的:北京市東城區東直門,或北京市,東城區,東直門"
    }, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            myLatLng = results[0].geometry.location;
            //results數組裏有很多有用的信息,包括座標和返回的標準位置信息
        } else {
            alert(interGeoAnalysisFailed);
        }
    });

地圖導航服務

var map;    //地圖對象    
var mode = google.maps.DirectionsTravelMode.DRIVING;    //谷歌地圖路線指引的模式
var directionsDisplay = new google.maps.DirectionsRenderer();    //地圖路線顯示對象
var directionsService = new google.maps.DirectionsService();    //地圖路線服務對象
var directionsVisible = false;    //是否顯示路線
directionsDisplay.setMap(null);
directionsDisplay.setMap(map);
directionsDisplay.setPanel(document.getElementById("directionsPanel"));    //將路線導航結果顯示到div中    
var request = {origin: findLatLng, destination: marker.position, travelMode: mode, optimizeWaypoints: true, avoidHighways: false,avoidTolls: false};
directionsService.route
(
    request,
    function(response, status)
    {
           if (status == google.maps.DirectionsStatus.OK)
           {
                   directionsDisplay.setDirections(response);
           }
       }
);
directionsVisible = true;

詳細情況和進一步的參考https://developers.google.com/maps/documentation

轉載於:https://www.cnblogs.com/JoannaQ/archive/2013/03/12/2954992.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章