目录

  • 一、百度地图API的接入
  • 二、主要实现的功能
    • 查询景点
    • 计算距离
      • 半正矢公式

一、百度地图API的接入

百度地图API可以为我们提供多种关于地图绘制和计算的功能,因为我们的项目和出行旅游有着很大的关系,要为用户提供多种关于地理位置和行程规划的信息,所以自然少不了它的支持。
用法:
1.首先需要注册账号,成为开发者,并申请密钥:

密钥是接入百度地图API的一个必需的东西,有了它才能正常使用API所提供的接口。

2.由于我们所做的主要是浏览器端,所以需要用到的就是JavaScript API,从下面的窗口可以了解到我们所会用到的类和一些方法以及方法的参数、返回值等说明。
了解到这些之后,剩下我们需要做的就是熟悉开发文档,并且利用它实现我们自己想要实现的功能。

二、主要实现的功能

主要实现了查询附近景点和根据经纬度计算距离两个功能。

查询景点

1.首先要了解到的是如何把结构化地址(如山东省济南市文化西路44号)和经纬度进行互换:

 var myGeo = new BMapGL.Geocoder();// 将地址解析结果显示在地图上,并调整地图视野myGeo.getPoint(address, function(point){}, '')

这里的address就是结构化地址,此时point里就贮存了位置的经纬度信息。

2.然后在查到该位置之后,就可以在此位置附近搜寻景点:

myGeo.getPoint(address, function(point){if(point){map.centerAndZoom(point, 11);map.addOverlay(new BMapGL.Marker(point, {title: address}));local = new BMapGL.LocalSearch(map, {renderOptions:{map: map},pageCapacity : 50});index=0;local.setSearchCompleteCallback(onSearchComplete);local.search("景点");map.enableScrollWheelZoom();}else{alert('您选择的地址没有解析到结果!');}}, '')

3.不仅要搜出来,还要把景点信息放进数组里存起来,这里主要使用的就是回调函数onSearchComplete:

function onSearchComplete(results) {var t = results.getNumPois();var totalPages = results.getNumPages();var currPage = results.getPageIndex();// 获取当前是第几页数据for(var j=0;j<results.getCurrentNumPois();j++){resultArray[index]=results.getPoi(j);index = index+1;}if(results.getPageIndex()<results.getNumPages()-1)local.gotoPage(results.getPageIndex()+1);}

4.最后再将该数组返回,就可完成功能。

计算距离

大体思路就是将两个位置都转换成经纬度,然后利用半正矢公式计算出距离来。

半正矢公式


半正矢公式是一种根据两点的经度和纬度来确定大圆上两点之间距离的计算方法,在导航有着重要地位。它是球面三角学中“半正矢定理”公式的特例,该定理涉及了球面三角形的边和角。
经过学习之后可以得到,原来我们根据经纬度计算距离,是用这个来完成的:

1.首先是确定两点经纬度:

function calculateDistance(address1,address2)
{var myGeo = new BMapGL.Geocoder();var lat1,lng1,lat2,lng2;myGeo.getPoint(address1, function(point){if(point){lat1 = point.lat;lng1 = point.lng;myGeo.getPoint(address2, function(point){if(point){lat2 = point.lat;lng2 = point.lng;s = getDistance(lng1,lat1,lng2,lat2);}else{alert('您选择的地址没有解析到结果!');}}, '')}else{alert('您选择的地址没有解析到结果!');}}, '')return s;
}

2.然后利用半正矢公式计算距离:

function getDistance(lng1,lat1,lng2,lat2)
{var radlng1 = lng1*(Math.PI/180);var radlng2 = lng2*(Math.PI/180);var radlat1 = lat1*(Math.PI/180);var radlat2 = lat2*(Math.PI/180);var a = radlat1-radlat2;var b = radlng1-radlng2;var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2) + Math.cos(radlat1)*Math.cos(radlat2)*Math.pow(Math.sin(b/2),2)));s = s*6378.137;s = Math.round(s*10)/10;return s;
}

这样我们的功能就实现成功了。

