HTML學習筆記(七)--HTML地理定位

說明:谷歌地圖的API好像沒法用,所以以下操作均使用百度地圖API玩敏。教程來自于百度地圖開放平臺。

1. 以下代碼創(chuàng)建了一個地圖并以天安門作為地圖的中心:

<!DOCTYPE html>  
<html>  
<head>  
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />  
<!-- 以便使您的頁面更好的在移動平臺上展示。 -->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
<title>Hello, World</title>  
<!-- 設置樣式,使地圖充滿整個瀏覽器窗口:-->
<style type="text/css">  
html{height:100%}  
body{height:100%;margin:0px;padding:0px}  
#container{height:100%}  
</style>  
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的密鑰">
//v2.0版本的引用方式:src="http://api.map.baidu.com/api?v=2.0&ak=您的密鑰"
//v1.4版本及以前版本的引用方式:src="http://api.map.baidu.com/api?v=1.4&key=您的密鑰
&callback=initialize"
</script>
</head>  
<body>  
<div id="container"></div> 
<!-- 創(chuàng)建地圖容器元素 地圖需要一個HTML元素作為容器输吏,這樣才能展現(xiàn)到頁面上,故創(chuàng)建個div元素 -->
<script type="text/javascript"> 
<!-- 命名空間 API使用BMap作為命名空間 -->
<!-- 位于BMap命名空間下的Map類表示地圖,通過new操作符可以創(chuàng)建一個地圖實例替蛉。參數(shù)可以是元素id也
可以是元素對象贯溅。-->
var map = new BMap.Map("container");          // 創(chuàng)建地圖實例  
<!-- 這里我們使用BMap命名空間下的Point類來創(chuàng)建一個坐標點拄氯。Point類描述了一個地理坐標點,其中
116.404表示經(jīng)度它浅,39.915表示緯度译柏。-->
var point = new BMap.Point(116.404, 39.915);  // 創(chuàng)建點坐標  
map.centerAndZoom(point, 15);                 // 初始化地圖,設置中心點坐標和地圖級別  
</script>  
</body>  
</html>

效果圖如下:


beijing_center_map.png

此代碼能在IE和chrome瀏覽器上正常顯示姐霍,在Edge上不能顯示艇纺,原因未知!S实黔衡!

2. 控件

地圖API中提供的控件有:

  • Control:控件的抽象基類,所有控件均繼承此類的方法腌乡、屬性盟劫。通過此類您可實現(xiàn)自定義控件。
  • NavigationControl:地圖平移縮放控件与纽,PC端默認位于地圖左上方侣签,它包含控制地圖的平移和縮放的功能。移動端提供縮放控件急迂,默認位于地圖右下方影所。
  • OverviewMapControl:縮略地圖控件,默認位于地圖右下方僚碎,是一個可折疊的縮略地圖猴娩。
  • ScaleControl:比例尺控件,默認位于地圖左下方勺阐,顯示地圖的比例關系卷中。
  • MapTypeControl:地圖類型控件,默認位于地圖右上方渊抽。
  • CopyrightControl:版權控件蟆豫,默認位于地圖左下方。
  • GeolocationControl:定位控件懒闷,針對移動端開發(fā)十减,默認位于地圖左下方。

可以使用Map.addControl()方法向地圖添加控件愤估。在此之前地圖需要進行初始化帮辟。例如,要將標準地圖控件添加到地圖中灵疮,可在代碼中添加如下內(nèi)容:

var map = new BMap.Map("container");    
map.centerAndZoom(new BMap.Point(116.404, 39.915), 11);    
map.addControl(new BMap.NavigationControl());
map.addControl(new BMap.NavigationControl());    
map.addControl(new BMap.ScaleControl());    
map.addControl(new BMap.OverviewMapControl());    
map.addControl(new BMap.MapTypeControl());    
map.setCurrentCity("北京"); // 僅當設置城市信息時织阅,MapTypeControl的切換功能才能可用

