已知起始点,获取每段等距离途经点的经纬度(用百度js api作)

已知两个中文地址,自动规划路径,获取路径上每个3公里的点的经纬度

<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
	<style type="text/css">
		body, html {width: 100%;height: 100%; margin:0;font-family:"微软雅黑";}
		#allmap{height:100%;width:100%;}
		#r-result,#r-result table{width:100%;}
	</style>
	<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=你的key"></script>

		<script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
	<title>根据起终点名称驾车导航</title>
	<script>

	//定义一些常量
  
var x_PI = 3.14159265358979324 * 3000.0 / 180.0;  
var PI = 3.1415926535897932384626;  
var a = 6378245.0;  
var ee = 0.00669342162296594323;   //百度坐标系 (BD-09) 与 火星坐标系 (GCJ-02)的转换
function bd09togcj02(bd_lon, bd_lat) {  
	var x_pi = 3.14159265358979324 * 3000.0 / 180.0;  
	var x = bd_lon - 0.0065;  
	var y = bd_lat - 0.006;  
	var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);  
	var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);  
	var gg_lng = z * Math.cos(theta);  
	var gg_lat = z * Math.sin(theta);  
	return [gg_lng, gg_lat]  
}
//火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换
function gcj02tobd09(lng, lat) {
	var z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * x_PI);
	var theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * x_PI);
	var bd_lng = z * Math.cos(theta) + 0.0065;
	var bd_lat = z * Math.sin(theta) + 0.006;
	return [bd_lng, bd_lat];
}
//WGS84转GCj02
function wgs84togcj02(lng, lat) {
	if(out_of_china(lng, lat)) {
		return [lng, lat]
	} else {
		var dlat = transformlat(lng - 105.0, lat - 35.0);
		var dlng = transformlng(lng - 105.0, lat - 35.0);
		var radlat = lat / 180.0 * PI;
		var magic = Math.sin(radlat);
		magic = 1 - ee * magic * magic;
		var sqrtmagic = Math.sqrt(magic);
		dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI);
		dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);
		var mglat = lat + dlat;
		var mglng = lng + dlng;
		return [mglng, mglat]
	}
}
//GCJ02 转换为 WGS84
function gcj02towgs84(lng, lat) {
	if(out_of_china(lng, lat)) {
		return [lng, lat]
	} else {
		var dlat = transformlat(lng - 105.0, lat - 35.0);
		var dlng = transformlng(lng - 105.0, lat - 35.0);
		var radlat = lat / 180.0 * PI;
		var magic = Math.sin(radlat);
		magic = 1 - ee * magic * magic;
		var sqrtmagic = Math.sqrt(magic);
		dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI);
		dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);
		mglat = lat + dlat;
		mglng = lng + dlng;
		return [lng * 2 - mglng, lat * 2 - mglat]
	}
}

function transformlat(lng, lat) {
	var ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng));
	ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
	ret += (20.0 * Math.sin(lat * PI) + 40.0 * Math.sin(lat / 3.0 * PI)) * 2.0 / 3.0;
	ret += (160.0 * Math.sin(lat / 12.0 * PI) + 320 * Math.sin(lat * PI / 30.0)) * 2.0 / 3.0;
	return ret;
}

function transformlng(lng, lat) {
	var ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng));
	ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
	ret += (20.0 * Math.sin(lng * PI) + 40.0 * Math.sin(lng / 3.0 * PI)) * 2.0 / 3.0;
	ret += (150.0 * Math.sin(lng / 12.0 * PI) + 300.0 * Math.sin(lng / 30.0 * PI)) * 2.0 / 3.0;
	return ret;
}
// 判断是否在国内,不在国内则不做偏移
function out_of_china(lng, lat) {
	return(lng < 72.004 || lng > 137.8347) || ((lat < 0.8293 || lat > 55.8271) || false);
}

</script>
</head>
<body>
	<div id="allmap"></div>
	<div id="r-result"></div>
</body>
</html>
<script type="text/javascript">
	// 百度地图API功能
	var map = new BMap.Map("allmap");
	var start = "伊尔克什坦口岸";
	var end = "吐尔尕特口岸";
	map.centerAndZoom(new BMap.Point(73.972833,39.71875), 19);
	//三种驾车策略:最少时间,最短距离,避开高速
	var routePolicy = [BMAP_DRIVING_POLICY_LEAST_TIME,BMAP_DRIVING_POLICY_LEAST_DISTANCE,BMAP_DRIVING_POLICY_AVOID_HIGHWAYS];