山东大学创新项目实训个人工作日志(一)相关推荐

  1. 山东大学创新项目实训个人工作日志(十七)

    景点门票数据的整合和组织 主要实现的是景点门票的后四个平台(去哪儿.同程.途牛.携程)的数据的整合. 去哪儿: def search_spots(self, keyword, city):'''查询景 ...

  2. 山东大学创新项目实训个人工作日志(二十三)

    景点图片爬取(改进) 经过测试发现,之前爬到的数据并不是全部的数据,据估计,全国共两千多个城市和地区,数以万计的景点,而之前仅仅是将每个城市的一小部分景点爬了出来,所以现在需要做的就是把所有数据全部爬 ...

  3. 山东大学创新项目实训个人工作日志(十六)

    景点门票数据的整合 至此为止,共爬取了八个平台上门票信息,但信息参差不齐,如果直接这样返回给用户肯定是不可以的,所以现在需要做的就是把八个平台上想要爬取的数据规定一个固定的格式,我这里采用的依然是字典 ...

  4. 山东大学创新项目实训个人工作日志(二十)

    马蜂窝平台的景点图片爬取 这次完成的是对马蜂窝景点图片爬取的改进,之前是通过地图点来爬取的,但是地图点的数据不全,所以研究之后打算从这一板块重新爬取. 但是这一部分进行翻页时,网页本身是没有任何变化的 ...

  5. 山东大学软件学院项目实训-创新实训-SDUMeeting(一)

    山东大学软件学院项目实训-创新实训-SDUMeeting(一) 一.前言: 这个项目是山东大学视频会议项目,这个项目基于webrtc构建多人视频会议系统,我负责视频会议客户端及服务端安全防护,这个专栏 ...

  6. 山东大学软件学院项目实训-创新实训-SDUMeeting(三)

    山东大学软件学院项目实训-创新实训-SDUMeeting(三) 山大会议项目web安全之文件注入防护 一.前言 山大会议的客户端加入了对用户自定义头像的支持,需要用户自行上传头像图片,这个过程存在文件 ...

  7. 山东大学软件学院项目实训-创新实训-SDUMeeting(六)

    山东大学软件学院项目实训-创新实训-SDUMeeting(六) 端对端加密与密钥交换 端到端加密(end-to-end),是一种只有参与通讯的用户可以读取信息的通信系统.它可以防止潜在的窃听者--包括 ...

  8. 山东大学暑期项目实训——云主机服务比价与预测系统

    山东大学暑期项目实训--云主机服务比价与预测系统(十二) 使用tensorflow做预测 一.简单的预测函数值 1.使用训练数据做预测 创建模型: model = keras.Sequential([ ...

  9. 山东大学软件学院项目实训-创新实训-网络安全靶场实验平台(一)

    目录 前言 一.项目介绍 二.项目框架 三.个人分工 四.本周任务完成情况 4.1  Vue安装 4.1.1 node.js安装及配置 4.1.2 安装vue及脚手架 4.1.3 运行Vue项目 4. ...

最新文章

  1. 搜索引擎中的URL散列
  2. 张一鸣的微博世界-产品篇一
  3. 基于SSH实现在线课程学习系统
  4. C Tester Doer Pattern
  5. 阿里云1C2G虚拟机【99/年】羊毛党集合啦!
  6. NUMECA FINE Turbo 14中文版
  7. 2017前端面试题之综合篇(1)
  8. 攻防:如何防止动态hook绕过jni签名校验
  9. 李宏毅Reinforcement Learning强化学习入门笔记
  10. weblogic部署,常见错误解决——Unmarshaller failed
  11. 压缩之后神经网络忘记了什么?Google研究员给出了答案
  12. c++ 原子操作 赋值_多线程操作可见性
  13. 用倍增方式查询本表数据再插入到本表,用作测试数据
  14. poj1091:跳蚤【容斥原理】
  15. Android handleMessage和sendMessage 简单示例
  16. 数据科学家应该掌握的12种机器学习算法(附信息图)
  17. 数据库, 数据仓库, 数据集市,数据湖,数据中台
  18. eclipse快捷键介绍
  19. html钢琴谱播放器,iPad版五线谱播放器《钢琴谱大全》评测
  20. 来自2018年最后的瞎扯——从“空间”到“强人工智能”

热门文章

  1. 固体加热_火是属于液体,固体还是气体?加热为什么不能用明火!
  2. usb hub芯片GL850G创惟
  3. 【python爬虫】HIMCM2016 FedEx联邦快递的一日达地图
  4. 一文搞懂Volatile关键字的作用
  5. 限时赠票 | 2018 TOKENSKY 区块链大会 - 首尔站
  6. php 查找数组指定元素,PHP查找与搜索数组元素方法总结
  7. android volley缓存图片,android – 如何获取使用Volley ImageLoader下载的缓存位图?
  8. GitHub上最火的40个Android开源项目
  9. 电商产品数据集之分析
  10. 开放网络操作系统介绍(4)、DANOS