控制控件位置和控件位置偏移可以通過參數(shù)調(diào)配壳繁。
自定義控件略復雜震捣,沒看荔棉,暫時用不上。

3. 覆蓋物

地圖API提供了如下幾種覆蓋物:

  • Overlay:覆蓋物的抽象基類蒿赢,所有的覆蓋物均繼承此類的方法润樱。
  • Marker:標注表示地圖上的點,可自定義標注的圖標羡棵。
  • Label:表示地圖上的文本標注壹若,您可以自定義標注的文本內(nèi)容。
  • Polyline:表示地圖上的折線皂冰。
  • Polygon:表示地圖上的多邊形店展。多邊形類似于閉合的折線,另外您也可以為其添加填充顏色秃流。
  • Circle: 表示地圖上的圓赂蕴。
  • InfoWindow:信息窗口也是一種特殊的覆蓋物,它可以展示更為豐富的文字和多媒體信息舶胀。注意:同一時刻只能有一個信息窗口在地圖上打開概说。
    可以使用map.addOverlay方法向地圖添加覆蓋物,使用map.removeOverlay方法移除覆蓋物嚣伐,注意此方法不適用于InfoWindow糖赔。
    地圖中心點添加了一個標注,并使用默認的標注樣式轩端。
var map = new BMap.Map("container");    
var point = new BMap.Point(116.404, 39.915);    
map.centerAndZoom(point, 15);    
var marker = new BMap.Marker(point);        // 創(chuàng)建標注    
map.addOverlay(marker);                     // 將標注添加到地圖中

其他如自定標注圖標放典、監(jiān)聽標注事件、可拖曳的標注基茵、內(nèi)存釋放刻撒、信息窗口、折線耿导、自定義覆蓋物等均未看声怔。

直接定位我的位置:

代碼一:

<!DOCTYPE html>    
<html>    
<title>HTML5調(diào)用百度地圖API進行地理定位實例</title>    
    <head>    
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />    
        <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=134db1b9cf1f1f2b4427210932b34dcb"></script>    
    </head>    
    <body style="margin:50px 10px;">    
        <div id="status" style="text-align: center"></div>    
        <div style="width:600px;height:480px;border:1px solid gray;margin:30px auto" id="container"></div>    
    </body>    
</html>    
    
<script type="text/javascript">    
    //默認地理位置設置為上海市浦東新區(qū)  
    var x=121.48789949,y=31.24916171;     
    window.onload = function() {    
        if(navigator.geolocation) {    
            navigator.geolocation.getCurrentPosition(showPosition);  
            document.getElementById("status").innerHTML = "HTML5 Geolocation is supported in your browser.";    
                // 百度地圖API功能    
                var map = new BMap.Map("container");    
                var point = new BMap.Point(x,y);    
                map.centerAndZoom(point,12);    
    
                var geolocation = new BMap.Geolocation();    
                
                geolocation.getCurrentPosition(function(r){    
                    if(this.getStatus() == BMAP_STATUS_SUCCESS){    
                        var mk = new BMap.Marker(r.point);    
                        map.addOverlay(mk);    
                        map.panTo(r.point);    
                    }    
                    else {    
                        alert('failed'+this.getStatus());    
                    }            
                },{enableHighAccuracy: true})    
            return;  
        }    
        alert("你的瀏覽器不支持獲取地理位置!");  
    };    
    function showPosition(position){  
      x=position.coords.latitude;   
      y=position.coords.longitude;    
    }  
</script>    

代碼二:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <style type="text/css">
        body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;font-family:"微軟雅黑";}
    </style>
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=Nq6xvK1GGytlV5jsztOnIxK3RhC7823N"></script>
    <title>瀏覽器定位</title>
</head>
<body>
    <div id="allmap"></div>
    <div id="intro" style="text-align: center;"></div>
