1 序:
卫星影像一直是获取矢量数据的一个重要来源,随着无人机的发展,倾斜摄影的普及,真正射影像也正逐步出现,提高了矢量化过程当中的数据准确性。关于正射影像和真正射影像的区别参考【正射影像与真正射影像】。
在矢量化的过程当中,很多人采用以卫星影像为底图,在CAD里进行矢量化的过程。在这个过程当中也遇到了一系列的问题,比如【CAD导入卫星底图后,底图变形】;【CAD里面量测的距离和在其他软件里面量测出的距离不一样】;【矢量化后的CAD图不能和GIS软件融合】。
这里以CAD2017,LocaSpaceViewer3.2.0为例介绍如何导入LocaSpaceViewer下载的卫星影像作为CAD的底图参考,进行矢量化,并把矢量化后的数据,重新导入和卫星影像叠加。上述问题的解决建立在几个基础之上,比如矢量化的目标坐标系统,数据源的投影方式和对应的坐标系统。
2 前提
CAD的环境,对CAD了解的人应该都清楚,cad主要用来做工业设计,包括二维和三维,都是平面直角坐标系,和三维空间坐标系。二维而言,就是一张大白纸,包含垂直的x,y轴。三维多了一个Z轴。
GIS里面的地图,都是经过了投影、变形得到了纸上的平面地图(不论何种投影方式都有对于的形变【或角度、或距离、或面积】)。所以GIS里的地图都会包含一个投影参数和坐标系统。
CAD其自身并不包含投影相关的信息。所以和GIS的交互都是小区域小范围的无限贴合。
3 影像数据下载
数据下载及网络地图发布参考【如何发布瓦片地图服务】
这里下载的地图如下:
下载后的成果如下:
如果后期要导入cad作为底图,建议记录下当前的下载级别,当然在数据下载成果里你也可以直接看到。
4 影像数据导入CAD作为底图进行矢量化
数据导入并不难,直接插入光栅图就可以了,如果是要做矢量化,那肯定需要知道参考图左下角的坐标,以及参考图的缩放比例
这里介绍两种方式来做矢量化:
4.1 CAD文件创建:
导入栅格图像,和自身创建cad文件时所选的模板也有一定的关系,这里看下CAD新建文件的过程。
不同的模板,具有不同的单位、以及相关属性,目的是为了方便工程人员快速制图。
4.2 CAD2017以经纬度坐标的形式进行矢量化
此处通过点击CAD2017版本的【+】图标创建一个CAD文件,相当于用的是cad的默认模板。如图;
对于这个模板不确定的话,就先做个测试,绘制一条线,坐标是0,0;1,0;100,100;0,0
然后倒入栅格图,这里采用直接拖拽的方法。
这里输入0,0
这里输入默认的1.0
这里输入0
可以看到长边尺寸刚好是1.
这不是我们想要的效果。
我们需要在CAD里能正确的获得经纬度信息。修改参数如下:
原点:116.1906968329,39.7961331994
缩放参数:(116.5477678762-116.1906968329)=0.3570710433
旋转参数:0
效果如下:
删除原来用来测试的以坐标形式绘制的线,保存为dxf格式。
我们直接使用LocaSpaceViewer打开刚才绘制的CAD文件,调整图层属性以大红色方式显示如下:
至此已经完成了第一种根据影像数据进行矢量化并在GIS软件当中进行交互。
4.3 CAD2017以米为单位对影像进行矢量化
真实项目当中或者矢量数据的使用过程当中更多的是以米为单位存在的,这里介绍如何以米为单位对影像进行矢量化。
首先需要确认的就是经纬度格式的坐标和以米为单位的坐标系的转换。涉及两个概念,投影坐标系(球面)和地理坐标系(平面)。
LocaSpaceViewer下载的地图是经纬度投影(天地图的命名方法),才用的是经纬度直投的墨卡托投影得到的结果。
参考:【http://blog.3snews.net/space.php?do=blog&id=28181&uid=47188&bsh_bid=522743596】
这样的投影本身就存在横向和纵向比例不一致的问题,全球范围的效果图:
这就解释了大家根据这样的影像进行矢量化后的变形问题,总感觉南北方向被压扁了(当然低维度地区看起来会好很多)。
更多相关知识请参考另一篇文章【投影和坐标系统那点事】
这里不考虑投影带和地方投影的问题直接以
由于赤道半径为6378137米,则赤道周长为2*PI*r = 40075016.6855784(原文是20037508.3427892,应该是错误的),因此X轴的取值范围:[-20037508.3427892,20037508.3427892]。当纬度φ接近两极,即90°时,Y值趋向于无穷。因此通常把Y轴的取值范围也限定在[-20037508.3427892,20037508.3427892]之间。因此在墨卡托投影坐标系(米)下的坐标范围是:最小为(-20037508.3427892, -20037508.3427892 )到最大 坐标为(20037508.3427892, 20037508.3427892)。
接下来进行换算:
底图的插入点:116.1906968329,39.7961331994转换为墨卡托平面坐标:12934289.20635,4809006.98149
缩放比例:14级的地图分辨率*底图的长边尺寸(像素值)= 9.55463*4161=39756.81543
选择参数:0
加载到cad后,我们对底图的边界以及一条地铁线进行矢量化如图:
保存为0327-mector.dxf,然后配置一个prj文件给它,让它带上投影信息,prj文件信息如下:
PROJCS["World_Mercator",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Mercator"],PARAMETER["False_Easting",0],PARAMETER["False_Northing",0],PARAMETER["Central_Meridian",0],PARAMETER["standard_parallel_1",0],UNIT["Meter",1]]
我们同样存储为名称为0327-mector.prj
然后用LocaSpaceViewer直接加载效果如下:
这里发现范围的左下角是非常准的,但往上(维度方向变形严重)。原因这里我们做了粗暴处理,x方向的缩放没有问题,但正如上面的全球范围图显示效果看,y方向(维度方向)不应该采用同样的缩放比例,因为这种投影下的地图是一个矩形,不是一个正方形。
大家可以试一下调整y方向的缩放比例为x方向缩放比例的一半进行尝试。
4.4 引出的问题:
在CAD当中测距和在gis软件当中测距的结果不一致?
CAD当中矢量化后x,y方向的显示效果不一致?
我倾斜摄影的结果能和1:500的CAD图纸套和么?
建议参考文档当中给出的链接理解其原理,也欢迎留言讨论【问题不说不明,不讨论不清】
文档里所使用的数据,和绘制的结果都发放在百度云盘里供大家测试【链接:http://pan.baidu.com/s/1c2b24BA 密码:uytu】
5 GIS软件打开CAD
上述矢量化的过程中,已经介绍了使用LocaSpaceViewer打开CAD文件(经纬度格式)的过程,除了LocaSpaceViewer还有很多GIS软件,如ArcGIS,GlobalMapper,superMap等等。所有这些GIS软件都支持CAD文件的加载。一个不变的共性就是CAD是平面图纸,本身不包含投影信息。那如何让CAD文件具备投影信息呢?
投影信息的编写
总结:
影像数据导入到CAD唯一需要确定的就是影像数据导入后的坐标位置,以及缩放参数(旋转参数一般为0)。
GIS加载矢量数据,(以经纬度为坐标的直接加载),非经纬度格式的要加上投影信息,投影信息需要自己配置。
未完待续...
以上内容均是工作当中根据接触到的软件及自己在公司的软件开发过程当中都的相关心得体会,对各个软件没有褒贬态度。
欢迎留言交流。对LocaSpaceViewer的使用存在问题欢迎加入QQ交流群:623126674