体验地址:https://pass.itdos.net/mapus?file=1
1 总体思路
(1) cad文件dwg格式转为dxf 2000版本保存
(2) 如果cad里坐标系前面省略了 比如38/37 等 带号,需要在cad里将图形向右方水平移动38000000/37000000(m,@38000000,0)。
(3) 为了保证dxf文件的干净,将cad中需要的图元复制,然后新建一个cad文件,粘贴到原坐标,再另存为dxf文件(2004版?)
(4) 尽量做成一个连续的pl线(ACAD命令:pe——m),不要一个个线段,因为后者每根都作为一个独立的layer,配上一个独立的名称,很多,也不好整体移动(如果坐标有偏差的话)。
(5) 所有线的线宽要设置为0.00 mm,特性表里的全局宽度同时也要设置为0。
(6) 支持圆(AcDbEntity:AcDbCircle)、多段线(AcDbEntity:AcDbPolyline)、点(marker、point)、矩形(作为多段线)、面域(polygon,首、尾坐标相等则作为面域)、文字(point、text)
方法A:用QGIS软件导入dxf文件,转换坐标,再用QGIS软件里的插件bulk vector export导出为geojson文件
方法B:用91地图等导入dxf,匹配好位置,再导出为xml文件,用mapus里的xml转geojson文件,转成geojson文件
mapus导入geojson文件
下面是方法A,方法B请点击上面链接。
2 下载和安装QGIS软件
3 QGIS坐标转换
这个是关键。
首先理解原理。
3.1 综述——可跳过
可直接跳过,看3.3
转换CAD图形坐标记住口诀:
首先设定QGIS工程坐标为WGS84的经纬度坐标系。
将dxf文件拖进去,dxf是什么坐标系就设置属性是什么坐标系。可以在属性里改,也可以设置图层CRS。比如dxf无非是2000大地、1954北京、1980西安。
地方坐标系或自定义的坐标系,有另外文字说明。比如用excel。
问题,如果dxf坐标系选择不对,就不会出现图形。同样的坐标系,有111°带(CM 111E),也有37(zone 37)开头的横坐标。因为CAD里用平面直角坐标系,所以一定是选类似37,即横坐标开头的数字。
坐标参照系 | 官方ID |
---|---|
CGCS2000/3-degree Gauss-Kruger zone 37 | EPSG:4525 |
Xian 1980/3-degree Gauss-Kruger zone 37 | EPSG:2361 |
Beijing 1954/3-degree Gauss-Kruger zone 37 | EPSG:2413 |
不要选下面的这些
坐标参照系 | 官方ID |
---|---|
Xian 1980/3-degree Gauss-Kruger CM 111E | EPSG:2382 |
WGS 84 | EPSG:4326 |
CGCS2000/Gauss-Kruger CM 111E | EPSG:4508 |
CGCS2000/3-degree Gauss-Kruger CM 111E | EPSG:4546 |
Beiiing 1954/3-degree Gauss-Kruger CM 114E | EPSG:2435 |
China Geodetic Coordinate System2000 | EPSG:4479 |
Xian 1980 | EPSG:4610 |
Beijing 1954 | EPSG:4214 |
参考网址
https://blog.csdn.net/weixin_39755003/article/details/111360925
https://liubf.com/2020/12/23/qgis%e4%b8%ad%e5%9d%90%e6%a0%87%e8%bd%ac%e6%8d%a2/
https://www.cnblogs.com/lanren567/p/16385287.html
https://www.bilibili.com/video/av513963733/
https://blog.csdn.net/m0_37251750/article/details/95479331
以上转换2000坐标转经纬度是非常准确的。
如果出现偏差,
方法A:要借助一个中间参数,比如91地图中的方法。
方法B:导入mapus后,直接拖动移动即可。所以要求尽量是连续的pl线,方便整体移动。
3.2 概念——可跳过
可直接跳过,看3.3
大地坐标(地理坐标系)
WGS84:EPSG 4326 (经纬度)
CGS2000: EPSG 4490 (经纬度)
CGS2000: EPSG 4479 (米)
北京1954: EPSG:4241( 经纬度 )
西安1980:EPSG: 4610 ( 经纬度 )
投影坐标(平面坐标系)
WEB墨卡托: EPSG 3857 (米) (WGS84地理坐标系经纬度表示+墨卡托投影方式表达)
地方投影坐标: EPSG 4547 / EPSG 4548 … (米) (CGS2000+地方投影)
各地方坐标参照 http://epsg.io/
坐标系统可分为地理坐标与投影坐标。地理坐标系统(Geographic coordinate system)又可称大地坐标系统。是利用三度空间的球面来定义地球上的空间位置。以经纬度之度(゚)分(′)秒(″)来表示地球上任一点的绝对位置。东西向的分度线称为纬线,以赤道为 0 度起点。南北向的分度线称经线,以通过英国格林威治天文台之经线为本初子午线作为 0 度起点,往东称为东经,往西为西经。(东经为正、西经为负;北纬为正,南纬为负;E 表东经、W 表西经、N 表北纬、S 表南纬)
图:地理坐标之经度与纬度图
投影坐标(Projection Coordinate System)即将三度空间的地理坐标经过投影的方式,转换成二度空间的平面坐标系统。由于是由地理坐标转换成平面,因此包含了参考椭球体、大地基准及地图投影方式。目前全球最通用的坐标系统,为国际横麦(墨)卡托(Universal Transverse Mercator Projection Grid System)投影坐标系统。
图:横麦卡托投影图
开源与成熟商业的瓦片地图服务(TMS或WMTS服务标准-瓦片命名不同而已),都有如下共同的特性,基本成为了标准:
(1) 坐标系:WGS84
(2) 投影:墨卡托投影(Marcator,正轴等角圆柱投影)
中国的坐标系
1954北京坐标系Beijing 1954
1980西安坐标系Xian 1980
2000大地坐标系CGCS2000
地方坐标系
3.3 准备工作
1)设置界面为中文(可选)
设置——选项——通用——本地化语言
2)添加插件
插件——管理并安装插件——bulkvectorexport
安装完左上角工具条第三行出现工具条
3)设置工程属性
设置工程属性中坐标系为WGS84地理坐标系(关键1),这个就是你导出的坐标样子,这里是经纬度,那么导出的就是经纬度。
把arcgis遥感图作为地图,操作方法见 4 QGIS其他操作
4)设置dxf的坐标系和多段线及线宽
要求:
将CAD中有用的选中拷贝到新建图中(保证干净)
1.坐标:dxf在cad里的平面坐标系,是完整的,不要省略38/37等带号,如果省略了,请向右水平移动37000000/38000000
广东西部是37(对应东经111°带),中部是38,东部是39带
新疆是29带
2.多段线:dxf文件尽量连接成一条或多条连续的pl多段线。目的是为了减少图元数量——pe命令,(输入m,意思是只要是相连的多段线,都自动各自连上,支持多个多段线)再输入j,关闭其他图层,全选,那么能合并的都会自动合并。
3.线宽:全选——必须设置线宽为0.00 mm,全局宽度为0!!注意,圆以及一些软件生成的图形是无法设置宽度的,所以全选里如果包含了圆和这些图形,则不出现这个全局设置项的。必须关闭它们的图层。
将dxf文件直接拖到图层里,点击按钮 添加图层 即可
(关键2)拖进来的看不见,必须设置好坐标才行。
右键选中图层——设置CRS坐标系统,这里就是cad里所使用的平面坐标系了。所谓的投影坐标系,注意横坐标前面的2个数字,是37的话,就在下图中选对应的zone37。设置完图形会消失,点第5个放大镜图标(缩放到图层)即可显示。
选择CAD图纸对应的坐标系,比如CGCS2000大地坐标系……
其实上述操作后,导入的dxf文件同时具备两种坐标数字,一个是经纬度,一个是投影坐标。鼠标右键在图上点击就可以查看不同格式的坐标。
4 导出geojson格式文件
再次打开 工程——工程属性——选择坐标是WGS84,看到屏幕下方显示的坐标系是经纬度
在工具条左上角第三行,看到
选择左侧一个图层,点击bulkvectorexport工具,选择导出所在文件夹即可,不需要写名字,名字默认是图层的名字,注意output选geojson。,并勾选 project才行哦。
导出的geojson文件,用文本编辑器打开后,确认里面的坐标系是经纬度。类似[ 113.190292549003601, 22.860978704533771, 0.0 ],
5 导入mapus
先用文本工具打开geojson文件,确认"name": "工程名称"
,导入后的图元以这里的名字加上下面的features里的图层Layer名来命名。
导入前先在地图下方选择颜色,如果不选,默认是蓝色。
稍微解释一下geojson文件的格式,json其实就是一个目前普遍流行的树状文件格式,逐渐取代xml格式。features后是中括号,表示数组的意思,中括号里面第一级的大括号会有一个或多个并列,用逗号隔开,每个一级大括号里表示一段多段线的所有信息,我们只要看属性properties和几何geometry即可,properties里留意Layer和description,开头字母分别是大写和小写,我们在qgis里导出的geojson文件大概率是没有这个properties的,所以把下面的拷贝过去修改。注意json格式有严格要求,不能少了字段后的逗号和后大括号以及后大括号后面的逗号。几何geometry里看看coordinates是不是经纬度即可,东经在前和北纬在后。
{
"type": "FeatureCollection",
"name": "北江引水——这里是工程名称",
"features": [
{
"type": "Feature",
"properties":
{
"Layer": "主干线——这里是图层1名称",
"Name": "主干线——这里是图层1名称",
"description": "这里是特性描述,比如流量,洞径等",
"PaperSpace": null,
"SubClasses": "AcDbEntity:AcDb3dPolyline",
"Linetype": "Continuous",
"EntityHandle": "D4",
"Text": null
},
"geometry":
{
"type": "Point",
"coordinates": [112.59549, 23.89696]
}
},
{
"type": "Feature",
"properties":
{
"Layer": "分干线——这里是图层2名称",
"PaperSpace": null,
"SubClasses": "AcDbEntity:AcDb3dPolyline",
"Linetype": "Continuous",
"EntityHandle": "D4",
"Text": null
},
"geometry":
{
"type": "LineString",
"coordinates": [
[113.151798, 23.66315],
[113.151801, 23.66311]
]
}
}]
}
找到import geojson,选择刚刚在QGIS中导出的geojson文件即可。导入后可以编辑左侧导航栏里的名称和描述。
导入的鉴江供水工程(北京坐标系)效果——还是有些偏移。大地2000完全准确。
用移动功能后的效果
珠三角水资源配置工程,用的2000大地坐标系38°带(CGCS2000 / 3-degree Gauss-Kruger zone 38),直接在QGIS里转成WGS84经纬度后,导入mapus,吻合度很好,无需调整
6 导出geojson并转为dxf
在mapus里修改了的图元,导出geojson文件,用QGIS打开后再导出为dxf,cad打开dxf即可。
7 xml文件转geojson文件出错
有时候遇到91等软件导出的xml文件存在<name/>
这个情况,导致文件转换失败,请全局替换<name/>
为<name>某某</name>
<Folder>
<name>pipe_cen</name>
<Placemark>
<name/>
<description/>
<styleUrl>#1632796375</styleUrl>
<LineString>
<coordinates>
8 导出文件乱码处理——不可行,尝试后会造成系统问题。
https://blog.csdn.net/lwqkiss/article/details/128217506防乱码设置(更改系统编码为utf-8)
注意:更改之后会重启,请先保存重要文件
Windows10
搜索框输入语言,点击进入
或者点击Windows设置->时间和语言->语言
点击管理语言设置
点击更改系统区域设置,勾选使用utf-8,然后点击确定,按提示重启系统
Windows11
搜索框输入语言,点击进入
或者点击Windows设置->时间和语言->语言和区域
点击管理语言设置
点击更改系统区域设置,勾选使用utf-8,然后点击确定,按提示重启系统
最后编辑:秦晓川 更新时间:2024-11-18 15:41