ArcGIS笔记公众号新增留言功能,欢迎大家就推文话题展开讨论。留言请遵守国家相关法律法规。作者水平有限,相关技术方法不一定好,大神勿喷!
对城市用地现状的分析是项目编制的基础,也是
城市
认识的基础。用什么方式、平台来进行用地现状图绘制一直以来都有争论。支持用AutoCAD绘制的认为,其便捷,无需二次转换,平台也是目前的主流。支持用ArcGIS绘制的认为,GIS具有空间属性,为后期用地分析提供了无限可能性;并且用地可以进行拓扑检查,避免图斑之间重叠,提高了用地统计准确性。我们是强烈支持用ArcGIS来绘制用地图的。除前面提到的两个优点,
Arc
GIS绘图还有诸多优点。
1、工作协同性高
在ArcGIS上绘图,其实是在录入数据。不同编制人员可就同一个用地进行动态实时绘制,而不像
AutoCAD绘图那样需要后期再拼合。我们知道,
AutoCAD
分工绘图过程中,两者之间地区的衔接是一个麻烦问题,比如两相邻区域道路、水系的统一。由于是实时基于同一个数据库文件,因而ArcGIS绘图就不会有这个麻烦。
2、底图管理高效
用地现状图绘制需要有多方、多类型的底图,比如需要卫星影像图、航拍图、地形图、上一个基准年用地图等工作底图。这些底图需要根据情况查看,如将这些地图要素全部导入AutoCAD是相当不现实的。反观ArcGIS,它为这些底图要素管理提供了较为方便与高效的方法。比如,卫星影像可以转为镶嵌数据集,这样调用更方便;而原地形图文件则可设置缩放显示限制,在某一比例时显示。最为重要的是,底图都可以设置透明度,这样查看起来相当方便。
3、地块划分简单
在
AutoCAD中,对某一
用地
类型的生成需要首先画外框,然后再填充。在
ArcGIS中,我们只需一步,即对面要素进行编辑即可。弃两步而用一步,孰快孰慢一目了然。更为重要的是,在
AutoCAD中,某些明明闭合的多段线就是填不上,特别是道路填充,简直就是规划师的梦魇。即使好不容易填上了色块,在计算面积的时候它就是不现实。
针对上述
ArcGIS的种种优点,我们是不是应当考虑在用地现状图的绘制时采用
ArcGIS平台呢?现在,我们来讨论下
ArcGIS平台的缺点,一
是ArcGIS画某些线条、曲线等要素比较不便
;二
是我们最后还是要将用地现状图转化为CAD文件,
ArcGIS转CAD文件涉及一些工作量。
那么,我们
现在
就来解决ArcGIS平台的这些缺点。
针对缺点一,我们只能说其实
ArcGIS已经提供了比较强大的编辑功能,只是我们不熟练而已。一旦熟练,其编辑速度应当在CAD之上,这一点请大家多练习。缺点二是我们这篇推文需要重点关注的。由于
ArcGIS提供了强大的Python库,因此我们可以采用编程的方式来解决
ArcGIS导出为CAD的问题。
在ArcGIS中,我们一般采用
要
素
转CAD
来生成CAD文件。而生成的CAD文件只有单一的一个层,我们如何实现不同的CAD分层。比如,居住用地用居住用地的层,商业用地用商业用地的层。现在我们就来思考实现的流程。
这一过程有几步。
首先
,我们要选择要素的某些属性,并分别导出为要素,要素的名称用字段中的用地性质名称。比如用地字段中有“R1一类居住用地”、“R2二类居住用地”等用地性质。我们要相应的将这些数据分离出来分别导出。
随后
,我们要将这些要素一起导出为CAD文件。
最后
,我们要将这些CAD文件填充色块。全过程自动实现,只有这样我们才更有动力使用ArcGIS平台。接下来,我们就用Python
来
实现它吧。
步骤一:按属性选择并导出为要素
先贴出代码,然后我们来讲解一下。
# -*- coding:utf-8 -*-
import arcpy
fc = 'F:/file/landuse.gdb/landuse_2015'
#这里填入需要选择的要素
db_out = "F:/file/db_out.gdb"
#这里填入导出要素的文件地理数据库路径
field = "landuse" #这里填充需要导出层名的字段
with arcpy.da.SearchCursor(fc, field) as cursor:
ls = [ls[0] for ls in cursor]
ls2 = list(set(ls))
for i in ls2:
out_fc = db_out + '/' + i
arcpy.Select_analysis(fc, out_fc, field + "= '" + i + "'") #这里有双引号与单引号,请注意!
在上面这段代码中我首先定义了一个游标,
游标
数据为要素
field
字段
所有数据;随后,对这些数据进行去重处理,得到用地类型名称;最后,我们以用地类型为要素名称逐个导出到文件地理数据库。
步骤二:导出为CAD文件
代码比较简单,不解释。如下:
arcpy.env.workspace =
"F:/file/db_out.gdb"
in_features = arcpy.ListFeatureClasses()
output_type = "DWG_R2007"
output_file = "
F:/file/landuse2015
.dwg"
arcpy.ExportCAD_conversion(in_features, output_type, output_file)
步骤三:对CAD文件每个图层进行用地填充
这一方法可以自行在
AutoCAD中打开,隔离图层后进行填充(因为都是封闭的多段线,所以贼好填了),但也可用Python来解决。由于填充不复杂、不费事,加之涉及填充颜色选择,这里我们不编写代码,有感兴趣的朋友可以自行编写代码。
好了,现在我们将步骤一、二的代码合并为一段代码,如下:
# -*- coding:utf-8 -*-
import arcpy
def fcOut(fc, field):
with arcpy.da.SearchCursor(fc, field) as cursor:
ls = [ls[0] for ls in cursor]
ls2 = list(set(ls))
for i in ls2:
out_fc = db_out + '/' + i
arcpy.Select_analysis(fc, out_fc, field + "= '" + i + "'") #这里有双引号与单引号!
def fc2dwg(dwgname):
in_features = arcpy.ListFeatureClasses()
output_type = "DWG_R2007"
output_file = 'F:/file/' + dwgname
arcpy.ExportCAD_conversion(in_features, output_type, output_file)
if __name__ == "__main__":
arcpy.env.overwriteOutput = True
arcpy.env.workspace = "F:/file/db_out.gdb"
db_out = arcpy.env.workspace
fc = "F:/file/db_in.gdb/landuse_2015" #这里填入需要选择的要素
field = "LB" #这里填充需要导出层名的字段
dwgname = "landuse2015.dwg"
fcOut(fc,field)
fc2dwg(dwgname)
print "finished!"
这段代码系统解决了导出CAD的分图层问题。我们还可以将这段Python代码设置为ArcGIS的Python工具,这样以后我们用它就像用Python工具一样简单,如何设置为
Python工具
我们将在以后讲解。由此,我们有了两种用地现状图,鱼与熊掌兼得,
ArcGIS平台还是蛮有优势!