ue4 无限地图_ue4 无限地图_UE4根据真实地图来生成行走道路(一)

起因:前不久看美术在UE4地图里面拉Spline线来作为演示的步行道路,每两个不同地点就要按照地图道路来拉出演示线,所以我突发奇想,能不能用现有的一些地图API输入经纬度,来给我生成行走道路(百度地图,高德地图),后面我去看了一下,发现这个方法可行,现在我们开始行动吧。

API选择:现在很多地图APP都提供了API(谷歌,百度,高德),支持的语言也多,但都需要注册,注册这些API的Key我就不演示了,网上有很多这方面的教程,我选用的是百度API,调用API数据使用的是Python,当然你也可以使用其他方法,使用编写Python的IDE是Jupyter Notebook,用这个编写好处我就不说了,你也可以用其他IDE,现在开始我们的入坑之路吧。

首先我们打开百度地图API中德WebApi服务中的轻量级路线规划,最开始编译的时候可以选取一个API开始,后面再进行增添

61338

你点击一个,你会发现必须输入哪些参数,和可选哪些参数,首先必须输入的是开发者AK(就是你自己申请的Key),还有起点经纬度和终点经纬度,其他可以不用填,我们在Python中的写法:

url = 'http://api.map.baidu.com/direction/v2/transit?' #步行

params={'ak':'ZWiWngbeBeGe6ncQz6eFdEp2jGCeGjqH','origin':'30.493530,104.080483', #起点

'destination':'30.505234,104.053783', #终点

}

然后我们需要调用requests库,该库基本方法网上有很多,可自行查找,我们只需要他来爬取数据,后面再把数据给解析出来:

importrequests

...

r=requests.get(url,params)

r_js= r.json()

现在我们回到百度API的详解里面输出的参数结构,当然你也可以在Python中打印出来看参数结构,我们可能需要的是行走时每个点的数据和总时间和总路程:

routes_ = r_js['result']['routes'][0] #路程点

dis_ = routes_['distance'] #总路程

time_ = routes_['duration'] #总时间

好,现在我们获取到自己想要的数据,但是我们怎么才能让UE4知道该数据呢,我们可以使用Python调用C++函数,也可以使用把数据给存入一个txt文件,让C++读取该txt文件,我使用的是后者,当然你们可以使用前者:

f_path = 'f:\\PythonProject\\walking.txt' #把数据传入该路径

f_re = open(f_path,'w')

with open(f_path,"r+") as f:

read_data=f.read()

f.seek(0)

f.truncate()#清空文件

f.write(read_data.replace('apple', 'android'))

steps_= routes_['steps']for step insteps_:

path_= step['path']

point_lst= path_.split(';')print(point_lst)

f_re.writelines(['-----','\n']) #每一到拐角处用-----区分一下

for point inpoint_lst:

lng= point.split(',')[0]

lat= point.split(',')[1]

f_re.writelines([str(lng),',',str(lat),'\n'])

f_re.writelines(['end','\n'])

f_re.writelines(['time:',str(time_),'\n'])

f_re.writelines(['distance:',str(dis_),'\n'])

f_re.close()

我们可以启动一下看看是否txt里面有数据,如果有那就成功了,如果没有,我们需要查看百度API AK值对否,还有就是自身IP是否在百度API中,当所有无误时,我们就可以进入下一章,UE4插件对Python的调用和蓝图与UE4插件的响应方法。

完整Python代码:

importrequests

url= 'http://api.map.baidu.com/direction/v2/transit?' #步行

params={'ak':'ZWiWngbeBeGe6ncQz6eFdEp2jGCeGjqH','origin':'30.493530,104.080483', #起点

'destination':'30.505234,104.053783', #终点

}

r=requests.get(url,params)

r_js=r.json()#print(r_js)

routes_ = r_js['result']['routes'][0] #路程点

dis_ = routes_['distance'] #总路程

time_ = routes_['duration'] #总时间

#print('总行程距离为:'+str(dis_)+'米,总时间为:'+str(time_)+'秒')

f_path= 'f:\\PythonProject\\walking.txt' #把数据传入该路径

f_re = open(f_path,'w')

with open(f_path,"r+") as f:

read_data=f.read()

f.seek(0)

f.truncate()#清空文件

f.write(read_data.replace('apple', 'android'))

steps_= routes_['steps']for step insteps_:

path_= step['path']

point_lst= path_.split(';')print(point_lst)

f_re.writelines(['-----','\n']) #每一到拐角处用-----区分一下

for point inpoint_lst:

lng= point.split(',')[0]

lat= point.split(',')[1]

f_re.writelines([str(lng),',',str(lat),'\n'])

f_re.writelines(['end','\n'])

f_re.writelines(['time:',str(time_),'\n'])

f_re.writelines(['distance:',str(dis_),'\n'])

f_re.close()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值