1. 程式人生 > >移動端開發APPCAN呼叫高德地圖API實現定位等功能

移動端開發APPCAN呼叫高德地圖API實現定位等功能

最近專案在做移動端,做了點地圖應用,發現網上案例比較少,研究之後,給小夥伴們分享一份:

看看程式碼吧,有不同的,call我嘍:

<!doctype html>
<html>


<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Getters Started</title>
  <!-- - <script src="https://unpkg.com/

[email protected]"></script> -->
  <style>
    #mainMap {
      width: 390px;
      height: 450px
    }


    #resultMapInfo {
      position: absolute;
      left: 0;
      top: 30px;
      z-index: 999;
    }
  </style>
</head>


<body>
  <!-- - <script src="./src/index.js"></script> -->
  <div id="resultMapInfo">請使用4G網路獲取定位精確度高</div>
  <div id="mainMap"></div>
  <script language="javascript" src="https://webapi.amap.com/maps?v=1.3&key=243687cce3d5ac3f7a3b4bb90a97fda1"></script>
  <!-- <script src="/dist/bundle.js"></script> -->
  <script>
    // 例項化地圖, 命名定位外掛例項、標記例項、地理編碼例項、輸出變數
    var map = new AMap.Map('mainMap', {
        resizeEnable: true,
        zoom: 16
      }),
      geolocation = null,
      Marker = null,
      geocoder = null,
      result = document.getElementById('resultMapInfo');
    // 新增地圖全域性移動事件
    // 移動中
    AMap.event.addListener(map, 'dragging', function() {
      Marker.setPosition(map.getCenter())
    });
    // 停止移動
    AMap.event.addListener(map, 'dragend', function() {
      console.log(map.getCenter())
      // 利用地圖地理編碼查詢地址
      geocoder.getAddress(map.getCenter(), function(status, data) {
        if (status === 'complete' && data.info === 'OK') {
          //獲得了有效的地址資訊:
          //即,
          var str = '<p>獲取成功</p>';
          str += '<p>當前位置:' + data.regeocode.formattedAddress + '</p>';
          result.innerHTML = str;
          console.log(data.regeocode.formattedAddress)
          console.log(map.getCenter().getLat())
          console.log(map.getCenter().getLng())
        } else {
          //獲取地址失敗
          var str = '<p>定位失敗</p>';
          str += '<p>錯誤資訊:'
          switch (data.info) {
            case 'INVALID_UESR_KEY':
              str += '使用者key非法或過期';
              break;
            case 'SERVICE_UNAVAILABLE':
              str += '請求服務不可用';
              break;
            case 'INSUFFICIENT_PRIVILEGES':
              str += '無許可權訪問此服務';
              break;
            case 'INVALID_PARAMS':
              str += '請求引數非法';
              break;
            default:
              str += '無網路或其他未知錯誤';
              break;
          }
          str += ',請重新獲取當前位置。</p>';
          result.innerHTML = str;
        }
      });
      Marker.setPosition(map.getCenter())
      Marker.setAnimation('AMAP_ANIMATION_DROP')
    });


    // 載入地理位置編碼外掛
    AMap.service('AMap.Geocoder', function() { //回撥函式
      //例項化Geocoder
      geocoder = new AMap.Geocoder({
        city: "010" //城市,預設:“全國”
      });
      //TODO: 使用geocoder 物件完成相關功能
    });
    // 載入定位外掛
    map.plugin('AMap.Geolocation', function() {
      // 初始化定位外掛
      geolocation = new AMap.Geolocation({
        enableHighAccuracy: true, //是否使用高精度定位,預設:true
        timeout: 10000, //超過10秒後停止定位,預設:無窮大
        maximumAge: 0, //定位結果快取0毫秒,預設:0
        convert: true, //自動偏移座標,偏移後的座標為高德座標,預設:true
        showButton: true, //顯示定位按鈕,預設:true
        buttonPosition: 'LB', //定位按鈕停靠位置,預設:'LB',左下角
        buttonOffset: new AMap.Pixel(10, 20), //定位按鈕與設定的停靠位置的偏移量,預設:Pixel(10, 20)
        showMarker: false, //定位成功後在定位到的位置顯示點標記,預設:true
        showCircle: false, //定位成功後用圓圈表示定位精度範圍,預設:true
        panToLocation: true, //定位成功後將定位到的位置作為地圖中心點,預設:true
        zoomToAccuracy: true //定位成功後調整地圖視野範圍使定位位置及精度範圍視野內可見,預設:false
      });
      // 把定位外掛加入地圖例項
      map.addControl(geolocation);


      // 新增地圖全域性定位事件
      AMap.event.addListener(geolocation, 'complete', onComplete); //返回定位資訊
      AMap.event.addListener(geolocation, 'error', onError); //返回定位出錯資訊


      // 呼叫定位
      geolocation.getCurrentPosition();
    });


    /*
     *解析定位結果
     */
    function onComplete(data) {
      Marker = null;
      var str = '<p>定位成功</p>';
      //str += '<p>經度:' + data.position.getLng() + '</p>';
      //str += '<p>緯度:' + data.position.getLat() + '</p>';
      str += '<p>精度:' + data.accuracy + ' 米</p>';
      //str += '<p>是否經過偏移:' + (data.isConverted ? '是' : '否') + '</p>';
      str += '<p>當前位置:' + data.formattedAddress + '</p>';
      //str += '<p>' + data.addressComponent.province + data.addressComponent.city + data.addressComponent.district + data.addressComponent.township + data.addressComponent.street + data.addressComponent.streetNumber + '</p>';
      // 初始化標記
      if (Marker) {
        // 標記存在則把地圖中心點設定給標記
        Marker.setPosition(map.getCenter())
        Marker.setAnimation('AMAP_ANIMATION_DROP')
      } else {
        // 標記不存在則例項化一個新的標記,且把當前地圖中心點設定給標記
        Marker = new AMap.Marker({
          position: map.getCenter(),
          animation: 'AMAP_ANIMATION_DROP'
        });
        // 把標記加入地圖例項
        Marker.setMap(map);
      }


      result.innerHTML = str;
    };
    /*
     *解析定位錯誤資訊
     */
    function onError(data) {
      var str = '<p>定位失敗</p>';
      str += '<p>錯誤資訊:'
      switch (data.info) {
        case 'PERMISSION_DENIED':
          str += '瀏覽器阻止了定位操作';
          break;
        case 'POSITION_UNAVAILBLE':
          str += '無法獲得當前位置';
          break;
        case 'TIMEOUT':
          str += '定位超時';
          break;
        default:
          str += '無網路或其他未知錯誤';
          break;
      }
      str += ',請重新獲取當前位置。</p>';
      // 初始化標記
      if (Marker) {
        // 標記存在則把地圖中心點設定給標記
        Marker.setPosition(map.getCenter())
        Marker.setAnimation('AMAP_ANIMATION_DROP')
      } else {
        // 標記不存在則例項化一個新的標記,且把當前地圖中心點設定給標記
        Marker = new AMap.Marker({
          position: map.getCenter(),
          animation: 'AMAP_ANIMATION_DROP'
        });
        // 把標記加入地圖例項
        Marker.setMap(map);
      }
      result.innerHTML = str;
    };
  </script>
