现在地铁这么多,确实方便了出行,但是到达一个陌生地方时,找到最近的地铁站还是有点迷茫的。网上已经有一些查找最近地铁站的应用,特别是手机应用,但是对于怎么实现的却一知半解,这篇文章就来一探究竟。

这里通过Google地图的API来实现查找指定地点附近的地铁站的功能,首先准备好全部可以查询的地铁站,然后通过google map解析出来地铁站和指定地点的坐标,然后计算指定地点和每个地铁站的距离,如果距离在五公里之内就在地图上标注出来。

原理就是这么简单,下边看看怎么实现:

以天安门广场上的人民英雄纪念碑为指定中心点。

1、准备好可以查询的地铁站

为了便于处理,这里准备了十几个地铁站作演示,并放到一个数组里边。

var arrAddr=['天安门西地铁站','天安门东地铁站','西单地铁站','东单地铁站','王府井地铁站','前门地铁站','宣武门地铁站','复兴门地铁站','国贸地铁站','东直门地铁站','三元桥地铁站','动物园地铁站','五棵松地铁站'];

2、初始化google maps

引入google maps api,在页面的头部加入javascript文件的引用:

设置初始化参数、显示区域等:

var map; // 地图对象

var centerlocation; // 地图中心点坐标

var geocoder; // 地图解析API

// 地图初始化参数

var myOptions = {

zoom: 15,

mapTypeId: google.maps.MapTypeId.ROADMAP

};

// 指定地图显示区域,并根据参数初始化

map = new google.maps.Map(document.getElementById('map_canvas'), myOptions);

3、查询当前所在位置

通过google maps api获取人民英雄纪念碑的坐标,并在地图上标注出来。

geocoder = new google.maps.Geocoder();

if (geocoder) {

// 地理位置解析

geocoder.geocode( { 'address': '北京+人民英雄纪念碑'}, function(results, status) {

if (status == google.maps.GeocoderStatus.OK) {

// 获取中心点坐标

centerlocation=results[0].geometry.location;

// 设置地图中心

map.setCenter(centerlocation);

// 标注中心点

new google.maps.Marker({

map: map,

position: centerlocation

});

} else {

alert("Parse address error for reason: " + status);

}

});

}

4、在页面加载时显示中心点

将上边的代码整理当到一个函数initialize中,在页面load事件调用这个函数。

// 附加地图初始化处理到页面load事件

google.maps.event.addDomListener(window, 'load', initialize);

现在打开页面应该就可以看到效果了:

5、计算指定地点和每个地铁站的距离

为了更直观的显示,这里通过一个按钮来触发。

// 查找地铁站

function QueryRailway(){

for(var i in arrAddr)

{

markRailway(arrAddr[i]);

}

}

// 解析指定的地址,判断是否在范围之内,如果是则标注

function markRailway(address) {

if (geocoder) {

geocoder.geocode( { 'address': address}, function(results, status) {

if (status == google.maps.GeocoderStatus.OK) {

var location=results[0].geometry.location;

if(calDistance(centerlocation.lat(),centerlocation.lng(),location.lat(),location.lng())<=1){

var marker = new google.maps.Marker({

map: map,

position: location

});

}

} else {

//alert("解析地址请求失败,原因: " + status);

}

});

}

}

计算距离时用到一个函数calDistance,在google map api v2版中有一个方法可以计算坐标之间的直线距离,但是到v3就不提供了。从网上找到这个据说是v2版中实现的,代码如下:

// 计算两点之间的距离

var EARTH_RADIUS = 6378.137;//地球半径,单位为公里

function rad(d){ //计算弧度

return d * Math.PI / 180.0;

}

//计算两个经纬度坐标之间的距离,返回单位为公里的数值

function calDistance(lat1, lng1, lat2, lng2){

var radLat1 = rad(lat1);

var radLat2 = rad(lat2);

var a = radLat1 - radLat2;

var b = rad(lng1) - rad(lng2)

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 * EARTH_RADIUS;

s = Math.round(s * 10000) / 10000;

return s;

}

现在点击按钮看看效果:

只有三个地铁站被标注出来:天安门西站、天安门东站、前门站,这三个是1公里之内的。

这篇文章只是做了一个简单的演示,很多细节和功能可以完善的地方没有涉及,有兴趣的朋友可以自己试试。

