从地图获取从哪里到哪里的距离

1496人阅读
Python(9)
一般百度地图、高德地图等都会提供API接口给我们,我们要使用其地图服务需要注册账号申请个密钥。
百度地图开放平台的网址:
注册后去创建个应用申请密钥:
图片中红框中的AK就是百度地图API的密钥(该AK就是我下面代码中调用百度地图API时使用的ak)
可以在这个网站找到对应功能API的用法:
最后,附上我跑的有关地图python代码:
# -- coding: UTF-8 --
使用地图的API获取经纬度及计算两地之间距离
author:stephen
import urllib, urllib2, json
from urllib2 import urlopen
def getGoogleMapForLngLat(address):
'使用用Google Map查询地址的经纬度'
addressUrl = &/maps/api/geocode/json?address=& + address
#中文url需要转码才能识别
addressUrlQuote = urllib2.quote(addressUrl, ':?=/')
response = urlopen(addressUrlQuote).read().decode('utf-8')
responseJson = json.loads(response)
lat = responseJson.get('results')[0]['geometry']['location']['lat'] #纬度
lng = responseJson.get('results')[0]['geometry']['location']['lng'] #经度
print(address + '的经纬度是: %f, %f'
%(lng, lat))
return [lat, lng]
#getGoogleMapForLngLat('广东省佛山市') #谷歌地图对应地址的经纬度
def getGaoDeForLngLat(address):
'使用高德地图API'
apiStem = '/v3/geocode/geo?'
params = {}
params['address'] = address
params['output'] = 'JSON'
params['key'] = 'a5717efe281fea54c2a03cc00310ae08'
url_params = urllib.urlencode(params)
RealAdd = apiStem + url_params
abc = urllib2.urlopen(RealAdd)
test = json.loads(abc.read())
# json.loads()
:把json字符串解码转换成Python对象
#result = json.dumps(test, ensure_ascii=False, indent=1)
# json.dumps():
把Python对象转换成json字符串
result = test['geocodes'][0]['location'].encode('utf8').split(',')
return float(result[0]), float(result[1])
#print getGaoDeForLngLat('广东省佛山市')
#非百度坐标(目前支持GPS设备获取的坐标、google地图坐标、soso地图坐标、amap地图坐标、mapbar地图坐标)转换成百度地图中使用的坐标
def getOthercoordToBaiducoord(coords):
apiStem = 'http://api./geoconv/v1/?'
params = {}
params['coords'] = coords
params['ak'] = '93cca2ceb74ea634cc95' #申请的密钥
url_params = urllib.urlencode(params)
RealAdd = apiStem + url_params
abc = urllib2.urlopen(RealAdd)
result = json.loads(abc.read())
return result['result'][0]['x'], result['result'][0]['y']
#print getOthercoordToBaiducoord(getGaoDeForLngLat('广东省佛山市'))
from math import *
def calcDistance(Lat_A, Lng_A, Lat_B, Lng_B):
'输入两点的经纬度计算两者距离'
# 赤道半径 (km)
# 极半径 (km)
flatten = (ra - rb) / ra
# 地球扁率
rad_lat_A = radians(Lat_A)
rad_lng_A = radians(Lng_A)
rad_lat_B = radians(Lat_B)
rad_lng_B = radians(Lng_B)
pA = atan(rb / ra * tan(rad_lat_A))
pB = atan(rb / ra * tan(rad_lat_B))
xx = acos(sin(pA) * sin(pB) + cos(pA) * cos(pB) * cos(rad_lng_A - rad_lng_B))
c1 = (sin(xx) - xx) * (sin(pA) + sin(pB)) ** 2 / cos(xx / 2) ** 2
c2 = (sin(xx) + xx) * (sin(pA) - sin(pB)) ** 2 / sin(xx / 2) ** 2
dr = flatten / 8 * (c1 - c2)
distance = ra * (xx + dr)
return distance
Lng_A, Lat_A = getGaoDeForLngLat('广东省佛山市')
Lng_B, Lat_B = getGaoDeForLngLat('广东省广州市')
distance = calcDistance(Lat_A, Lng_A, Lat_B, Lng_B)
print('(Lat_A, Lng_A)=({0:10.3f},{1:10.3f})'.format(Lat_A, Lng_A))
print('(Lat_B, Lng_B)=({0:10.3f},{1:10.3f})'.format(Lat_B, Lng_B))
print('Distance={0:10.3f} km'.format(distance))
两地距离的运行结果为:
(Lat_A, Lng_A)=( & &23.022, & 113.121)
(Lat_B, Lng_B)=( & &23.129, & 113.264)
Distance= & &18.889 km
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:18077次
排名:千里之外
原创:22篇查看: 4559|回复: 20
如何获取百度地图中的距离?
阅读权限20
在线时间 小时
如图,我在百度中这样查询后,如何返回它的这个公里数?有比较多的数据,麻烦各位看看
A123.PNG (41.05 KB, 下载次数: 8)
23:00 上传
阅读权限20
在线时间 小时
顶一下。。。
阅读权限20
在线时间 小时
哪位老师帮忙看一看,谢谢
阅读权限30
在线时间 小时
看了,找到距離,但找不到時間,應該說找出來的很奇怪..........
阅读权限95
在线时间 小时
blanksoul12 发表于
看了,找到距離,但找不到時間,應該說找出來的很奇怪..........
14-24-20.png (54.58 KB, 下载次数: 4)
14:26 上传
阅读权限30
在线时间 小时
& & & & & & & &
Sub Main() '主體代碼
& & Dim strText As String
& & Dim objJSON As Object
& & URL = &/?&
& & URL = URL & &&qt=nav&
& & URL = URL & &&da_src=pcmappg.searchBox.button&
& & URL = URL & &&c=1&
& & URL = URL & &&sn=& & Escape(&2$$$成都市$0$$&)
& & URL = URL & &&en=& & Escape(&2$$$杭州市$0$$&)
& & With CreateObject(&MSXML2.XMLHTTP&)
& && &&&.Open &GET&, URL & &&t=& & Rnd(), False
& && &&&.send
& && &&&strText = .responseText
& && &&&CopyToClipbox strText
& & End With
& &
& & With CreateObject(&msscriptcontrol.scriptcontrol&)
& && &&&.Language = &JavaScript&
& && &&&.AddCode &var mydata=& & strText
& && &&&Set objJSON = .CodeObject
& & End With
& & Set temp_call = CallByName(objJSON.mydata, &content&, VbGet)
& & Debug.Print temp_call.dis
& & temp_time = CallByName(temp_call, &time&, VbGet)
& & Debug.Print temp_time
& & Debug.Print temp_time / 3600
End Sub
Public Function Escape(ByVal strText As String) As String& &&&'如果值中?有非英文和?字,?需??成%形式
& & Set JS = CreateObject(&msscriptcontrol.scriptcontrol&)
& & JS.Language = &JavaScript&
& & Escape = JS.Eval(&encodeURI('& & Replace(strText, &'&, &\'&) & &');&)
End Function复制代码我只真入這些,可以嗎? 但找出來的時間次次不同的,不明白
阅读权限20
在线时间 小时
blanksoul12 发表于
我只真入這些,可以嗎? 但找出來的時間次次不同的,不明白
老师,好,这个报错,是不是你是繁体的原因?我是简体的
阅读权限20
在线时间 小时
wcymiss 发表于
老师好,这个动态的参数两个地方要修改哪里能否给个连接,我去修改两个地址就行
阅读权限20
在线时间 小时
顶一下。。。
阅读权限95
在线时间 小时
本帖最后由 wcymiss 于
19:29 编辑
我也是马甲 发表于
老师好,这个动态的参数两个地方要修改哪里能否给个连接,我去修改两个地址就行
Sub Main()
& & Const CityFrom As String = &成都&
& & Const CityTo As String = &杭州&
& & Dim strText As String
& & Dim URL As String
& & Dim dis, mtime
& &
& & URL = &/?&
& & URL = URL & &qt=nav&
& & URL = URL & &&c=223&
& & URL = URL & &&sn=2$$$$$$& & CityFrom & &$$0$$$$&
& & URL = URL & &&en=2$$$$$$& & CityTo & &$$0$$$$&
& &
& & With CreateObject(&MSXML2.XMLHTTP&)
& && &&&.Open &GET&, URL, False
& && &&&.Send
& && &&&strText = .responsetext
& && &&&dis = Val(Split(strText, &&&dis&&:&)(1))
& && &&&mtime = Val(Mid(strText, InStrRev(strText, &&&time&&:&) + 7))
& && &&&MsgBox &约& & Format(dis / 1000, &0.00公里/&) & Format(mtime / 86400, &hh小时nn分钟&)
& & End With
End Sub复制代码
最新热点 /1
ExcelHome每周都有线上直播公开课,
国内一流讲师真身分享,高手贴身答疑,
赶不上直播还能看录像,
关键居然是免费的!
厚木哥们都已经这么努力了,
你还好意思说学不好Office。
玩命加载中,请稍候
玩命加载中,请稍候
Powered by
本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任! & & 本站特聘法律顾问:徐怀玉律师 李志群律师【图文】综合探究一_从地图上获取信息_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
综合探究一_从地图上获取信息
大小:12.80MB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢地图上点一个,告诉你所在地点,距离哪多远_百度地图api吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:5,695贴子:
地图上点一个,告诉你所在地点,距离哪多远收藏
先看看效果:再贴代码:var map = new BMap.Map("map");map.centerAndZoom(new BMap.Point(116.404, 39.915), 16);var geocoder = new BMap.Geocoder();var locationOptions = {
poiRadius: 300}map.addEventListener("click", function(e){
var pt = e.
geocoder.getLocation(pt, function(result){&&&
if (result){&&&&&
var description = result.&&&&&
if (result.surroundingPois[0]){&&&&&&&
var poi = result.surroundingPois[0];&&&&&&&
description += "," + &&&&&&&&&&&&&&&&&&&&&&
poi.title + "向" + getDirDescription(result.point, poi.point) + " " +&&&&&&&&&&&&&&&&&&&&&&
Math.round(map.getDistance(result.point, poi.point)) + "米。"&&&&&
alert(description);&&&
}, locationOptions)});/** * 获取两点东西南北的位置关系 */function getDirDescription(pt1, pt2){
var h = pt1.lng - pt2.
var v = pt1.lat - pt2.
if (Math.abs(h) & Math.abs(v)){&&&
if (h & 0){&&&&&
return "西";&&&
else {&&&&&
return "东";&&&
if (v & 0){&&&&&
return "南";&&&
else {&&&&&
return "北";&&&
写的不错,就是方向判断简单了一些。
好东西··支持一下。
正好向楼主讨教 比如您那个我点一个远离城市的乡村 系统能立马知道此处属于 哪个省,哪个市,哪个县,哪个镇,哪个村吗? 希望楼主加我QQ一起探讨一下 我的是6542082
非常好!很棒啊!直接搜索周边最近的那条进行比对!对用户来说非常有参考价值!
方向应该更详细一点,哪个哥们能补充一下??西南,西北,东南,东北
这个再增加点儿计算就能搞定。
楼主您好,为什么我的surroundingPois在很多点获取不到附近的Poi点?这个附近好像太含糊,怎么解决让它能够一定找到最近的Poi点?望楼主解答。谢谢!
登录百度帐号推荐应用

我要回帖

 

随机推荐