搜狐
<script src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
var returnCitySN = {"cip": "210.13.118.49", "cid": "310000", "cname": "上海市"};
複製程式碼
騰訊
<script src='https://3gimg.qq.com/lightmap/components/geolocation/geolocation.min.js'></script>
var geolocation = new qq.maps.Geolocation("OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77", "myapp");
geolocation.getLocation(showPosition);
// 獲取位置函式
function showPosition(position) {
console.log(position)
localStorage.setItem('cityName',position.city)
localStorage.setItem('provinceName',position.province)
localStorage.setItem('distrinctName',position.district)
localStorage.setItem('cityId',position.adcode)
localStorage.setItem('addr',position.addr)
localStorage.setItem('gps',JSON.stringify({lat:position.lat,lng:position.lng})) //火星座標(gcj02),騰訊、Google、高德通用
};
複製程式碼
//html 騰訊地圖元件 線上選址並獲取地理資訊
<iframe id="mapPage" width="100%" height="100%" frameborder=0
src="http://apis.map.qq.com/tools/locpicker?search=1&type=1&key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77&referer=myapp">
</iframe>
//js
init:function(){
var _this = this;
window.addEventListener('message', function (event) {
// 接收位置資訊,使用者選擇確認位置點後選點元件會觸發該事件,回傳使用者的位置資訊
var loc = event.data;
if (loc && loc.module == 'locationPicker') {//防止其他應用也會向該頁面post資訊,需判斷module是否為'locationPicker'
var str = loc.poiaddress;
console.log(loc)
_this.address = str
console.log(loc.latlng)
_this.coordinates = JSON.stringify(loc.latlng)
}
}, false);
},
複製程式碼
H5定位
//IE9+
function getLocation(){
if (navigator.geolocation){
navigator.geolocation.getCurrentPosition(showPosition,showError);
}else{
alert("瀏覽器不支援地理定位。");
}
}
function showPosition(position){
var lat = position.coords.latitude; //緯度
var lag = position.coords.longitude; //經度
alert('緯度:'+lat+',經度:'+lag);
}
function showError(error){
switch(error.code) {
case error.PERMISSION_DENIED:
alert("定位失敗,使用者拒絕請求地理定位");
break;
case error.POSITION_UNAVAILABLE:
alert("定位失敗,位置資訊是不可用");
break;
case error.TIMEOUT:
alert("定位失敗,請求獲取使用者位置超時");
break;
case error.UNKNOWN_ERROR:
alert("定位失敗,定位系統失效");
break;
}
}
複製程式碼
地理位置獲取方式
Ip地址 這是一種比較不準確地獲取地理位置的辦法,很多時候獲取的是ISP機房的位置,但是獲取非常方便,沒有什麼限制。大多數時候,IP地址還是比較準確的,基本上能精確到某個小區或某個大樓,但是如果使用者使用代理或者VPN,就可能導致非常大的偏差。
GPS 這是一種非常準確地獲取地理位置的方法,GPS的精度可以達到10米左右。如果用來找人或者找建築,基本上都在目視範圍內。但是使用GPS還有一些限制:在室內使用時,訊號不太穩定,搜尋衛星的時間較長,會造成延時。使用GPS最大的障礙是:很多裝置(比如膝上型電腦)基本上都不帶GPS,而只有智慧手機才有。
Wi-Fi基站 連線位置已知的公共Wi-Fi時,可以獲得地理位置資訊。這種定位的精度比較不錯,而且還可以在室內定位。不過由於位置公開的Wi-Fi比較少,此種方法的適用範圍比較少。從目前的各類科技新聞來看,北京、上海、廣州將率先建立公共Wi-Fi基站,北京甚至在公交車上都已經設立Wi-Fi基站,這些也可以考慮到未來的應用中
GSM或CDMA基站 通過電話局基站定位,定位精度隨基站密度變化,精度非常一般,而且只有手機才能使用,並且地理位置資訊往往不太精確。
地理位置獲取流程
由於地理位置資訊涉及個人隱私,是受到法律保護的,因此,每當使用者在使用地理位置資訊時,提供地理位置獲取服務的軟體都應該遵守地理位置獲取的技術流程,經由使用者同意,才可以獲取資訊。在桌面瀏覽器上,此技術流程大致如下(在移動裝置非瀏覽器環境下會略有差異):
- 使用者開啟需要獲取地理位置的Web應用;
- 應用向瀏覽器請求地理位置,瀏覽器彈出詢問視窗,詢問使用者是否共享地理位置;
- 假設使用者允許,瀏覽器從裝置查詢相關資訊;
- 瀏覽器將相關資訊傳送到一個信任的位置伺服器,伺服器返回具體的地理位置。