</body>


</html>

相關推薦

移動開發APPCAN呼叫地圖API實現定位功能

最近專案在做移動端,做了點地圖應用,發現網上案例比較少,研究之後,給小夥伴們分享一份:看看程式碼吧,有不同的,call我嘍:<!doctype html><html><head>  <meta charset="UTF-8"> 

H5開發呼叫地圖api實現H5定位功能

關於定位,分為GPS定位和網路定位。本文將詳細描述的瀏覽器定位,屬於網路定位。這是一種通過使用高德JS-API來實現位置定位、城市定位的方法,包含了IP定位,檢索等多種網路定位方式。如果您的手機支援GPS功能,能夠自動獲取GPS資訊,定位將更加準確。 瀏覽器定位 瀏覽

java呼叫地圖API開發線上地圖開發——未完待續

這是目錄 一、引入高德地圖API 二、高德地圖開發 1、定義一個div來存放地圖 2、生成地圖 3、新增一個跳躍的點 4、新增控制元件 5、有其他需要的請留言 一、引入高德地圖API   高德地圖官方示例:https://lbs.amap.c

vue結合vue-amap呼叫地圖api

1、到高德地圖開放平臺申請key 2、npm安裝vue-amap 3、在main.js中引入並初始化 4、以獲取周邊資訊為例,PlaceSearch的官方文件 5、展示結果 6、上面方式是根據設定的經緯度獲取周邊資訊,如果想實時獲取當前位置可以這樣,在data中新增一個plugin

SpringCloud之如何在專案中呼叫地圖API

登入高德開放平臺http://lbs.amap.com/,成為開發者,這個過程需要繫結郵箱。 成功後進入控制檯。點選應用管理。並建立新應用。應用名稱都可以自己看著填。 成功後就可以新增key了,當然,也要有名稱等資訊。 ------------------到這裡完成了第

