模拟城市中文网

 找回密码
 入住
搜索
查看: 11584|回复: 18

[工具教程] 做了几天地图的经验总结(附我做的广州地图)

 关闭 [复制链接]
发表于 2006-12-23 14:47 | 显示全部楼层 |阅读模式
别人做的东西总没有自己做的好,比如地图取哪个范围、城市如何划分等等都需要融入个人爱好。看着网友们纷纷贴出自己用卫星地图做的地图,我也要研究一下这地图是怎么做的,想做哪就做哪,这样就不用求人了。下面是我这几天的一些心得:
<br />
<br />1) 高程数据的来源
<br />
<br />我在 Google 上面能找到的中国地区最精确的高程数据是 NASA 的 3 弧秒精度航天雷达地形数据(SRTM3,分辨率约 90 米),这些数据在 NASA 的 ftp 上面可以免费下载,并且其他一些网站也有转载提供。我发现最好的地方是从这里下:
<br /><a href="http://srtm.csi.cgiar.org/SELECTION/inputCoord.asp" target="_blank">http://srtm.csi.cgiar.org/SELECTION/inputCoord.asp</a>
<br />解压以后是 tiff 文件,估计用 photoshop 可以打开。(但是我没有装 photoshop,我用的是 Linux 下面的 pam pgm 系列命令以及 GIMP,处理时颇费了一番功夫。)tiff 图像中每个像素代表 3 弧秒 x 3 弧秒区域的平均高度,所以经纬范围 5 度 x 5 度的地形一共就有 6000 x 6000 个像素。像素值是 16 位有符号整数,单位应该是 1 米,例如:0 表示海平面高度,1 表示海拔 1 米,2 表示海拔 2 米……像素值 32768 是无效数据区,一般是海洋部分。(高度用有符号数表示这点有点讨厌,我用 pamarith 命令对最高位做了一个异或才把海平面转到 32768 位置。)
<br />
<br />另外两个数据来源是 NASA 的 ftp 和 USGS 的网站,但是我感觉没有上面我说的下载地址方便,前者解压以后不是 tiff 文件而是原始数据,后者老是连不上。
<br />NASA 的 ftp:
<br /><a href="ftp://e0srp01u.ecs.nasa.gov/" target="_blank">ftp://e0srp01u.ecs.nasa.gov/</a>
<br />在 version2 的 SRTM3 的 Eurasia 目录下可以找到原始的数据。
<br />USGS 网站:
<br /><a href="http://seamless.usgs.gov/" target="_blank">http://seamless.usgs.gov/</a>
<br />
<br />2) 图象处理的一些问题
<br />
<br />接下来的操作主要就是对图像进行缩放还有调整色阶以满足 Simcity 4 的要求。上面讲过,tiff 里面一个像素代表 3 弧秒,所以在纵向(经线方向)上,一个像素的长度是 6378km * 3.1416 / 180 / 60 / 60 * 3 = 92.76m,在横向(纬线方向)上,要乘以一个 cos 纬度,比如广州的纬度是 23 度,一个像素的长度就是 92.76m * cos(23 度) = 85.39m。在 Simcity 4 中一个像素是 16m。所以要把 tiff 横向拉伸 85.39 / 16 = 5.337 倍,纵向拉伸 92.76 / 16 = 5.798 倍。
<br />
<br />Simcity 4 的海平面像素值是 83,单位我估计大概是 3~4 米?所以大约要把 tiff 的色阶进行一定的平移和压缩,这个就自己看着办吧。其实对于山的部分,只要最后出来的形状差不多就行了,无所谓。关键是河流和海岸线的部分。很郁闷的是,我发现高程数据中河流的海拔都是 0,但是河流周围的陆地很多地方都是 0 甚至负数!可能是测量误差造成的,但是这样出来的地图估计会惨不忍睹。我采取的方法是将高程数据中海拔 0 以上的地方都调成 86 以上,再做一个 GIMP 中的“仅变亮”,使得整个地图灰度全是 86 以上,也就是包括河流海洋整个地图全是陆地。(为什么是 86 是因为 Simcity 4 中虽然理论上说 84 就是陆地,但是在导入地图的时候,很多 84 85 的地方都会被凹下去,变成了水,最保险的还是用 86。)最后再把河流勾画出来,这样河流的边缘会比较清晰漂亮一些。
<br />
<br />3) 勾画河流
<br />
<br />我发现高程数据里面的河流轮廓不是很明显,我采取的方法是到 map.google.com 将广州附近的卫星地图抓图抓下来,然后用 GIMP 选出河流的部分。(我发现将 Google 的地图分解成 HSV 然后选 S 分量来分辨河流比较不错。)然后把河流刻到我要做的地图上。Google 地图的河流很清晰,做出来效果还可以,如果能把河流的轮廓用 bizzer 曲线拟合一下就更漂亮了。刻的时候要注意河流的深度最好在 80 以下,否则河流太窄太浅很可能会被 Simcity 4 调整成陆地。总之 Simcity 4 中对水陆交界的地方的处理是最麻烦的,就是图像编辑的体力活。
<br />
<br />不知道大家是怎么做地图的?很希望大家介绍一下经验,尤其是如果有更精确的高程数据来源的话。
<br />
<br />另外,我还参考了本版置顶文章和 simtropolis 的一些文章:
<br /><a href="http://www.simtropolis.com/forum/categories.cfm?catid=141&forumid=1" target="_blank">http://www.simtropolis.com/forum/categories.cfm?......d=141&forumid=1</a>
<br />不过上面讲用 microdem,那个网站据说被黑过一次以后屏蔽了所有美国以外的连接,无法下载,而且有了 tiff 就用不着 microdem 了。
<br />
<br />补充:开始的时候我以为小城市是 1000 米,但是实际上应该是 1024 米,可是我附件的广州地图已经按 1000 米的拉伸做完了,就不改了。有点不完美,下载试用者请注意!:)
<br />
<br />补充两张抓图。画面上那几个水坑分别是荔湾湖、流花湖、麓湖、东山湖,流花湖右边那些小土包理论上说就是越秀山,但是印象中越秀山应该不止这么矮。误差,误差……<!--editpost--><br /><br /><br /><div><font class='editinfo'>此帖由 elephant 在 2007-02-09 20:42 进行编辑...</font></div><!--editpost1-->

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?入住

