已知起始点,获取每段等距离途经点的经纬度(用百度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>
已知起始点,获取每段等距离途经点的经纬度(用百度js api作)的更多相关文章
- Python 读取照片的信息:拍摄时间、拍摄设备、经纬度等,以及根据经纬度通过百度地图API获取位置
		
通过第三方库exifread读取照片信息.exifread官网:https://pypi.org/project/ExifRead/ 一.安装exifreadpip install exifread ...
 - 百度地图API获取数据
		
目前,大厂的服务范围越来越广,提供的数据信息也是比较全的,在生活服务,办公领域,人工智能等方面都全面覆盖,相对来说,他们的用户基数大,通过用户获取的信息也是巨大的.除了百度提供api,国内提供免费AP ...
 - java基础 File与递归练习 使用文件过滤器筛选将指定文件夹下的小于200K的小文件获取并打印按层次打印(包括所有子文件夹的文件) 多层文件夹情况统计文件和文件夹的数量 统计已知类型的数量 未知类型的数量
		
package com.swift.kuozhan; import java.io.File; import java.io.FileFilter; /*使用文件过滤器筛选将指定文件夹下的小于200K ...
 - Acticiti流程引擎在已知当前流程定义id的情况下获取当前流程的所有信息(包括:节点和连线)
		
这里我们已知流程已经部署,我的需求是获取当前流程的所有任务节点,我使用instanceof关键字来进行匹配 private List<UserTask> getProcessUserTas ...
 - 对象布局已知时 C++ 对象指针的转换时地址调整
		
在我调试和研究 netscape 系浏览器插件开发时,注意到了这个问题.即,在对象布局已知(即对象之间具有继承关系)时,不同类型对象的指针进行转换(不管是隐式的从下向上转换,还是强制的从上到下转换)时 ...
 - 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 do ...
 - HoloLens开发手记 - Known issues 已知问题
		
本文主要提及一份问题清单,这些问题都可能对我们开发HoloLens应用造成困扰. Visual Studio 在使用VS 2015 Update 1连接HoloLens时,可能会有些小问题.但是这些小 ...
 - 已知json类型根据类型封装集合
		
1编写帮助类根绝url得到json public static string Post(string url) { string strURL = url; //创建一个HTTP请求 HttpWebR ...
 - 剑指offer——已知二叉树的先序和中序排列,重构二叉树
		
这是剑指offer中关于二叉树重构的一道题.题目原型为: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2, ...
 
随机推荐
- Docker给运行中的容器添加映射端口
			
方法一: 1.获得容器IP将container_name 换成实际环境中的容器名docker inspect `container_name` | grep IPAddress 2. iptables ...
 - Selenium-IDE,Selenium-RC ,Selenium grid以及 Selenium-Core
			
Selenium-IDE,Selenium-RC ,Selenium grid 以及 Selenium-Core Selenium 是一种 Web 应用的自动测试工具,通过模拟用户对 Web 页面的各 ...
 - Vim插件:Unite新手指导(译)
			
Unite是什么? Unite可以在一个项目中快速浏览文件.但是它不仅限于文件,其他任何可以列出的东西都可以很好的被显示和搜索.这个开放式的特性很可能是人们找到它的原因(原文:This open-en ...
 - 64位win2003/win2008系统IIS6.0/7.5配置PHP的方法
			
64位win2003/win2008系统IIS6.0/7.5配置PHP的方法 32位的win2003系统配置PHP,估计很多人都已经驾轻就熟了,不过当遇到64位的系统时,估计又会遇上新的问题了.本文记 ...
 - td中不包含汉字的字符串不换行,包含汉字的能换行的问题原因及解决方法
			
今天项目中遇到一个问题,一长串的字符串如:003403FF0014E54016030CC655BC3242,但是如:中国河北省石家庄市裕华区槐安路雅清街交口 这样的就可以换行. 原因是:英文字母之间如 ...
 - PKU 1129 Channel Allocation(染色问题||搜索+剪枝)
			
题目大意建模: 一个有N个节点的无向图,要求对每个节点进行染色,使得相邻两个节点颜色都不同,问最少需要多少种颜色? 那么题目就变成了一个经典的图的染色问题 例如:N=7 A:BCDEFG B:ACDE ...
 - 跨域问题-cors
			
什么是跨域如大家所知,出于安全考虑,浏览器会限制脚本中发起的跨站请求.比如,使用 XMLHttpRequest 对象发起 HTTP 请求就必须遵守同源策略(same-origin policy). 具 ...
 - python-socket作业
			
#客户端 import socket import threading import tkinter sock = socket.socket(socket.AF_INET, socket.SOCK_ ...
 - ISO8583
			
最开始时,金融系统只有IBM这些大的公司来提供设备,象各种主机与终端等.在各个计算机设备之间,需要交换数据.我们知道数据是通过网络来传送的,而在网络上传送的数据都是基于0或1这样的二进制数据,如果没有 ...
 - python 打印 九九表
			
用Python 打印九九表. print 每打印一行默认会带有换行, 在print语句后加上,end = 't' 会变成tab. 排版会好点. def main(): for i in range(1 ...