UE4根据真实地图来生成行走道路(一)
起因:前不久看美术在UE4地图里面拉Spline线来作为演示的步行道路,每两个不同地点就要按照地图道路来拉出演示线,所以我突发奇想,能不能用现有的一些地图API输入经纬度,来给我生成行走道路(百度地图,高德地图),后面我去看了一下,发现这个方法可行,现在我们开始行动吧。
API选择:现在很多地图APP都提供了API(谷歌,百度,高德),支持的语言也多,但都需要注册,注册这些API的Key我就不演示了,网上有很多这方面的教程,我选用的是百度API,调用API数据使用的是Python,当然你也可以使用其他方法,使用编写Python的IDE是Jupyter Notebook ,用这个编写好处我就不说了,你也可以用其他IDE,现在开始我们的入坑之路吧。
首先我们打开百度地图API中德WebApi服务中的轻量级路线规划,最开始编译的时候可以选取一个API开始,后面再进行增添
你点击一个,你会发现必须输入哪些参数,和可选哪些参数,首先必须输入的是开发者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库,该库基本方法网上有很多,可自行查找,我们只需要他来爬取数据,后面再把数据给解析出来:
import requests ... 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 in steps_: path_ = step['path'] point_lst = path_.split(';') print(point_lst) f_re.writelines(['-----','\n']) #每一到拐角处用-----区分一下 for point in point_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代码:
import requests 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 in steps_: path_ = step['path'] point_lst = path_.split(';') print(point_lst) f_re.writelines(['-----','\n']) #每一到拐角处用-----区分一下 for point in point_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()
原文地址:https://www.cnblogs.com/monocular/p/11557544.html
- Python标准库06 子进程 (subprocess包)
- 摩拜、美团也伸手共享汽车拉!众多品牌里面,这三家最牛!
- Android Studio快捷键每日一练(2)
- Linux进程间通信
- Android Studio快捷键每日一练(1)
- Android开发中的全屏背景显示方案
- Android中的FragmentManager的问题
- Premiere Pro & After Effects插件开发调试方法
- RegQueryValueEx正确使用方法
- 区块链+医疗五类应用前景广阔,英美已有企业试水
- Linux进程关系
- 基于OBS的插件开发总结
- Linux从程序到进程
- asp.net 解码gb2312下urlencode后的字符串
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android 蓝牙开发(扫描设备、绑定、解绑)
- Python 微信机器人:调用电脑摄像头时时监控功能实现演示,调用电脑摄像头进行拍照并保存。
- Android 天气APP(十九)更换新版API接口(更高、更快、更强)
- Android 天气APP(二十)增加欢迎页及白屏黑屏处理、展示世界国家/地区的城市数据
- Android 天气APP(二十二)改动些许UI、增加更多空气质量数据和生活建议数据展示
- Android 自定义View 之 RectF用法详解
- Android 天气APP(二十五)地图天气(下)嵌套滑动布局渲染天气数据
- Android 天气APP(二十六)增加自动更新(检查版本、通知栏下载、自动安装)
- Android 天气APP(二十七)增加地图天气的逐小时天气、太阳和月亮数据
- Android 天气APP(二十八)地图搜索定位
- DevEco Studio项目构建讲解、编写页面、布局介绍、页面跳转
- Android 天气APP(二十九)壁纸设置、图片查看、图片保存
- Chrome 私人珍藏-stylus插件实现个性化百度界面定制
- Python 基础篇-简单的异常捕获
- Python 技巧篇-让我的程序暂停一下