x
发表于 2007-1-4 15:53 | 显示全部楼层

做了几天地图的经验总结(附我做的广州地图)

不错,很有用
<br />
发表于 2007-1-5 15:58 | 显示全部楼层

做了几天地图的经验总结(附我做的广州地图)

我下了这个地图 读出来的是个平原  郁闷
 楼主| 发表于 2007-1-7 13:47 | 显示全部楼层

做了几天地图的经验总结(附我做的广州地图)

<!--quote-meng456+2007-01-05 15:58+pid217145--><div class='quotetop'>引用:( meng456 &#064; 2007&#045;01&#045;05 15:58 <a href="redirect.php?goto=findpost&p=217145">查看原帖</a> )</div><div class='quotemain'><!--quote1-->我下了这个地图 读出来的是个平原&nbsp; 郁闷<!--quote2--></div><!--quote3-->
<br />
<br />请试试把地图截小一些吧。这个广州地图是完全按照实际尺寸做的,广州市区的尺寸大约有三十公里,对模拟城市来说的确大了些。我的 Pentium-M 1.7G 512M 内存导入这个地图用了两小时左右。-_-! 导入城市的时候记得先关掉屏幕保护,我发现屏幕保护中途弹出来的话导入就出错了。
发表于 2007-1-7 14:01 | 显示全部楼层

做了几天地图的经验总结(附我做的广州地图)

好东西 顶上去 我一直在找专家的地图学习   谢谢
发表于 2007-2-2 22:09 | 显示全部楼层

做了几天地图的经验总结(附我做的广州地图)

很有趣。我想去看看。另外一件事,SC4的一格一格的那個每格是16米,這點是無庸置疑的被各種教學提及了N把次,但不曉得為何在中文網卻一再看到1000 / 64 = 15.625m的這種算法,這是錯的。
<br />
<br />一次說明白
<br />SC4每格=16米(而非15.625米)
<br />大地圖是每邊256格的正方形(每格 16米,所以每邊=4096米)
<br />中地圖是每邊128格的正方形(每格 16米,所以每邊=2048米)
<br />小地圖是每邊64格的正方形(每格16米,所以每邊=1024米)
<br />
<br />灰度圖,即是為每一個SC4的格子配一像素,再簡單不過,
<br />所以大地圖每邊256格的正方形,那灰度圖就是配每邊256像素的正方形,但他整體要+1,所以是257像素。
<br />
<br />若是四個大地圖,即每邊有兩個256格大地圖的長度組成的組合,
<br />其灰度圖的每邊長則是256+256+1個像素。
 楼主| 发表于 2007-2-2 22:19 | 显示全部楼层

做了几天地图的经验总结(附我做的广州地图)

<!--quote-天唐永thianz+2007-02-02 22:09+pid229456--><div class='quotetop'>引用:( 天唐永thianz &#064; 2007&#045;02&#045;02 22:09 <a href="redirect.php?goto=findpost&p=229456">查看原帖</a> )</div><div class='quotemain'><!--quote1-->很有趣。我想去看看。另外一件事,SC4的一格一格的那個每格是16米,這點是無庸置疑的被各種教學提及了N把次,但不曉得為何在中文網卻一再看到1000 / 64 = 15.625m的這種算法,這是錯的。
<br />一次說明白
<br />SC4每格=16米(而非15.625米)
<br />大地圖是每邊256格的正方形(每格 16米,所以每邊=4096米)
<br />中地圖是每邊128格的正方形(每格 16米,所以每邊=2048米)
<br />小地圖是每邊64格的正方形(每格16米,所以每邊=1024米)
<br />灰度圖,即是為每一個SC4的格子配一像素,再簡單不過,
<br />所以大地圖每邊256格的正方形,那灰度圖就是配每邊256像素的正方形,但他整體要+1,所以是257像素。
<br />若是四個大地圖,即每邊有兩個256格大地圖的長度組成的組合,
<br />其灰度圖的每邊長則是256+256+1個像素。<!--quote2--></div><!--quote3-->
<br />
<br />我现在也很肯定是 16 米了,毕竟对计算机来说这才是整数。原文已更正,不过地图就不可能重新拉伸了。
发表于 2007-2-2 22:49 | 显示全部楼层

做了几天地图的经验总结(附我做的广州地图)

:)請問樓主一下,我去NaSA和USGS看了下,但不知為何圖沒有顯示出來,不知道這兩個能取多大範圍的地圖,有比googleMap精細嗎?還是NASA是取比較大範圍的地圖?
<br />還有您說的高程數據的確很吸引人。但Nasa的圖有像googleMAP衛星圖一樣有人造建物例如道路嗎?
 楼主| 发表于 2007-2-3 09:09 | 显示全部楼层

做了几天地图的经验总结(附我做的广州地图)

<!--quote-天唐永thianz+2007-02-02 22:49+pid229511--><div class='quotetop'>引用:( 天唐永thianz &#064; 2007&#045;02&#045;02 22:49 <a href="redirect.php?goto=findpost&p=229511">查看原帖</a> )</div><div class='quotemain'><!--quote1-->:)請問樓主一下,我去NaSA和USGS看了下,但不知為何圖沒有顯示出來,不知道這兩個能取多大範圍的地圖,有比googleMap精細嗎?還是NASA是取比較大範圍的地圖?
<br />還有您說的高程數據的確很吸引人。但Nasa的圖有像googleMAP衛星圖一樣有人造建物例如道路嗎?<!--quote2--></div><!--quote3-->
<br />
<br />NASA 是高程数据的原始出处,其它网站的都是它的转载。但是我不推荐去 NASA 的 ftp 下,我推荐去
<br /><a href="http://srtm.csi.cgiar.org/SELECTION/inputCoord.asp" target="_blank">http://srtm.csi.cgiar.org/SELECTION/inputCoord.asp</a>
<br />这里下载,内容跟 NASA 是一样的,但是直接就是 tiff 文件,比较方便打开。USGS 上面目前只提供美国的数据,没有中国的,所以就不必去了。
<br />
<br />NASA 的高程数据,美国地区每象素是 1 弧秒,根据地球半径算出来大约是精确到 30 米。美国外的世界其它地区,精确度只有 3 弧秒,大约是 90 米,相比模拟城市的 16 米,大约粗糙了 6 倍,相比 Google 地图,好像也差一些。另外高程数据的河流部分很不明显,不符合模拟城市河床必须凹下去的要求。所以我觉得用高程数据做陆地和山,用 Google 地图做河比较好。
<br />
<br />高程数据上面也有人类的痕迹,主要表现在海岸的码头、堤坝方面,马路这些是不会看得出来的。我觉得如果做地图的时候把码头、堤坝去掉,还一个干净的世界就更好了。
发表于 2007-2-8 22:38 | 显示全部楼层

做了几天地图的经验总结(附我做的广州地图)

国内很多风景区 Google 地图的分辨率很差,(低于NASA)。所以我也来试试,如果好用一定多顶楼主几下。
发表于 2007-2-9 18:59 | 显示全部楼层

做了几天地图的经验总结(附我做的广州地图)

我忽略了一件事,就是google的分辦率不是一定的。比方重慶就很粗略,北京上海都很高。我一直在弄北京所以忘了這件事。
<br />
<br />今天去樓主介紹的網站下載了一下,不過tiff打開是灰色的,我不太會弄,看不到山地^^\\。
<br />
<br />山的地形就不適合google弄了,因為google弄出來的山只是陰暗大概而已,不是高程。
 楼主| 发表于 2007-2-9 20:18 | 显示全部楼层

做了几天地图的经验总结(附我做的广州地图)

<!--quote-天唐永thianz+2007-02-09 18:59+pid233214--><div class='quotetop'>引用:( 天唐永thianz &#064; 2007&#045;02&#045;09 18:59 <a href="redirect.php?goto=findpost&p=233214">查看原帖</a> )</div><div class='quotemain'><!--quote1-->我忽略了一件事,就是google的分辦率不是一定的。比方重慶就很粗略,北京上海都很高。我一直在弄北京所以忘了這件事。
<br />今天去樓主介紹的網站下載了一下,不過tiff打開是灰色的,我不太會弄,看不到山地^^\\。
<br />山的地形就不適合google弄了,因為google弄出來的山只是陰暗大概而已,不是高程。<!--quote2--></div><!--quote3-->
<br />
<br />这些 tiff 是 16 位深度的,不是普通的 0~255,必须要你的图像处理软件支持 16 位深度才行。GIMP 就不支持,所以我要用其他辅助工具。如果你有 photoshop 的话,那应该是没问题的。其他软件我不确定。但是因为一般地形的落差最多也就几百米,16 位色深 0~65536 映射到 0~255 范围,在物理显示器上显示出来,我想会是很小的一个对比度变化,所以你就看到一片灰,实际上数据都是在那的。我想你做一个色阶拉伸就好了,或者有没有增强对比度的查看方式。
发表于 2007-2-12 09:59 | 显示全部楼层

做了几天地图的经验总结(附我做的广州地图)

只能说两个字了:“拜谢”!
发表于 2007-2-13 22:59 | 显示全部楼层

做了几天地图的经验总结(附我做的广州地图)

谢谢楼主提供的网址,我一直在找广州地区的高程图,河流用交通图补充我觉得比较好,因为广州有不少河涌在google里面看不出来,交通图上有明确标示,在photoshop做个图层用蒙版加到高程图上,河流就显出来了。
发表于 2007-2-26 02:07 | 显示全部楼层

做了几天地图的经验总结(附我做的广州地图)

<p> 用photoshop,16bit先转换为256级灰度是没错,能看到地形变化了。</p><p>不过细节也少了很多。我要做的昆明地图,NASA地图很大——70M  :P ,包括了外围的高山峡谷,这么一弄,猜想昆明周边不高的山肯定一片平坦,怀疑昆明在那里都看不出来。更别说人工地形能留下来。</p><p>我也想过把地图裁小,把那些高山峡谷去掉再来压缩灰度深度,可惜NASA地图一片灰,昆明在何处根本就看不出来。唉!郁闷!!!<img src="http://www.simcity.cn/images/smiles/em002.GIF" border="0" onclick="javascript:window.open(this.src);" alt="" style="CURSOR: pointer" onload="javascript:if(this.width>screen.width-500)this.style.width=screen.width-500;" /></p><p>楼主还有什么妙计,帮个忙呀!这才是挑战呀!</p>
 楼主| 发表于 2007-2-26 09:49 | 显示全部楼层

做了几天地图的经验总结(附我做的广州地图)

你不能直接转成 256 啊,直接转的话 photoshop 会把 16 位中的低 8 位去掉,那相当于是除以 256,一般地形高度也就 1000 的变化幅度,除以 256 就平了。我想你要在 16 位的条件下先拉伸灰度,因为模拟城市高度单位是 3 米,所以你要拉大 256/3=85 倍,然后再转成 256 级灰度才对。
<br />
<br /><!--quote-SimZYi+2007-02-26 02:07+pid242990--><div class='quotetop'>引用:( SimZYi &#064; 2007&#045;02&#045;26 02:07 <a href="redirect.php?goto=findpost&p=242990">查看原帖</a> )</div><div class='quotemain'><!--quote1--> 用photoshop,16bit先转换为256级灰度是没错,能看到地形变化了。
<br />
<br />不过细节也少了很多。我要做的昆明地图,NASA地图很大——70M  :P ,包括了外围的高山峡谷,这么一弄,猜想昆明周边不高的山肯定一片平坦,怀疑昆明在那里都看不出来。更别说人工地形能留下来。
<br />
<br />我也想过把地图裁小,把那些高山峡谷去掉再来压缩灰度深度,可惜NASA地图一片灰,昆明在何处根本就看不出来。唉!郁闷!!!<img src="http://www.simcity.cn/images/smiles/em002.GIF" border="0" onclick="javascript:window.open(this.src);" alt="" style="CURSOR: pointer" onload="javascript:if(this.width>screen.width-500)this.style.width=screen.width-500;" />
<br />
<br />楼主还有什么妙计,帮个忙呀!这才是挑战呀!<!--quote2--></div><!--quote3-->
<br />
发表于 2007-3-1 01:53 | 显示全部楼层

做了几天地图的经验总结(附我做的广州地图)

有理!再试一次。只是有点小疑问—— “拉伸灰度”是否可理解为乘以n倍? 是线性的吗?
 楼主| 发表于 2007-3-1 09:07 | 显示全部楼层

做了几天地图的经验总结(附我做的广州地图)

就是乘一个比例,当然得是线性。除非你想实现些什么特殊效果故意不线性。
<br />
<br /><!--quote-SimZYi+2007-03-01 01:53+pid245211--><div class='quotetop'>引用:( SimZYi &#064; 2007&#045;03&#045;01 01:53 <a href="redirect.php?goto=findpost&p=245211">查看原帖</a> )</div><div class='quotemain'><!--quote1-->有理!再试一次。只是有点小疑问—— “拉伸灰度”是否可理解为乘以n倍? 是线性的吗?<!--quote2--></div><!--quote3-->
<br />
发表于 2007-4-9 18:40 | 显示全部楼层

做了几天地图的经验总结(附我做的广州地图)

黄埔军校那边做得不够,军事基地没有地方摆
您需要登录后才可以回帖 登录 | 入住

本版积分规则

小黑屋|手机版|模拟城市中文网

GMT+8, 2024-5-15 10:25 , Processed in 0.029289 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表