我是靠谱客的博主 跳跃大雁,这篇文章主要介绍基于ArcPy的大批量栅格边界提取(类似ArcGIS中的RasterDomain功能)一、为每个栅格数据生成单独的矢量文件(shp文件)二、将多个栅格数据的边界生成为一个矢量文件,现在分享给大家,希望可以做个参考。
文章目录
- 问题描述&实现思路
- 一、为每个栅格数据生成单独的矢量文件(shp文件)
- 二、将多个栅格数据的边界生成为一个矢量文件
问题描述&实现思路
给定大量栅格数据(TIF,DAT等文件),生成每个栅格数据的边界范围多边形。
使用ArcPy的 Raster.extent
来读取栅格的四个角点坐标,再用四个点生成多边形(POLYGON FEATURE)。
一、为每个栅格数据生成单独的矢量文件(shp文件)
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37def raster_domain(): InFolder = "E:\0906" # 栅格数据存放的路径 Dest = "E:\0906\res\res_{}.shp" # 生成矢量文件的目标路径。 arcpy.env.workspace = InFolder sr = arcpy.SpatialReference("一个.prj文件的路径,用于为将要生成的矢量文件提供空间参考") # InFolder中的所有栅格数据集: in_raster_datasets = arcpy.ListRasters() for i, Ras in enumerate(in_raster_datasets): # 为每个栅格数据生成单独的矢量文件: arcpy.CreateFeatureclass_management(os.path.dirname(Dest.format(i)), os.path.basename(Dest.format(i)), "POLYGON", spatial_reference=sr) # 这里指定将要生成的矢量文件的字段。可以自定义。 arcpy.AddField_management(Dest.format(i), "RasterName", "String", "", "", 250) arcpy.AddField_management(Dest.format(i), "RasterPath", "String", "", "", 250) cursor = arcpy.InsertCursor(Dest.format(i)) point = arcpy.Point() array = arcpy.Array() corners = ["lowerLeft", "lowerRight", "upperRight", "upperLeft"] feat = cursor.newRow() r = arcpy.Raster(Ras) for corner in corners: point.X = getattr(r.extent, "%s" % corner).X point.Y = getattr(r.extent, "%s" % corner).Y array.add(point) array.add(array.getObject(0)) polygon = arcpy.Polygon(array) feat.shape = polygon feat.setValue("RasterName", Ras) print os.path.join(InFolder, Ras) feat.setValue("RasterPath", InFolder + "\" + Ras) cursor.insertRow(feat) array.removeAll()
二、将多个栅格数据的边界生成为一个矢量文件
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37def raster_domain(): InFolder = "E:\0906" # 栅格数据存放的路径 Dest = "E:\0906\res\res_{}.shp" # 生成矢量文件的目标路径。 arcpy.env.workspace = InFolder sr = arcpy.SpatialReference("一个.prj文件的路径,用于为将要生成的矢量文件提供空间参考") # InFolder中的所有栅格数据集: in_raster_datasets = arcpy.ListRasters() # 生成一个矢量文件: arcpy.CreateFeatureclass_management(os.path.dirname(Dest), os.path.basename(Dest), "POLYGON", spatial_reference=sr) arcpy.AddField_management(Dest.format(i), "RasterName", "String", "", "", 250) arcpy.AddField_management(Dest.format(i), "RasterPath", "String", "", "", 250) for i, Ras in enumerate(in_raster_datasets): # 这里指定将要生成的矢量文件的字段。可以自定义。 cursor = arcpy.InsertCursor(Dest.format(i)) point = arcpy.Point() array = arcpy.Array() corners = ["lowerLeft", "lowerRight", "upperRight", "upperLeft"] feat = cursor.newRow() r = arcpy.Raster(Ras) for corner in corners: point.X = getattr(r.extent, "%s" % corner).X point.Y = getattr(r.extent, "%s" % corner).Y array.add(point) array.add(array.getObject(0)) polygon = arcpy.Polygon(array) feat.shape = polygon feat.setValue("RasterName", Ras) print os.path.join(InFolder, Ras) feat.setValue("RasterPath", InFolder + "\" + Ras) cursor.insertRow(feat) array.removeAll()
最后
以上就是跳跃大雁最近收集整理的关于基于ArcPy的大批量栅格边界提取(类似ArcGIS中的RasterDomain功能)一、为每个栅格数据生成单独的矢量文件(shp文件)二、将多个栅格数据的边界生成为一个矢量文件的全部内容,更多相关基于ArcPy内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复