如何呼叫地圖api

首先註冊成為高德地圖開發者,建立應用後申請key。1.引入高德地圖API<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.3&key=您申請的key值"></scr

呼叫地圖Api顯示地圖

package com.example.gaodemap; import com.amap.api.maps2d.AMap; import com.amap.api.maps2d.MapView; import android.app.Activity; import

JAVA呼叫地圖API實踐

    高德地圖api介面文件地址:https://lbs.amap.com/api/   1.

使用地圖API無法定位

問題情境:第一次匯入專案,執行後發現無法定位。 原因:申請API時使用的SHA1值與本機的SHA1值不同 因為Android系統要求所有程式都需要經過數字簽名才可以安裝,假如沒有可用的數字簽名則不可以安裝執行此程式。為了方便程式設計師除錯,IDE會預

微信小程式----map元件實現地圖API實現wx.chooseLocation(OBJECT))

宣告 bug: 頁面搜尋返回的列表在真機測試是會出現不顯示問題? 造成原因:在小程式map元件的同一區域,map元件的檢視層比普通的文字檢視層要高,所以在真機會遮擋! 解決辦法:將該文字檢視採用c

微信小程式-基於地圖API實現天氣元件(動態效果)

#### 微信小程式-基於高德地圖API實現天氣元件(動態效果) ​ 在社群翻騰了許久,沒有找到合適的天氣外掛。迫不得已,只好借鑑網際網路上的`web`專案,手動遷移到小程式中使用。現在分享到網際網路社群中,幫助後續有需要的開發者。 > 1.元件介紹 **1.1 元件效果預覽圖** ​ 小程

iOS·採用第三方(百度地圖SDK)實現定位功能開發

 陳滿iOS  關注 2017.05.01 01:06* 字數 2212 閱讀 6818評論 7喜歡 133 1.申請金鑰 首先,申請一個baidu賬號,接著進入新建金鑰入口申請成為baidu地圖開發者,填寫相關開發者資訊和簡訊驗證碼。接

js呼叫百度地圖api實現定位

<?php /** * Created by PhpStorm. * User: onlythen * Date: 5/26/15 * Time: 3:23 PM */ session_start(); require_once("config.php"); $link_id=mys

2017地圖API WEB開發(key申請,地圖搭建)簡約教程

height 圖層 類型 開發文檔 doctype content 如何 加載 innerhtml 前端時間因為公司需要研究 了一下百度的教程 然後寫個簡約的筆記記錄一下自己學習的收獲,只為了滿足自己暫時的寫作熱情 高德地圖WEB開發(key申請、api)簡

ReactNative呼叫地圖流程

ReactNative呼叫高德地圖流程 ReactNative呼叫高德地圖使用的是react-native-amap3d外掛。可檢視外掛的github。 1、安裝依賴和專案配置 首先命令列中分別執行 npm i react-native-amap3d react-na

Cesium 呼叫地圖天地圖本地瓦片資料

網上看到了geoserver+cesium+全能地圖下載器的離線使用組合,但是遇到的問題是,如果將下載器的瓦片資料轉換成geotiff的大圖的話,伺服器需要消耗大量的資源用於對tiff大圖的切割,於是思考如何實現cesium直接讀取瓦片資料。 首先看高德地圖的瓦片伺服器,是

地圖API呼叫和標準(轉)

看過高德地圖API的同學都知道,高德地圖不同端呼叫是不一樣的,作為一個前端菜鳥,前一陣分別在pc端和移動端分別呼叫了高德地圖。情況是這個樣子的,PC端呢我們可以用高德API的web端的javascript程式碼。呼叫沒有問題,具體是這樣的: <!DOCTYPE htm

android呼叫地圖的方法

Intent intent2 = null;try { intent2 = Intent.getIntent("androidamap://route?sourceApplication=softname&sname=我的位置&"+"&dname="+name+"&dev

vue2呼叫地圖(Amap)及其UI元件

vue呼叫高德地圖只需四步,具體如下: 1、申請高德KEY。方法自行百度 http://lbs.amap.com/dev/key/app; 2、在專案的index.js檔案中引入高德地圖JS_API,如下: 3、在專案build/webpack

Android呼叫地圖app語音導航

    直接呼叫高德地圖app進行導航     首先,要先進入高德開放平臺,註冊登入以後,建立自己的APP,然後會生成appkey     高德開放平臺網址: http://lbs.amap.com/    然後下載jar包匯入專案工程之中