</body>
</html>
<script type="text/javascript">
    // 百度地圖API功能
    var map = new BMap.Map("allmap");
    var point = new BMap.Point(98.23533,56.56977);
    map.centerAndZoom(point,12);

    var geolocation = new BMap.Geolocation();
    geolocation.getCurrentPosition(function(r){
        if(this.getStatus() == BMAP_STATUS_SUCCESS){
            var mk = new BMap.Marker(r.point);
            map.addOverlay(mk);
            map.panTo(r.point);
            alert('您的位置:'+r.point.lng+','+r.point.lat);
        }
        else {
            alert('failed'+this.getStatus());
        }        
    },{enableHighAccuracy: true})
    //關于狀態(tài)碼
    //BMAP_STATUS_SUCCESS   檢索成功舱呻。對應數(shù)值“0”醋火。
    //BMAP_STATUS_CITY_LIST 城市列表。對應數(shù)值“1”箱吕。
    //BMAP_STATUS_UNKNOWN_LOCATION  位置結果未知芥驳。對應數(shù)值“2”。
    //BMAP_STATUS_UNKNOWN_ROUTE 導航結果未知茬高。對應數(shù)值“3”兆旬。
    //BMAP_STATUS_INVALID_KEY   非法密鑰。對應數(shù)值“4”怎栽。
    //BMAP_STATUS_INVALID_REQUEST   非法請求丽猬。對應數(shù)值“5”宿饱。
    //BMAP_STATUS_PERMISSION_DENIED 沒有權限。對應數(shù)值“6”脚祟。(自 1.1 新增)
    //BMAP_STATUS_SERVICE_UNAVAILABLE   服務不可用谬以。對應數(shù)值“7”。(自 1.1 新增)
    //BMAP_STATUS_TIMEOUT   超時由桌。對應數(shù)值“8”为黎。(自 1.1 新增)

</script>

注意:windows要打開定位功能,并且本地條件下只能在IE上才能實現(xiàn)定位功能行您,谷歌瀏覽器好像是無法獲取windows系統(tǒng)位置權限無法實現(xiàn)定位铭乾,(用谷歌瀏覽器打開百度地圖網(wǎng)頁,也無法定位娃循,但是Edge和IE是可以的片橡,到底是親兒子),另Edge無法正常顯示網(wǎng)頁信息淮野,可能是因為兼容問題捧书,個人猜測。只剩下IE了骤星。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末经瓷,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子洞难,更是在濱河造成了極大的恐慌舆吮,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件队贱,死亡現(xiàn)場離奇詭異色冀,居然都是意外死亡,警方通過查閱死者的電腦和手機柱嫌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門锋恬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人编丘,你說我怎么就攤上這事与学。” “怎么了嘉抓?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵索守,是天一觀的道長。 經(jīng)常有香客問我抑片,道長卵佛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮截汪,結果婚禮上疾牲,老公的妹妹穿的比我還像新娘。我一直安慰自己挫鸽,他們只是感情好,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布鸥跟。 她就那樣靜靜地躺著丢郊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪医咨。 梳的紋絲不亂的頭發(fā)上枫匾,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天,我揣著相機與錄音拟淮,去河邊找鬼干茉。 笑死,一個胖子當著我的面吹牛很泊,可吹牛的內(nèi)容都是我干的角虫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼委造,長吁一口氣:“原來是場噩夢啊……” “哼戳鹅!你這毒婦竟也來了?” 一聲冷哼從身側響起昏兆,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤枫虏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后爬虱,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體隶债,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年跑筝,在試婚紗的時候發(fā)現(xiàn)自己被綠了死讹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡曲梗,死狀恐怖回俐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情稀并,我是刑警寧澤仅颇,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站碘举,受9級特大地震影響忘瓦,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一耕皮、第九天 我趴在偏房一處隱蔽的房頂上張望境蜕。 院中可真熱鬧,春花似錦凌停、人聲如沸粱年。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽台诗。三九已至,卻和暖如春赐俗,著一層夾襖步出監(jiān)牢的瞬間拉队,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工阻逮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留粱快,地道東北人。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓叔扼,卻偏偏與公主長得像事哭,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子瓜富,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容