google maps v3 电子地图测距
<title>google map api v3测距</title>
<link href="../../../App_Themes/Default/Default.css" rel="stylesheet" type="text/css" />
<link href="../../CustomTheme/Plugin.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
var map;
var polyline;
var polylinesArray = [];
//距离标记数组
var lenArray = [];
var DefaultLat = 39.919249;
var DefaultLng = 116.464347;
var DefaultZoom = 15; //默认情况下的zoom
//地图初始化
function MapInit(){
var singapoerCenter = new google.maps.LatLng(DefaultLat, DefaultLng); //设置中心位置
var myOptions = {
zoom: DefaultZoom,
center: singapoerCenter,
navigationControl: true,
scaleControl: true,
streetViewControl: true,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map"), myOptions);
//为地图的缩放事件提供
google.maps.event.addListener(map, 'zoom_changed', function() {
if (this.getZoom() < DefaultZoom) {
CreateMarker(DefaultLat, DefaultLng, DefaultZoom);
}
});
getDistance();
}
function CreateMarker(lat, lng, MyGoToCommunityZoom) {
var singapoerCenter = new google.maps.LatLng(lat, lng);
var myOptions = {
zoom: MyGoToCommunityZoom,
center: singapoerCenter,
navigationControl: true,
scaleControl: true,
streetViewControl: true,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
map.setOptions(myOptions);
}
//距离
function getDistance(){
google.maps.event.addListener(map,"click",function(event){
addMarker(event.latLng);
});
}
//添加新标记
function addMarker(location){
if(lenArray.length==0){
var icon = "../../../App_Themes/Default/images/dd-start.png";
}else{
if(lenArray.length>=2){
marker.setMap(null);
}
var icon ="../../../App_Themes/Default/images/dd-end.png";
}
//标记选项
var myOptions = {
position : location,
draggable :true,
map : map,
icon : icon
};
marker = new google.maps.Marker(myOptions);
//双击
google.maps.event.addListener(marker,'click',function(){
lenArray.push(marker);
drawOverlay();
});
//拖动结束事件
google.maps.event.addListener(marker,'dragend',function(){
lenArray.push(marker);
drawOverlay();
});
lenArray.push(marker);
drawOverlay();
}
//画出路径覆盖层
function drawOverlay(){
//路线数组
var flightPlanCoordinates = [];
//
//将坐标压入路线数组
if (lenArray) {
for (i in lenArray) {
flightPlanCoordinates.push(lenArray[i].getPosition());
}
}
//路径选项
var myOptions = {
path : flightPlanCoordinates,
map : map,
strokeColor : "#FF0000",
strokeOpacity : 1.0,
strokeWeight : 2
};
polyline = new google.maps.Polyline(myOptions);
//清除原有折线路径
if (polylinesArray) {
for (i in polylinesArray) {
polylinesArray[i].setMap(null);
}
polylinesArray = [];
}
polyline.setMap(map);
document.getElementById("sRes").innerHTML =(polyline.getLength()/1000).toFixed(3);
polylinesArray.push(polyline);
}
google.maps.LatLng.prototype.distanceFrom = function(latlng) {
var lat = [this.lat(), latlng.lat()]
var lng = [this.lng(), latlng.lng()] //var R = 6371; // km (change this constant to get miles)
var R = 6378137; // In meters
var dLat = (lat[1] - lat[0]) * Math.PI / 180;
var dLng = (lng[1] - lng[0]) * Math.PI / 180;
var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(lat[0] * Math.PI / 180) * Math.cos(lat[1] * Math.PI / 180) * Math.sin(dLng / 2) * Math.sin(dLng / 2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
var d = R * c;
return Math.round(d);
}
google.maps.Marker.prototype.distanceFrom = function(marker) {
return this.getPosition().distanceFrom(marker.getPosition());
}
google.maps.Polyline.prototype.getLength = function() {
var d = 0;
var path = this.getPath();
var latlng;
for (var i = 0; i < path.getLength() - 1; i++) {
latlng = [path.getAt(i), path.getAt(i + 1)];
d += latlng[0].distanceFrom(latlng[1]);
}
return d;
}
// 删除所有叠加物
function deleteOverlays() {
if (lenArray) {
for (i in lenArray) {
lenArray[i].setMap(null);
}
lenArray.length = 0;
}
//清除原有折线路径
if (polylinesArray) {
for (i in polylinesArray) {
polylinesArray[i].setMap(null);
}
polylinesArray = [];
}
document.getElementById("sRes").innerHTML="0.000";
}
</script>
</head>
<body οnlοad="MapInit()">
<div>
<div >
您所在的位置>电子地图测距</div>
<div id="search_box" class="search_box">
<div id="busSearchBox">
<span id="Span1" style="margin-left: 30px;">点击地图可跟踪您要测量的路线.
<input type="button" id="delMarker" οnclick="deleteOverlays();" value="清除标记" class="inputBtn" />
距离:<span id="sRes">0.000</span>km
</span>
</div>
</div>
<div id="map" style="width: 100%; height: 500px">
</div>
</div>
</body>
</html>
google maps v3 电子地图测距相关推荐
- Google Maps API v3:如何删除所有标记?
本文翻译自:Google Maps API v3: How to remove all markers? In Google Maps API v2, if I wanted to remove al ...
- Google Maps和GIS开发资源收集
Google Maps JQuery Maps google map是怎样工作的 Google Map API基本概念 Google Maps API编程资源大全 google map限制地图缩放级别 ...
- rails pry使用_在Rails中使用Google Maps
rails pry使用 地图是导航世界的方式. 他们具有检查地球上每个位置的能力,从而为路线和土壤成分等服务开辟了道路. 在本文中,我将介绍Google Maps API(和一些替代方法)并将其与Ra ...
- ASP.NET Google Maps Javascript API V3 实战基础篇一获取和设置事件处理程序中的属性...
ASP.NET Google Maps Javascript API V3 实战基础篇一获取和设置事件处理程序中的属性 <%@ Page Language="C#" Auto ...
- Google Maps API V3: 通过邮编获取经纬度 Get Location (Latitude and Longitude) from Zip Cod
In this article I will explain with an example, how to get Location Coordinates i.e. Latitude and Lo ...
- ASP.NET Google Maps Javascript API V3 实战基础篇一检测用户位置
ASP.NET Google Maps Javascript API V3 实战基础篇一检测用户位置 对于一些基本的东西,google maps JavaScript api v3 文档已经讲解得足够 ...
- Google Maps API V3 之 图层
图层概述 图层是地图上的对象,包含一个或多个单独项,但可作为一个整体进行操作.图层通常反映了您添加到地图上用于指定公共关联的对象集合.Maps API 会通过以下方法管理图层内对象的显示形式:将图层的 ...
- Google maps javascript api v3 叠加层(Overlays)介绍
很多人尝试google maps api的开发,通常会涉及到在Google maps上进行标注功能的开发.Helloj2ee学习一项技术通常不在看书,而是多以帮助为主.当我看完之后,我将Overlay ...
- Google Maps JavaScript API V3 叠加层
注意:以下网页中提到的 Google Maps JavaScript API 第 3 版现在是正式的 JavaScript API 版本.该 API 的第 2 版已根据我们的弃用政策正式弃用.欢迎您将 ...
最新文章
- 智能文档理解:通用文档预训练模型
- IISApp -a查找对应的AppPool
- [置顶] 【IOS】IOS7 UI适配
- Spring(1)_Bean初始化_逻辑图
- Python编程基础:第二十八节 随机数Random Numbers
- 使用Minikube部署本地Kubernetes集群(二十九)
- 730阵列卡支持多大硬盘_凯捷月销破2万,配6座头等舱空间,到底有多舒服?试驾了才知道...
- 2017.5.9 运输计划 失败总结
- 数据科学和人工智能技术笔记 七、特征工程
- 【李宏毅2020 ML/DL】P106 More about Life Long Learning
- 为linux系统引导和登录提供安全加固
- 百面机器学习——svm使用信息熵寻找最优划分
- 基于C语言的个人信息管理系统
- 教你三秒钟将电脑速度提高三倍
- 计算机动画类型,FW动画类型及制作详解 -电脑资料
- SQL server 字符串 转 日期格式
- matlab plotyy 属性如何调整,(完整word版)matlab中plotyy函数加入双y轴说明的方法
- Tilemap瓦片地图
- 【智能安全车载中控系统】(一)概览
- 【数据结构/leetcode】背包问题部分代码
热门文章
- 怎么在局域网中查找一台电脑连接到的交换机端口?(实测可用,CISCO 交换机环境)
- 主线程 子线程死掉_当线程死时,子进程也会死
- Android-开发之从掉洞到填坑之路,android开发规范阿里
- 批处理 窗口最小化 java_如何让批处理程序启动的时候最小化
- sping boot 笔记 哎呦不错哦
- [3] Jenkins 系列:如何获取触发Jenkins Job的用户信息?
- Python Flask教程学习02
- 有一头母牛,它每年年初要生一头小母牛;每头小母牛从第四个年头起,每年年初也要生一头小母牛。按此规律,若无牛死亡,第20个年头上共有多少头母牛
- [转载]ExtJs4 笔记(2) ExtJs对js基本语法扩展支持
- 多线程 ---- 线程的通信