包含了如下功能:
(1)經過IP地址獲取城市地址(並不徹底準確,存在代理IP或IP中轉時定位與實際位置不一致的狀況)
(2)經過移動端瀏覽器及GPS定位位置座標
(3)根據位置座標轉換百度地圖座標
(4)根據位置座標逆推城市具體地址功能(存在必定偏差)
(5)經過使用百度API展現地理位置及添加標註功能
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>地理位置測試</title>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=1.3"></script>
<script type="text/javascript"
src="http://developer.baidu.com/map/jsdemo/demo/convertor.js"></script>
<script type="text/javascript">
var map;
var gpsPoint;
var baiduPoint;
var gpsAddress;
var baiduAddress;
function getLocation() {
//根據IP獲取城市
var myCity = new BMap.LocalCity();
myCity.get(getCityByIP);
//獲取GPS座標
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showMap, handleError, {
enableHighAccuracy: true, maximumAge: 1000 });
} else {
alert("您的瀏覽器不支持使用HTML 5來獲取地理位置服務");
}
}
function showMap(value) {
var longitude = value.coords.longitude;
var latitude = value.coords.latitude;
map = new BMap.Map("map");
//alert("座標經度爲:" + latitude + ", 緯度爲:" + longitude );
gpsPoint = new BMap.Point(longitude, latitude); // 建立點座標
map.centerAndZoom(gpsPoint, 15);
//根據座標逆解析地址
var geoc = new BMap.Geocoder();
geoc.getLocation(gpsPoint, getCityByCoordinate);
BMap.Convertor.translate(gpsPoint, 0, translateCallback);
}
translateCallback = function (point) {
baiduPoint = point;
var geoc = new BMap.Geocoder();
geoc.getLocation(baiduPoint, getCityByBaiduCoordinate);
}
function getCityByCoordinate(rs) {
gpsAddress = rs.addressComponents;
var address = "GPS標註:" + gpsAddress.province + "," + gpsAddress.city + "," +
gpsAddress.district + "," + gpsAddress.street + "," + gpsAddress.streetNumber;
var marker = new BMap.Marker(gpsPoint); // 建立標註
map.addOverlay(marker); // 將標註添加到地圖中
var labelgps = new BMap.Label(address, { offset: new BMap.Size(20, -10) });
marker.setLabel(labelgps); //添加GPS標註
}
function getCityByBaiduCoordinate(rs) {
baiduAddress = rs.addressComponents;
var address = "百度標註:" + baiduAddress.province + "," + baiduAddress.city + ","
+ baiduAddress.district + "," + baiduAddress.street + "," + baiduAddress.streetNumber;
var marker = new BMap.Marker(baiduPoint); // 建立標註
map.addOverlay(marker); // 將標註添加到地圖中
var labelbaidu = new BMap.Label(address, { offset: new BMap.Size(20, -10) });
marker.setLabel(labelbaidu); //添加百度標註
}
//根據IP獲取城市
function getCityByIP(rs) {
var cityName = rs.name;
alert("根據IP定位您所在的城市爲:" + cityName);
}
function handleError(value) {
switch (value.code) {
case 1:
alert("位置服務被拒絕");
break;
case 2:
alert("暫時獲取不到位置信息");
break;
case 3:
alert("獲取信息超時");
break;
case 4:
alert("未知錯誤");
break;
}
}
function init() {
getLocation();
}
window.onload = init;
</script>
</head>
<body>
<div id="map" style="width:600px;height:600px;"></div>
</body>
</html>javascript