python谷歌地图查找附近地铁站_Google地图实现查找指定地点1公里范围之内的地铁站...
现在地铁这么多,确实方便了出行,但是到达一个陌生地方时,找到最近的地铁站还是有点迷茫的。网上已经有一些查找最近地铁站的应用,特别是手机应用,但是对于怎么实现的却一知半解,这篇文章就来一探究竟。
这里通过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公里范围之内的地铁站...相关推荐
- 谷歌地图 替代_Google地图的替代品
谷歌地图 替代 最近,关于Google产品和服务的消息并不令人惊讶. Google更改了Google Maps API使用政策,并向超出某些下载限制的那些用户收费. 众所周知,Google Maps是 ...
- 千万级别以上的地图兴趣点(POI)的快速查找测试
近期,终于有点时间,将之前的地图兴趣点爬虫程序(http://blog.csdn.net/sparkexpert/article/details/51554813)完善了下,并用了七天的时间爬取了覆盖 ...
- 谷歌气球 simplekml 《八》地图动画之旋转动画的制作-全网唯一
谷歌气球 simplekml 入门<一> 谷歌气球 simplekml 入门<二> 谷歌气球 simplekml 入门<三> 谷歌气球 simplekml 入门&l ...
- 每日一练:Python国内疫情数据爬取与地图绘制
Python 国内疫情数据爬取与地图绘制 效果图 累计确诊疫情地图绘制 ① 时时数据抓取 ② 获取省份疫情数据 ③ 视觉配置项分段颜色数据设置 ④ 累计确诊疫情地图绘制 现存确诊疫情地图绘制 ① 获取 ...
- Python之pyecharts:利用pyecharts绘制地图十多个地区流动轨迹动态图
Python之pyecharts:利用pyecharts绘制地图十多个地区流动轨迹动态图 目录 利用pyecharts绘制地图十多个地区流动轨迹动态图 Geo(GeoChartBase)函数 相关文章 ...
- 详解python 利用 pyecharts 画地图(热力图)(世界地图,省市地图,区县地图)、动态流向图
转载: 详解python 利用echarts画地图(热力图)(世界地图,省市地图,区县地图) Pyecharts绘制全球流向图 pyecharts中文教程官网 目录 安装对应的python模块 世界 ...
- Python地理地图可视化:folium把百度地图中国城市中心经纬度解析出来并在地图上展示(三)
python地理地图可视化:folium把百度地图各个城市经纬度解析出来并在地图上展示(三) 上一篇(https://zhangphil.blog.csdn.net/article/details/1 ...
- python绘制一份完美的中国地图
本文章小编将带你学会使用python绘制一份完美的中国地图~ 昨日,突地被一大早的微博热搜 #自然资源部核查处理问题中国地图# 刷屏,恍惚中看到了近日在追的<亲爱的,热爱的>.小编还沉浸在 ...
- python根据json数据画疫情分布地图
目录 一.基础地图使用 1.掌握使用pyecharts构建基础的全国地图可视化图表 二.疫情地图--国内疫情地图 1.案例效果 代码 三.疫情地图--省级疫情地图 四.数据集 注:数据集在文章最后 一 ...
最新文章
- 71 mac boook pro 无 gpu 下caffe 安装
- linux环境切换python3版本
- eclipse 输入卡顿_7个小技巧,解决eclipse卡顿问题
- MySQL5.5加主键锁读问题【转】
- 使用头文件的原因和规范
- java随机整数_java如何产生1-8的整数随机数?
- 英语学习笔记2019-11-08
- [转]Ionic系列——CodePen上的优秀Ionic_Demo
- win10 后台运行jar包_小编演示win10系统双击运行jar文件的教程
- this compilation unit is not on the build of a java project
- IOS开发学习----给表视图设置缩进级别
- mysql之冷备和mysqldump、mydumper、xtrabackup备份
- Myeclipse中web project各种常见错误及解决方法(持续更新)
- gd32f103驱动TLC59116(模拟i2c)
- 最好的离子应用程序模板
- s3c6410地址映射
- 3D模型欣赏:短发美女,小恶魔
- 微软edge浏览器安装包下载地址-Microsoft edge download
- 利用随机数函数掷骰子
- 服务器cpu哪个型号主频最高,史上最高主频 默认4.4GHz至强CPU发布