Google Map API 的基礎使用

因爲公司業務由國內市場到國際市場,有一些國際性業務的項目需要用到Google Map。項目完成後,把一些常用的方法寫出來,供大家參考。

一、google地圖基礎顯示

(1)引用google map js資源

<!--國內可用-->
<script type="text/javascript" src="http://ditu.google.cn/maps/api/js?key=*****"></script>
<!--國外可用-->
<script type="text/javascript" src="http://maps.google.com/maps/api/js?key=*****"></script>

tips:要正常使用google map 的各項功能,需要用google賬號申請一個API key,反正我當時申請key時花費了不少時間,申請google郵箱賬號時PC端不行,在移動端申請申請時又提示手機號碼無效,各種坑。

(2)在html文件中定義一個盒子

<div id="googleMap"></div>

tips:如果要全屏展示地圖,需要設置改盒子寬高都爲100%。

(3)初始化地圖

    // 地圖中心座標
    var myCenter = {
        lat: '30.65735',
        lng: '104.0658'
    };
    var myLatLng = new google.maps.LatLng(myCenter.lat, myCenter.lng);
    var myOptions = {
        zoom: 15,
        center: myLatLng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map=new google.maps.Map(document.getElementById("googleMap"), myOptions);

效果如下圖(左一)

 

 

二、自定義信息窗口、自定義圖標以及自定義控件

// 自定義Marker標記點
var marker = new google.maps.Marker({
     position:  myLatLng,
     icon: '../car.png',  // 如果爲空則顯示默認的圖標
     map: map
});

// 自定義InfoWindow信息窗口
htmlWindow = "<div class='wrapBox'>\
                   <div>IMEI: " + imei + "</div>\
                   <div>Address:<span id='map-address'>" + pointToAddress(myCenter.lat, myCenter.lng) + "</span>" + info + "</div>\
                   <div>Speed:" + speed + " km/h</div>\
                   <div>Time:" + toDate(2018-12-17 16:12:50) + "</div>\
               </div>";

var infowindow= new google.maps.InfoWindow({
     content: htmlWindow,
     disableAutoPan:true //設置爲true時可禁用自動平移功能
});

//打開信息窗體
infowindow.open(map, marker);

//marker點事件,點擊關閉信息窗體
marker.addListener('click', function() {
    infowindow.close();
});

//監聽X關閉按鈕事件
google.maps.event.addListener(infowindow,"closeclick", function(){
    infowindow.close();
});

自定義標記和自定義信息窗口比較簡單,效果如上圖(中)。如果我們要改變地圖默認的控件位置或需要自定義控件怎麼辦?接着往下看。

googl map默認開啓的控件有:

mapTypeControl   // 地圖類型控件
zoomControl   //地圖縮小放大控件
streetViewControl   //小黃人街景控件
fullscreenControl   //全屏控件

默認沒有開啓的還有panControl、scaleControl、overviewMapControl、rotateControl:true等

// 關閉地圖類型控件,打開縮小放大控件並設置其位置爲坐下方
var myOptions2 = {
    zoom: 15,
    center: myLatLng,
    mapTypeControl: false,
    zoomControl: true,
    zoomControlOptions: {
        style:google.maps.ZoomControlStyle.SMALL,
        position:google.maps.ControlPosition.LEFT_BOTTOM
    }
};

其中,所有控件都有position屬性,代表控件的位置,包括的選項有:OTTOM、BOTTOM_CENTER、BOTTOM_LEFT、BOTTOM_RIGHT、CENTER、LEFT、LEFT_BOTTOM、LEFT_CENTER、LEFT_TOP、RIGHT、RIGHT_BOTTOM、RIGHT_CENTER、RIGHT_TOP、TOP、TOP_CENTER、TOP_LEFT、TOP_RIGHT。記不住沒有關係,你不妨console.log(google.maps.ControlPosition)試試。

而只有部分控件有style屬性,而且各不相同。

// 自定義控件樣式
function HomeControl(controlDiv, map) {
    controlDiv.style.padding = '5px';
    var controlUI = document.createElement('div');
    controlUI.style.backgroundColor = '#ffffff';
    controlUI.style.border='1px solid #cccccc';
    controlUI.style.cursor = 'pointer';
    controlUI.style.textAlign = 'center';
    controlUI.title = 'my title';
    controlDiv.appendChild(controlUI);
    var controlText = document.createElement('div');
    controlText.style.fontFamily='Arial,sans-serif';
    controlText.style.fontSize='14px';
    controlText.style.height = '50px';
    controlText.style.width = '50px';
    controlText.innerHTML = '<b><span>105</span><label>km/h</label><b>';
    controlUI.appendChild(controlText);

    // 自定義控件的點擊事件:
    google.maps.event.addDomListener(controlUI, 'click', function() {
        alert('111');
    });
}

// 自定義控件
function myControl() {
    var homeControlDiv = document.createElement('div');
    var homeControl = new HomeControl(homeControlDiv, map);
    homeControlDiv.index = 1;
    map.controls[google.maps.ControlPosition.LEFT_TOP].push(homeControlDiv);
}

google.maps.event.addDomListener(window, 'load', myControl);

默認空間的位置調整和自定義控件完成,效果如上圖(右一)。

 

三、地址解析

// 地址解析方法
function pointToAddress(lat, lng, backcall) {
    // 實例化Geocoder服務用於解析地址
    var geocoder = new google.maps.Geocoder();
    // 地理反解析過程
    // 請求數據GeocoderRequest爲location,值類型爲LatLng因此我們要實例化經緯度
    geocoder.geocode({ location: new google.maps.LatLng(lat, lng) }, function geoResults(results, status) {
       if (status == google.maps.GeocoderStatus.OK) {
             backcall(results[0].formatted_address);
        } else {
             console.log(":error " + status);
        }
    });
}

// 在需要解析的地方調用方法
pointToAddress(myCenter.lat, myCenter.lng, function (address) {
    // 獲得地址
    console.log(address);
});

我們看到地圖上控件名稱顯示的是中文,如果用戶手機系統是英文,地圖也會自動切換爲英文。暫時更新到這裏,關於google map實現軌跡回放請前往博主的另外一篇文章。

 

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