第068封“情书”:耶路撒冷Assembling a 3DScanOfTheEarth可视化地图数据
第068封“情书”:耶路撒冷Assembling a 3DScanOfTheEarth可视化地图数据
每一天都是神的恩赐,请不要辜负。
▉ 热情在慢慢消退,逐渐冷却,惰性的冰川大兵压境,步步紧逼。— 每天翻译一篇教程,这就是我写给houdini的情书。【首发于同名公众号:“致houdini的情书”】<Entagma>Houdini 2018
█ “冰临城下”
前言不搭后语
冰冻三尺非一日之寒:逃避和放弃永远是最容易的选择!放弃一件事没什么,值得警惕的是,养成了放弃的习惯!
本节内容如何可视化地图数据&地理数据
本节要实现效果…
今天是42岁第043天周五
68这是写给Houdini的第068封“情书”
我是geo流程图
我是vex
04 置换海拔数据
//-- 1a 引入海拔属性
//-- 1b alt属性值在-1~1之间,乘32767把grid转换成米
//-- 1c 再加个比例因子,依据下载的Tile的经纬度计算tile的边缘长度
//但是因为地球表面有扭曲,这里乘引入的RSTM海拔信息,添加一个浮动滑块amp振幅
float offset = f@alt32767.0chf(“amp”);
//-- 3 判断偏移,高于1万的移入一个组,然后y轴=0
if(offset>30.0){
@group_error = 1;
offset=0;
v@Cd = {1,0,0};
f@alt = 0;
}
//-- 2 置换到y轴上
v@P.y += offset;
06 模糊“出错点”再次置换
float offset = f@alt32767.0chf(“amp”);
v@P.y += offset;
07 为海拔属性设置的经纬度坐标系
//-- 1 引入经纬度
//-- 1a 因为输入的面有些锯齿边缘所以不是整数;但经纬度是整数,所以四舍五入
float max_lat = rint(detail(1,“max_lat”));
float min_lat = rint(detail(1,“min_lat”));
float max_lon = rint(detail(1,“max_lon”));
float min_lon = rint(detail(1,“min_lon”));
//-- 2 通过相对坐标(0,0)到对角(1,1)映射,经纬度的最大最小值
float lon = fit01(v@uv.x,min_lon,max_lon);
float lat = fit01(v@uv.y,min_lat,max_lat);
//-- 3 创建矢量坐标
vector latlon = set(lat,lon,0.0);
//-- 4 创建属性
v@latlon = latlon;
09 osm的经纬坐标系匹配成alt海拔属性的经纬坐标系
//–osm的经纬坐标系匹配给alt海拔属性的latlon坐标系
//-- 1 同样引入osm的最大最小经纬度;
// float max_lat = rint(detail(0,“max_lat”));
// float min_lat = rint(detail(0,“min_lat”));
// float max_lon = rint(detail(0,“max_lon”));
// float min_lon = rint(detail(0,“min_lon”));
//-- 2 将经纬度转成矢量坐标系;
vector osm_latlon = set(f@latitude,f@longitude,0.0);
//-- 3 使用uvsample在各自的经纬度坐标上采样网格的位置,
//从1接口-想要匹配的位置采样,还有1上的lanlon属性;最后采样应用在0接口-的位置上
v@P = uvsample(1,“P”,“latlon”,osm_latlon);
首先
制作步骤
○
小节提要
本节将学习:
01)获得&转换地图数据:
1 获取开放地图数据
2 转换获得的数据
02)海拔属性置换&纠正:
1 引入海拔属性进行置换
2 纠正出现错误的点。
03)引入开放地图数据:
1 通过uv坐标映射范围成最大最小经度纬度
2 osm的经纬度采样“海拔经纬度坐标属性”
接下来
正式制作使用软件:houdini17.5.229
01 获得&转换地图数据
1获取开放地图数据
准备工作
首先)更新“游戏工具”标签
游戏标签增加了很多工具
○ 具体操作 ○
任务1) 首先需要“开放地图数据”
到“开放地图网站”下载有海拔信息的地图数据
a)进入开放地图网站: openstreetmap.org/export
b)左侧点击“手动选择不同的区域”
任务2)然后需要“海拔数据”
问题)这个网站没有此数据
❖解决方案)
A)另一网站获取文件(http://dwtkns.com/srtm30m/)
关于数据:SRTMHGT文件
1)Shuttle Radar Topography Mission:航天飞机雷达地形任务。
2)点击黄色瓷砖下载相应的数据。
3)Tiles(每块瓷砖)是从NASA服务器下载的纬度/经度投影(EPSG:4326)中以1弧秒分辨率(3601x3601像素)压缩的SRTMHGT文件。
B)找到某个区域的“左下角,右上角”“坐标”
执行)
A)下载文件:并且知道了“左下角”坐标。
1)点击一块Tile,首先注册一下NASA。点击才能“下载”
B)还有显示它的“左下角坐标”,但是没有“右上角坐标”
(这里是:左下角坐标N39W032)
问题) 没有“右上角坐标”,
分析)可以参考一下旁边有连续连接Tile的坐标规律,比如这个四个Tile区域;
❖解决方案)可以推断出“右上角坐标”N40W031
任务3)回到“开放地图”网站找到对应区域
执行)
1)输入对应的左下角=N39W032,右上角坐标N40W031:
2)点击下载API:文件名叫map
3)重命名azores.osm(亚速尔群岛)
2 转换获得的数据
○ 两个文件○
1).hgt文件。2)osm文件
○ 具体操作 ○
解决方案)
❖ 1)把.hgt改成 .raw格式。
❖ 2)用ps打开。
测试)
a)图像模式转成32位。
b)使用曝光命令调节,白色就是高度信息
3)保存tif格式。
02 海拔属性置换&纠正
1 引入海拔属性进行置换
○ 节点 ○
○ 具体操作 ○
1)geo内建立sop_osm_import节点
(osm=open street map开放地图)
1-1)导入osm
需求)几何表格里有点对应的“经度”“纬度”。 我们需要经纬度与SRTMHGT文件进行匹配。
执行)
2)建立分辨率36013601的grid:size=1010
3)引入“海拔贴图”//azros.tif;//输出属性alt(altitude海拔)
(现在grid每个点上都由alt高度属性)
需求)将这些数据转换成高度
执行)
4)pointwrangle:
//-- 1a 引入海拔属性
//-- 1b alt属性值在-1~1之间,乘32767把grid转换成米
//-- 1c 再加个比例因子,依据下载的Tile的经纬度计算tile的边缘长度 但是因为地球表面有扭曲,这里乘引入的RSTM海拔信息,添加一个浮动滑块amp振幅
float offset = f@alt32767.0chf(“amp”);
//-- 2 置换到y轴上
v@P.y += offset;
问题1)产生一个非常高的海拔
解决方案)改变“比例因子amp”
amp=0.001
2 纠正出现错误的点
○ 节点 ○
○ 具体操作 ○
问题2)残留一些细竖线;这些就是ps中的那些白点
改进)
1) 判断偏移,高于30(这个数值参考几何图表看y轴的高度,作者的是一万,我的是高于30)的移入一个组,设置偏移=0
if(offset>30.0){
@group_error = 1;
offset=0;
}
问题2a)效果仍然有问题
解决方案)在attribfrommap1过滤设置中
问题2b)还是有些点要纠正
测试)将error组中的那些点设置成红色
v@Cd= {1,0,0};
这些要纠正的点,需要跟周围融合一下
解决方案)
通过模糊出错点的模糊属性,以适应整个地形
1)增加attributblur节点
2)新增加pointwrangle,条件判断取消
float offset = f@alt32767.0chf(“amp”);
v@P.y += offset;
问题2c) 还是有点没有纠正过来
分析)因为模糊之前,这些要纠正的点alt属性也应该=0
float offset = f@alt32767.0chf(“amp”);
if(offset>300.0){
@group_error = 1;
offset=0;
//v@Cd = {1,0,0};
f@alt = 0;
}
//v@P.y += offset;
通过过滤和修正“海拔属性alt”引入到grid上
03 引入开放地图数据
1 通过uv坐标映射范围成最大最小经度纬度
○ 具体操作 ○
02)降低一下grid分辨率:360*360
03)pointwragle3
问题1)grid上需要“经度”“纬度”属性
分析)
sop_osm_import节点的几何图表
1)最大最小的“经度lontitude”“纬度 latitude”
2)理论上相当于下载的Tile的坐标。
3)引入“经纬度”为grid的点生成坐标。
执行)
1)sop_osm_import连接pointwrangle3的“槽2”
2)vex代码
//-- 1 引入经纬度
//-- 1a 因为输入的面有些锯齿边缘所以不是整数;但经纬度是整数,所以四舍五入
float max_lat = rint(detail(1,“max_lat”));
float min_lat = rint(detail(1,“min_lat”));
float max_lon = rint(detail(1,“max_lon”));
float min_lon = rint(detail(1,“min_lon”));
问题2)建uv坐标映射成纬度最大最小值建坐标属性
解决方案)
1)使用uv Texture 产生uv坐标属性
现在有了uv相对坐标属性
2)将uv坐标范围映射成“经纬度最小最大范围”
float lon = fit01(v@uv.y,min_lon,max_lon);
float lat = fit01(v@uv.x,min_lat,max_lat);
3)创建经纬度坐标属性
//-- 创建矢量变量坐标
vector latlon = set(lat,lon,0.0);
//-- 创建经纬度属性
v@latlon = latlon;
2 osm的经纬度采样“海拔经纬度坐标属性”
执行)
1)pointwrangle4:
a)“槽1”连接sop_osm_import1b)"槽2"连接“pointwrangle3”
b) vex代码:
//-- 将经纬度转成矢量坐标系;
vector osm_latlon = set(f@latitude,f@longitude,0.0);
//-- 3 使用uvsample在各自的经纬度坐标上采样网格的位置,
//从1接口-想要匹配的位置采样,还有1上的lanlon属性;最后采样应用在0接口-的位置上
v@P = uvsample(1,“P”,“latlon”,osm_latlon);
可视化地图数据&地理数据
今天就到这里,收功
教程翻译自entagma的网络教程下一节:20180924 Crochet - Blending between Delaunay and Voronoi
第068封“情书”:耶路撒冷Assembling a 3DScanOfTheEarth可视化地图数据相关推荐
- 蝙蝠侠一键改udid软件_对于您的第一个HTML代码,让我们帮助蝙蝠侠写一封情书...
蝙蝠侠一键改udid软件 by Kunal 由Kunal 对于您的第一个HTML代码,让我们帮助蝙蝠侠写一封情书 (For your first HTML code, let's help Batma ...
- 第075封“情书”:百撕不得其解Tearing Cloth<Entagma>Houdini 2018
▉通往自由的路上充满了撕扯狡诈,与阴谋,难道"卑鄙是卑鄙者者的通行证"是真的?- 每天翻译一篇教程,这就是我写给houdini的情书.[首发于同名公众号:"致houdin ...
- 第077封“情书”:弯弯绕<Entagma>Houdini 2018
▉ 我命硬学不会弯腰- 每天翻译一篇教程,这就是我写给houdini的情书.[首发于同名公众号:"致houdini的情书"] █命运,就算你想尽一切办法,也休想压弯我追求理想的执着 ...
- 《致盛夏的七封情书》 ------------ 第一篇《晨曦》
写了一个短篇小说,<致盛夏的七封情书>,一共七篇,采用拼凑式的记述和多位不间断的场景转换,讲一个小小的爱情故事,不精美,也不感人,纯粹给目前毫无道理的无望生活找一点存在感. 第一篇< ...
- 第023封“情书”: 草书 Point Advection点的平流染色线
▉又一波韭菜长好了,该收割了,各位庄辛苦了! 像一棵 海草 海草随波飘摇,海草海草海草,随风飘摇!海草 海草浪花里舞蹈,海草 海草管它骇浪惊涛我有我乐逍遥,人海啊 茫茫啊随波逐流浮浮沉沉. 庄:韭菜的 ...
- 从零学编程1-写一封情书
一哥们闲暇之余想学编程,博主作为"会装系统的人"自然脱不了干系,这哥们名字叫鹰,初中文化,对于电脑的认识属于只会上网听歌看电影,差点忘了他强调过CF玩的不错. 那就教起吧. 主人公 ...
- 阿狸给桃子的999封情书(123封)
阿狸给桃子的999封情书(123封) <第一封> 我爱你,不是因为你是一个怎样的人,而是因为我喜欢与你在一起时的感觉. <第二封> 我不生气,因为身体是自己的:我不伤心,因为心 ...
- 第060封“情书”:相对论 Signed Distance Outlines Houdini
第060封"情书":相对论 20180507 Quicktip- Signed Distance Outlines<Entagma>Houdini 2018 ▉ 中国 ...
- 第079封“情书”:“I服了You”Cloth Solver From Scratch<Entagma>Houdini 2018
▉ 我从来不会对任何人任何事投降,直到遇见你.- 每天翻译一篇教程,这就是我写给houdini的情书.[首发于同名公众号:"致houdini的情书"] █城头变幻大王旗:曾经面对刁 ...
最新文章
- sqlalchemy(一)基本操作
- Android 开发包括哪些方面?如何提升?
- IBC+Palette 实现屏幕内容编码优化
- 得到classpath和当前类的绝对路径的一些方法
- 黑客入侵交警计算机系统删交通违法记录牟利
- java强制gc_java应用性能调优之详解System的gc垃圾回收方法
- eclipse中快捷搜索文件快捷键
- html跟随鼠标事件,HTML5深入学习之鼠标跟随,拖拽事件
- ipa在线安装搭建_iOS 可以永久安装IPA软件了,前提是……
- 解决阿里云不能使用yum问题
- cf计算机丢失msvcp100,Win7丢失MSVCP100.dll导致程序无法启动怎们办
- c语言编程绘制空间螺旋线,在UG中绘制变螺距螺旋线的方法
- Android Studio 部分查找快捷键
- 计算机更新一直在57转怎么办,win10系统更新到57%出现死机的原因和解决方法
- Python3使用Xpath解析网易云音乐歌手页面
- FFmpeg自学入门笔记
- 查询表名所在数据库名
- 面向对象设计原则-03依赖倒置原则
- 项目六总结 创建与使用存储过程
- 阅读软件汇-EPUB专版
热门文章
- django视频教程
- Tom小猫,让我看清你的五脏六腑1
- 智能合约通证化与 Web3 革命(1):为何智能合约没能成为区块链的杀手级应用?...
- 看来不止一次的电影(电影经典给你好看准备下载下来,免得以后收费了)
- Sorry, but pdflatex did not succeed
- available: expected single matching bean but found 2
- 《算法图解》学习笔记(十一):十种经典的算法与数据结构
- 提高spark任务稳定性的解决方案及Blacklist 机制说明解释
- 灰色的心情,贴几首我们一起唱的歌吧
- 2020年中国智能物联网(AIoT)白皮书