专栏名称: 城长数据
ArcGIS for Urabn planning.主要面向城市规划专业,通过全方位的ArcGIS技术与方法讲解,达到高效运用ArcGIS ,以辅助城市规划设计及研究的目的。
目录
相关文章推荐
51好读  ›  专栏  ›  城长数据

城市规划用地现状图绘制平台探讨:用AutoCAD还是ArcGIS

城长数据  · 公众号  ·  · 2016-04-01 17:05

正文

请到「今天看啥」查看全文



提示

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平台还是蛮有优势!








请到「今天看啥」查看全文