已知起始点,获取每段等距离途经点的经纬度(用百度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, ...
随机推荐
- WebUploader 上传插件结合bootstrap的模态框使用时选择上传文件按钮无效问题的解决方法
由于种种原因(工作忙,要锻炼健身,要看书,要学习其他兴趣爱好,谈恋爱等),博客已经好久没有更新,为这个内心一直感觉很愧疚,今天开始决定继续更新博客,每周至少一篇,最多不限篇幅. 今天说一下,下午在工作 ...
- linux环境上运行.net core 初探
1.安装 .net core 环境 rpm --import https://packages.microsoft.com/keys/microsoft.ascsh -c 'echo -e " ...
- Ubuntu离线安装Tensorflow keras
实验室的服务器木有连接外网,无法使用pip进行安装,真正意义上的离线安装需要很多安装依赖包,下载起来很麻烦,而且版本号还不一定对. 另一种方法是利用源代码编译安装,那样也需要安装依赖包,比较麻烦. 经 ...
- JVM年轻代(转)
本文转自:http://my.oschina.net/xishuixixia/blog/133850 1.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完 ...
- netty10---分包粘包
客户端:根据 长度+数据 方式发送 package com.server; import java.net.Socket; import java.nio.ByteBuffer; public cla ...
- java使用freemarker 生成word文档
java 生成word文档 最近需要做一个导出word的功能, 在网上搜了下, 有用POI,JXL,iText等jar生成一个word文件然后将数据写到该文件中,API非常繁琐而且拼出来的 ...
- CentOS 6.3编译安装LAMP环境笔记
转载地址:http://www.jb51.net/article/54969.htm 最近抽空在虚拟机上测试成功了LAMP各个最新版本的整合编译安装,算是把之前的博文整合精简,以下内容均在CENTOS ...
- yum安装redis phpredis扩展
转载地址:http://blog.csdn.net/musicrabbit/article/details/9729941 redis和php-redis在官方源上是没有的,需要安装其他的源,其他源的 ...
- C++中string的成员函数
string类的构造函数: string(const char *s); //用c字符串s初始化 string(int n,char c); //用n个字符c初始化 此外,string类还支持默认构造 ...
- Cisco 交换Vlan配置
添加Vlan命令 #添加vlan100 config)#vlan 100 #重命名vlan100 config-vlan)#name vlan100 #返回上一层 config-vlan)#exit ...