JS使用google地图API完成一个完整地图应用
来源:互联网 发布:sql语句创建数据库 编辑:程序博客网 时间:2024/04/29 22:48
注意:
1.这是一个完整应用,分别实现了定位、添加标记、标记点开窗口、watchme和clearme实现及时跟踪开关、移动显示路径功能
2.关于js的地图API, geolocation最重要的是getCurrentPosition方法, 其余两个为watchPosition(即时跟踪),clearWatch(取消即时跟踪)
3.google地图API的使用方法,一般就是先定义对象,对象里有一些google定义的固定属性,然后将该对象传入google的构造函数里
4.说说第三个参数 positionOptions,它的选项和默认值为
var positionOptions =
{
enableHighAccuracy:false, //是否允许高精度定位,启动的话会耗电很大但是会确定的相对准确,否则如果只想知道用户大概位置就没必要打开
timeout:infinty, //超时处理,默认是无限大也就是没有处理,如果在指定时间(毫秒)内不能确定一个位置,就会调用错误程序
maximumAge:0 //报告当前位置的年龄,如果当前位置持续时间超过了设置时间,就会尝试获取新位置,否则就返回缓存已有对象
}
代码部分:
<!doctype html><html><head><meta charset="utf-8"><title>google地图</title><script src="http://maps.google.com/maps/api/js?sensor=true"></script> //google地图api地址<script>// BEGIN // 计算两点距离成品代码,在起点的经度,纬度和终点的经度,纬度之间//function computeDistance(startCoords, destCoords) {var startLatRads = degreesToRadians(startCoords.latitude);var startLongRads = degreesToRadians(startCoords.longitude);var destLatRads = degreesToRadians(destCoords.latitude);var destLongRads = degreesToRadians(destCoords.longitude);var Radius = 6371; // radius of the Earth in kmvar distance = Math.acos(Math.sin(startLatRads) * Math.sin(destLatRads) + Math.cos(startLatRads) * Math.cos(destLatRads) *Math.cos(startLongRads - destLongRads)) * Radius;return distance;}function degreesToRadians(degrees) {radians = (degrees * Math.PI)/180;return radians;}// ENDvar map = null; //map地图全局变量,包含我们所创建的google地图var watchId = null; //跟踪的wathIdvar prevCoords = null; //前一坐标,用于显示路径var options = {enableHighAccuracy:true,timeout:100,maximumAge:0}function getMyLocation(){if (navigator.geolocation){navigator.geolocation.getCurrentPosition(displayLocation, displayError, options);var watchButton = document.getElementById("watch"); watchButton.onclick = watchLocation; //即时定位的函数var clearButton = document.getElementById("clearWatch");clearButton.onclick = clearWatch; //取消即时定位的函数}else{alert ("oops, no geolocation support");}}function watchLocation(){watchId = navigator.geolocation.watchPosition(displayLocation, displayError); //使用watchPosition进行跟踪,返回一个watchId,可以用它来取消跟踪}function clearWatch(){navigator.geolocation.clearWatch(watchId); //根据watchId取消跟踪watchId = null;}function scrollMapToPosition(coords){var latitude = coords.latitude;var longitude = coords.longitude;var latlong = new google.maps.LatLng(latitude, longitude);map.panTo(latlong); //绘制路径,取这个latlong对象并滚动地图,是你最新位置处于中心点addMarker(map, latlong, "Your new location", "You moved to:" + latitude + "," + longitude);}function displayError(error) //error对象有一个code属性,其中包含一个0-3的数。这是用js为各个错误码关联一个错误消息的好方法。{var errorTypes = //我们创建的错误消息对象,包括4个属性{0:"Unknow error",1:"Permission denied by user",2:"Position is not available",3:"Request timed out"};var errorMessage = errorTypes[error.code]; //将错误对象和error.code进行关联,并赋值给errorMessageif (error.code == 0 || error.code == 2) {errorMessage = errorMessage + "" + error.message; //对于错误0和2,有时候error.message会有一些额外信息,所以增加进去}var div = document.getElementById("location");div.innerHTML = errorMessage;options.timeout += 100;navigator.geolocation.getCurrentPosition(displayLocation, displayError, options);div.innerHTML += ".....checking again with timeout=" + options.timeout;}function displayLocation(position){ var latitude = position.coords.latitude;var longitude = position.coords.longitude;var div = document.getElementById("location");var distance = document.getElementById("distance");var km = computeDistance(position.coords, ourCoords); //起点和终点计算距离div.innerHTML = "You are at Latitude" + latitude + ", longitude" + longitude;distance.innerHTML = "You are " + km + "km from the wickedlySmart HQ"div.innerHTML += "(with" + position.coords.accuracy + "meters accuracy)"; //accuracy确定精度,单位为米,越小越精确,越大越不精确div.innerHTML += "(found in " + options.timeout + "milliseconds)";if (map == null){showMap(position.coords); prevCoords = position.coords; //当前坐标赋值给前一坐标变量}else{var meters = computeDistance(position.coords, prevCoords) * 1000;if (meters > 20) //如果前一坐标和现在坐标差距大于20{scrollMapToPosition(position.coords);prevCoords = position.coords;}}}var ourCoords = //这是Wickedlysmart总部的位置,用于显示你和他的距离{latitude:47.624851,longitude:-122.52099}function addMarker (map, latlong, title, content) //添加标记的函数,参数分别是,地图,经纬,窗口标题和窗口内容{var markerOptions = //定义对象,属性为google固定指定的{position:latlong, map:map,title:title,clickable:true};var marker = new google.maps.Marker(markerOptions); //google的标记构造函数var infoWindowOptions = //弹出窗口设置{content:content,position:latlong};var infoWindow = new google.maps.InfoWindow(infoWindowOptions);google.maps.event.addListener(marker, "click", function () //google.maps.event.addListener为点击事件增加监听者,监听者就像一个处理程序,类似onclick onload{infoWindow.open(map);});}function showMap(coords){var googleLatAndLong = new google.maps.LatLng(coords.latitude, coords.longitude); //googlemaps API所有方法前面都有google.maps,并且构造函数注意大写,LatLng 取我们的经度和纬度var mapOptions = {zoom:10, //可以指定0-21的值,数值越大越显示更多细节,10大概是城市规模center:googleLatAndLong, //中心点mapTypeId:google.maps.MapTypeId.ROADMAP //还有SATELLITE和HYBIRD};var mapDiv = document.getElementById("map");map = new google.maps.Map(mapDiv, mapOptions); //全局map在这里使用var title = "Your Location";var content = "You are here" + coords.latitude + coords.longitude;addMarker(map, googleLatAndLong, title, content);}window.onload = getMyLocation;</script><link rel="stylesheet" href="../HFhtml5/chapter5/myLoc.css" /></head><body><form><input type="button" id="watch" value="Watch me"><input type="button" id="clearWatch" value="Clear watch"></form><div id="location">Your location will go here.</div><div id="distance"></div><div id="map"></div></body></html>
- JS使用google地图API完成一个完整地图应用
- Google地图与js地图API
- google地图使用JS
- google maps js v3 api教程(1) -- 创建一个地图
- Google 地图 API 初级使用
- 使用百度地图JavaScript API构建离线地图应用(完整教程)
- 使用百度地图JavaScript API构建离线地图应用(完整教程)
- arcgis api for js 加载google地图
- ArcGIS API for Silverlight 使用google地图
- Google 地图 API V3 使用入门1
- extjs4 中使用google地图api
- Google地图API V3 使用整理文档
- google地图API的简单使用
- GOOGLE地图API
- google 地图 api
- Google 地图 API
- google 地图api
- google 地图 API 参考 .
- 传媒大学媒体中心资源批量获取工具的制作
- 设计模式(c++)笔记之十二(Proxy模式)
- 圆的面积
- Oracle模糊查询之(5.1认识全文索引之什么是分词[lexer])oracle Text 全文检索功能对中文分词的支持情况
- IOCP(I/O Completion Port,I/O完成端口模型)
- JS使用google地图API完成一个完整地图应用
- 该日是第几天
- VSS2005 使用方法
- HDU 1035 简单搜索,
- 输出星期几的英文
- 从TextBox添加到DataTable填充到GridView中显示之【此过程同时检测某个字段时候已经存在】
- 2.11 Presenting Sharing Options with UIActivityViewController
- 递归算法
- Memcache工作原理以及命中率介绍