//$("#result").click();
//	$("#result").click(function(){
		map.clearOverlays();
		var i=$("#driving_way select").val();
		search(start,end,routePolicy[2]);
    	var PERIOD_DIS=3;
		function search(start,end,route){
			var options = {
				renderOptions:{
					policy: route,
					map: map,
	//				panel: "r-result",
					enableDragging : true //起终点可进行拖拽,
				},
			    onSearchComplete: function(results){
			    	var pointArr=results.yr[0].dk[0].Ar;
			    	 var dis=0;
			    	 var points=[];
			    	 var temp=0;
			    	 var str="";
			    	 var bg=bd09togcj02(pointArr[0].lng,pointArr[0].lat);
	    	 		 var gw=gcj02towgs84(bg[0],bg[1]);
	    	 		 str+="["+gw[0]+","+gw[1]+"],\n";
//	    	 		 str+=pointArr[0].lat+","+pointArr[0].lng+";";
	    	 		 var isEnd=false;
			    	 for (var i = 1; i < pointArr.length; i++) {
			    	 	var pointA=pointArr[i-1];
			    	 	var pointB=pointArr[i]
			    	 	dis+=map.getDistance(pointA,pointB);
			    	 	var dd=dis/1000;
//			    	 	console.log("dd--->"+dd);
			    	 	if(dd%PERIOD_DIS<1){
			    	 		var _temp=(dd-dd%PERIOD_DIS)/PERIOD_DIS;
			    	 		if(_temp!=0&&temp!=_temp){
//			    	 		console.log("temp---->"+temp+",_temp---->"+_temp)
			    	 		temp=_temp;
//			    	 		console.log("dis%5-->"+dd%PERIOD_DIS+",dis%5<=1---->"+(dd%PERIOD_DIS<1)+",dis--->"+dd);
			    	 		 points.push(pointB);
			    	 		 bg=bd09togcj02(pointB.lng,pointB.lat);
			    	 		 gw=gcj02towgs84(bg[0],bg[1]);
			    	 		 str+="["+gw[0]+","+gw[1]+"],\n";
//			    	 		 str+=pointB.lat+","+pointB.lng+";";
			    	 		 if(i==pointArr.length-1){
			    	 		 	isEnd=true;
			    	 		 }
			    	 		}
			    	 	}

			        }
			    	 if(!isEnd){
			    	  bg=bd09togcj02(pointArr[pointArr.length-1].lng,pointArr[pointArr.length-1].lat);
	    	 		  gw=gcj02towgs84(bg[0],bg[1]);
	    	 		  str+="["+gw[0]+","+gw[1]+"],\n";
//	    	 		  str+=pointArr[pointArr.length-1].lat+","+pointArr[pointArr.length-1].lng+";";
			    	 }

//			    	 console.log("dis--------->"+dis);
//			    	 console.log("len--->"+points.length)
			    	 console.log("所有5公里倍数的点--->\n"+str)

			        if (driving.getStatus() == BMAP_STATUS_SUCCESS){  

			            var plan = results.getPlan(0);   

			            var ddd=map.getDistance(results.getStart().point,results.getEnd().point)/1000

//			            console.log("result----->"+JSON.stringify(results))
			            // 获取第一条方案
			            var distance= plan.getDistance(true);
			            var dd=parseFloat(distance-1.2)%5;

//			            console.log("start--->"+JSON.stringify(results.getStart().point)+",distance--->"+distance);

//			            if(dd==0){
//			            	alert("start--->"+JSON.stringify(results.getStart().point)+",distance--->"+distance);
//			            }

			            // 获取方案的驾车线路
			            var route = plan.getRoute(0);
			            // 获取每个关键步骤,并输出到页面
			            var s = [];   

			            for (var i = 0; i < route.getNumSteps(); i ++){
			                var step = route.getStep(i);    

			                s.push((i + 1) + ". " + step.getDescription());
			            }
			            var d=s.join("<br>");
//			            console.log("test--------->"+d );
			        }    else{
			        	 console.log("test-----1---->" );
			        }
			    }
			};
			var driving = new BMap.DrivingRoute(map, options);

			console.log("test-------------------")
			driving.search(start,end);
		}

//	});

</script>

  

原文地址:https://www.cnblogs.com/charlie098765/p/9269814.html

时间: 2024-09-29 06:08:27

已知起始点,获取每段等距离途经点的经纬度(用百度js api作)的相关文章

PHP通过地址获取经纬度【百度地图API】