python谷歌地图查找附近地铁站_Google地图实现查找指定地点1公里范围之内的地铁站...相关推荐

  1. 谷歌地图 替代_Google地图的替代品

    谷歌地图 替代 最近,关于Google产品和服务的消息并不令人惊讶. Google更改了Google Maps API使用政策,并向超出某些下载限制的那些用户收费. 众所周知,Google Maps是 ...

  2. 千万级别以上的地图兴趣点(POI)的快速查找测试

    近期,终于有点时间,将之前的地图兴趣点爬虫程序(http://blog.csdn.net/sparkexpert/article/details/51554813)完善了下,并用了七天的时间爬取了覆盖 ...

  3. 谷歌气球 simplekml 《八》地图动画之旋转动画的制作-全网唯一

    谷歌气球 simplekml 入门<一> 谷歌气球 simplekml 入门<二> 谷歌气球 simplekml 入门<三> 谷歌气球 simplekml 入门&l ...

  4. 每日一练:Python国内疫情数据爬取与地图绘制

    Python 国内疫情数据爬取与地图绘制 效果图 累计确诊疫情地图绘制 ① 时时数据抓取 ② 获取省份疫情数据 ③ 视觉配置项分段颜色数据设置 ④ 累计确诊疫情地图绘制 现存确诊疫情地图绘制 ① 获取 ...

  5. Python之pyecharts:利用pyecharts绘制地图十多个地区流动轨迹动态图

    Python之pyecharts:利用pyecharts绘制地图十多个地区流动轨迹动态图 目录 利用pyecharts绘制地图十多个地区流动轨迹动态图 Geo(GeoChartBase)函数 相关文章 ...

  6. 详解python 利用 pyecharts 画地图(热力图)(世界地图,省市地图,区县地图)、动态流向图

    转载: 详解python 利用echarts画地图(热力图)(世界地图,省市地图,区县地图) Pyecharts绘制全球流向图 pyecharts中文教程官网 目录  安装对应的python模块 世界 ...

  7. Python地理地图可视化:folium把百度地图中国城市中心经纬度解析出来并在地图上展示(三)

    python地理地图可视化:folium把百度地图各个城市经纬度解析出来并在地图上展示(三) 上一篇(https://zhangphil.blog.csdn.net/article/details/1 ...

  8. python绘制一份完美的中国地图

    本文章小编将带你学会使用python绘制一份完美的中国地图~ 昨日,突地被一大早的微博热搜 #自然资源部核查处理问题中国地图# 刷屏,恍惚中看到了近日在追的<亲爱的,热爱的>.小编还沉浸在 ...

  9. python根据json数据画疫情分布地图

    目录 一.基础地图使用 1.掌握使用pyecharts构建基础的全国地图可视化图表 二.疫情地图--国内疫情地图 1.案例效果 代码 三.疫情地图--省级疫情地图 四.数据集 注:数据集在文章最后 一 ...

最新文章

  1. 71 mac boook pro 无 gpu 下caffe 安装
  2. linux环境切换python3版本
  3. eclipse 输入卡顿_7个小技巧,解决eclipse卡顿问题
  4. MySQL5.5加主键锁读问题【转】
  5. 使用头文件的原因和规范
  6. java随机整数_java如何产生1-8的整数随机数?
  7. 英语学习笔记2019-11-08
  8. [转]Ionic系列——CodePen上的优秀Ionic_Demo
  9. win10 后台运行jar包_小编演示win10系统双击运行jar文件的教程
  10. this compilation unit is not on the build of a java project
  11. IOS开发学习----给表视图设置缩进级别
  12. mysql之冷备和mysqldump、mydumper、xtrabackup备份
  13. Myeclipse中web project各种常见错误及解决方法(持续更新)
  14. gd32f103驱动TLC59116(模拟i2c)
  15. 最好的离子应用程序模板
  16. s3c6410地址映射
  17. 3D模型欣赏:短发美女,小恶魔
  18. 微软edge浏览器安装包下载地址-Microsoft edge download
  19. 利用随机数函数掷骰子
  20. 服务器cpu哪个型号主频最高,史上最高主频 默认4.4GHz至强CPU发布

热门文章

  1. 水晶报表填充.Net Objects数据源
  2. 煤炭企业基于数据挖掘技术的云ERP应用分析
  3. 美国的Harvey Mudd College
  4. AUTOCAD2008注册
  5. MAX31856多类型热电偶温度检测方案芯片详解,附可实现的STM32程序代码
  6. CGlib、Enhancer、ProxyFactory在springboot中的实现动态代理
  7. 实验四 数据查询——简单查询 Sql Server数据库实验
  8. 第三章、三元运算、文件处理、函数
  9. 【weJudge】1109. [ACM]呐,你想成为什么颜色呢?
  10. python 最简单的画图