智慧管网数据处理与发布流程

标签: 无 分类: Gis 创建时间:2020-09-22 01:17:40 更新时间:2024-11-23 02:04:26

1.处理cad图

获取原始的管网CAD图,并进行如下处理:

(1) 将cad图不需要的部分删除,只留下管网图层,导出 管网.dxf文件

(2) 根据现场勘察以及经验等,在管网的相对位置创建站点图层,并导出 站点.dxf文件

2.ArcMap处理cad图

(1)将生成的管网图层和站点图层导入的ArcMap,因为导入到ArcMap中的CAD图层,会有很多多余的图层,我们只需要一个Polyline图层即可,进行如下编辑

(2) 选择需要的图层,一般为Polyline,然后右键选择->Data->Export Data,将数据导出为shp文件

3.加载天地图影像地图

因为校正的时候需要使用到实际坐标,所以需要添加天地图影像地图。

(1) 打开ArcCatalog->GIS Server->Add WMTS Server

(2) 地址栏中填入 http://t0.tianditu.com/cia_c/esri/wmts (天地图影像注记),下方的额外参数,填入自己从国家天地图上申请到的tk,这个tk需要是服务端的。然后再添加一个地址 http://t0.tianditu.com/img_c/esri/wmts (天地图影像),这两个都是基于无偏移的经纬度,CGCS2000坐标系。

(3) 然后打开将影像地图添加进来即可

4.进行空间校正

如果导入的cad图没有坐标系,首先就需要进行图层的空间校正,将无坐标的cad图,校准到适当的地理坐标上去。

(1) 打开空间校正工具,Customize->Toolbars->Spatial Adjustment

(2) 选择编辑工具栏,开始编辑,选择需要进行校正的图层进行编辑。

(3) 设置需要校正的图层Spatial Adjustment->Set Adjust Data

(4) 新建新的连接点,鼠标先点击要进行校正的图层中的某个坐标点,然后再次点击需要将这个点对准到地图上的那个位置,这样就构成了第一条连接线。通常这个操作,需要多次进行缩放和Zoom To Layer,可以新建一个图层,圈出大致需要校正的位置,然后作为一个隐藏的图层加载到图层树中,在需要找到校正的位置的时候,直接进行Zoom To Layer即可。

如此反复操作,直到最少定义四个校准线和校准点。

(5) 选择校正方法,Adjustment Methods->Transformation Affine

(6) 进行校正。创建了四个校正点以后,就可以进行图形的校正了,Spatial Adjustment->Adjust

5.定义投

将上一步处理好的shp文件,重新加载到ArcMap中,然后选择ArcToolbox->Data Management Tools->Projections and Transformations->Define Projection

打开投影定义对话框,选择当前的需要定义投影的地图,然后选择需要定义的投影,比如4490或者是4326。

参考文章:
1.这可能是最简单的GIS坐标系转换指南了 (这篇文章包括了有坐标系的CAD图层到ArcMap地图的转换,以及没有坐标系的CAD图的投影转换)
2.高德,百度,Google地图定位偏移以及坐标系转换

6.管线处理

使用Arcpy编写python代码,对管线进行按米分隔。这里有多种方法可以实现

1.第一种:使用ArcToolBox

(1) 增密,对线段按照一定的长度或者比例增加线的折点。Editing Tools->Densify

(2) 将线段的折点转换成点。Data Management Tools->Features->Feature Vertices To Points

(3) 从点处打断线段。Data Management Tools->Features->Split Line at Point。

第二步和第三步可以合为一步,将线段进行增密之后,直接使用从折点处打断线段工具,对线段进行分隔。Data Management Tools->Features->Split Line at Vertices。

2.第二种:使用Arcpy代码

其实这一种只是第一种的变种罢了,毕竟Arcpy调用的函数和方法,也都是在ArcToolBox中有相应的工具的。从点处打断线,这个步骤基本上差不多,有些区别就是在生成点的思路上。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
## 使用Polyline的Polyline的positionAlongLine方法,先计算线段总长度,然后将第二个参数设为true,用1米去除线段总长度,用百分比的方式获取线段上的点
split_point=r"D:\zlc\hdxs\geodata\split_point_20190827_0821.shp"

cursor = arcpy.da.SearchCursor(shp,["Number","Length","SHAPE@"])

rows = arcpy.InsertCursor(split_point)

# Iterate through the rows in the cursor
for row in cursor:
number=row[0]
length=row[1]
polyline=row[2]
pointCount=int(length)
print pointCount
for i in range(1,pointCount):
point=polyline.positionAlongLine(1*i/length,True)
pointRow = rows.newRow()
pointRow.shape=point
rows.insertRow(pointRow)

del cursor, row,rows

7.站点处理

编辑站点的属性及编号,对每一个站点编号进行定义,同时定义其他的必要属性。
(1) 打开Edition编辑框,选择开始编辑,选择需要编辑的图层,就可以进行编辑了。

(2) 右键相应的图层,选择打开属性面板。

(3) 在属性面板中,可以新增字段。

8.数据导入postgis中(可以省略)

将处理好的站点数据导入到postgis数据库中,这一步其实可以省略,就是直接使用geoserver发布地图,而不是需要将数据导入到postgis中。将数据导入到Postgis中进行地图发布的目的,其实就是为了避免某些shp文件的限制,比如对中文支持不好,字段的长度只能限制在255个字符等。

9.发布图层

通过geoserver将postgis中的站点图层和管线图层或者是站点图层的shp文件和管线图层的shp文件发布为地图服务,供系统调用。

(1) 安装geoserver
geoserver可以独立安装,也可以随着tomcat一起安装,具体的我就不写了,基本上就是安装java环境,安装tomcat,配置环境变量,然后将下载后的geoserver.war文件放置到tomcat的webapps目录下即可完成安装。

(2) 复制数据
如果选择的数据格式是shp文件,可能还需要将相关的文件,上传到服务器geoserver的相应目录下,比如我这里geoserver安装目录为:/home/gis/apache-tomcat-8.5.43/webapps/geoserver/data/data
,需要将shp文件(包括.sbx等文件,共五个文件组成了一个shp文件),如果是一个新的项目,需要创建新的文件夹,比如中山嘉明,创建zsjm文件夹,将shp文件放到里面。复制数据,需要使用ssh工具连接到服务器上,推荐使用MobaXterm或者是FinalShell。

(2) 打开geoserver
安装geoserver之后,打开http://localhost:8080/geoserver地址,如果安装到了外网上,那就使用相应的方法进行。

(3) 新建命名空间
如果没有单独的命名空间,可以新建一个单独的命名空间,所有的都是图层都发布在这个命名空间下,如果已经新建过了,那就可以不用再次新建。

(4) 新建数据存储
选择新建数据存储,数据格式选择shp文件或者是Postgis数据库连接。

(5) 发布图层
新建数据存储之后,最后一步就是发布图层,点击数据存储的后面Publish按钮,就可以进行图层发布。发布时要指定坐标系,以及坐标的范围选择从数据计算。

中文乱码问题

添加数据库源的时候,在选择shp文件的时候,要选择DBF文件的为utf-8编码。

9.修改应用程序配置文件

修改应用程序的yml配置文件中的站点图层的地址和管线图层地址。这一部分,其实还是需要修改后台程序的。
编写配置文件,主要是在phemswebconfig表中添加一条新的记录,或者是修改原有的记录。

10.验证

小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。