我是靠谱客的博主 跳跃大雁,这篇文章主要介绍基于ArcPy的大批量栅格边界提取(类似ArcGIS中的RasterDomain功能)一、为每个栅格数据生成单独的矢量文件(shp文件)二、将多个栅格数据的边界生成为一个矢量文件,现在分享给大家,希望可以做个参考。

文章目录

    • 问题描述&实现思路
  • 一、为每个栅格数据生成单独的矢量文件(shp文件)
  • 二、将多个栅格数据的边界生成为一个矢量文件


问题描述&实现思路

给定大量栅格数据(TIF,DAT等文件),生成每个栅格数据的边界范围多边形。
使用ArcPy的 Raster.extent 来读取栅格的四个角点坐标,再用四个点生成多边形(POLYGON FEATURE)。


一、为每个栅格数据生成单独的矢量文件(shp文件)

def 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()

二、将多个栅格数据的边界生成为一个矢量文件

def 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内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部