/** * @param string $address 地址 * @param string $city 城市名 * @return array */ function getLatLng($address='',$city='') { $result = array(); $ak = '';//您的百度地图ak,可以去百度开发者中心去免费申请 $url ="http://api.map.baidu.com/geocoder/v2/?callback=renderOption&outp

百度地图API获取数据

目前,大厂的服务范围越来越广,提供的数据信息也是比较全的,在生活服务,办公领域,人工智能等方面都全面覆盖,相对来说,他们的用户基数大,通过用户获取的信息也是巨大的.除了百度提供api,国内提供免费API获取数据的还有很多,包括新浪.豆瓣电影.饿了么.阿里.腾讯等今天使用百度地图API来请求我们想要的数据. 第一步.注册百度开发者账号 注册成功后就可以获取到应用服务AK也就是API秘钥,这个是最重要的,应用名称可以随便取,如果是普通用户一天只有2000调用限额,认证用户一天有10万次调用限额 在百

对象布局已知时 C++ 对象指针的转换时地址调整

在我调试和研究 netscape 系浏览器插件开发时,注意到了这个问题.即,在对象布局已知(即对象之间具有继承关系)时,不同类型对象的指针进行转换(不管是隐式的从下向上转换,还是强制的从上到下转换)时,编译器会根据对象布局对相应的指针的值进行调整.不管是 microsoft 的编译器,还是 gcc 编译器都会做这个动作,因为这和 C++ 对象模型有关. 举一个简单的例子,如下代码: #include <stdio.h> class A { public: int x; void foo1()

请给出程序,功能为获取“一段程序代码”运行时长

有一天看到了几个java题目,我就写了一下,废话少说,直接上代码了 3.已知int型数组arr[t], 请:① 打印该数组.输出格式为:[arr1,arr2,arr3,...]. ② 输出数组的最大值max与最小值min. ③ 使用冒泡排序对数组进行排序,并打印排序后数组. 4. 请给出程序,功能为获取“一段程序代码”运行时长.要求: ① 程序框架在父类中定义. ② “一段程序代码”在子类中给出,并覆盖父类中对应方法. ③ “一段程序代码”为:打印一个由“*”组成的图形,见图1. 图1 第三题:

[推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼、百战不殆)

原文:[推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼.百战不殆) [推荐]ORACLE PL/SQL编程之五: 异常错误处理(知已知彼.百战不殆) 继上三篇:ORACLE PL/SQL编程之八:把触发器说透 ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) 得到了大家的强力支持与建议,万分感谢.接下来介绍下一篇:oracle pl/sql异常处理部分,还望大家一定

【转】[推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼、百战不殆)

[推荐]ORACLE PL/SQL编程之五: 异常错误处理(知已知彼.百战不殆) 继上三篇:ORACLE PL/SQL编程之八:把触发器说透 ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) 得到了大家的强力支持与建议,万分感谢.接下来介绍下一篇:oracle pl/sql异常处理部分,还望大家一定要支持与推荐呀~! 本篇主要内容如下: 5.1 异常处理概念 5.1.1 预定义的异常

Android百度地图 - 在地图上标注已知GPS纬度经度值的一个或一组覆盖物 - OPEN 开发经验库 - 360安全浏览器 8.1

首页   代码   文档   问答   资讯   经验   GitHub日报 登录   注册 www.open-open.com/libOPEN经验 投稿 全部经验分类  Android IOS JavaScript HTML5 CSS jQuery Python PHP NodeJS Java Spring MySQL MongoDB Redis NOSQL Vim C++ C# JSON Ruby Linux Nginx Docker 所有分类  >  开发语言与工具  >  移动开发  

怎么样仿写已知网址的网页?

今天上午在实验室里学习,无意中看到湖北老乡群里爆出了一则外包的消息. 是问有没有回搭建网站.我接了这单活儿.需求很简单,仿照这一个已知的网站做一个静态页面. 工作量不大.他说了,做一个静态网站.因为之前,我曾做过类似的工作,所以我就答应了. 遇到的第一个问题就是评价.他让我开个价.说实话,我当时也蒙了.这个外包估价这个事情,我之前也没做过.在网上搜了下,每个人说法都不一样.看到一个我觉得可以参考的回答.按照做的页面收费. 每个30~50.于是我给他报价是500,理由就是 大概做10个左右的页面,

Java集合-5. (List)已知有一个Worker 类如下: 完成下面的要求 1) 创建一个List,在List 中增加三个工人,基本信息如下: 姓名 年龄 工资 zhang3 18 3000 li4 25 3500 wang5 22 3200 2) 在li4 之前插入一个工人,信息为:姓名:zhao6,年龄:24,工资3300 3) 删除wang5 的信息 4) 利用for 循

第六题 5. (List)已知有一个Worker 类如下: public class Worker { private int age; private String name; private double salary; public Worker (){} public Worker (String name, int age, double salary) { this.name = name; this.age = age; this.salary = salary; } public