摘要
使用传感器模型对影像执行测量,其中包括几何传感器模型和随影像提供的适当元数据(影像支持数据)。 受支持的测量类型包括点、距离或长度、面积和要素高度。
说明
影像测量依赖于传感器模型的影像到地面变换。 对于单个影像测量,变换需要点的高程。 可以使用平均高度来估算高度,但地形模型将提供更准确的结果。 测量计算需要影像 x,y 坐标和地面 z 坐标。 当包含地形模型时,计算是迭代算法,从影像到地形模型的射线相交以确定与地面的交点。 在极少数情况下,特别是在崎岖地形和高倾斜度的情况下,迭代可能会因为模糊而无法生成有效的解决方案。 在这些情况下,系统无法计算奇异点,从而导致没有有效的解决方案。
注:
如果不确定解决暗杆,则测量方法(点、长度、面积和要素高度)可能不返回值。 仅在此函数中使用影像坐标很重要,因为地图坐标将首先转换到影像空间,从而导致可能的错误。
计算影像的中心点。
import arcpy
raster = arcpy.sa.Raster(raster_path)
mens = arcpy.ia.Mensuration(raster)
result = mens.point((raster.width/2, raster.height/2))
print(f"Center: ({result.lat}, {result.lon})")
对于使用两点的方法,将返回距离和方向。 距离是沿地平面的线性测量。 方向是从第一个测量点到第二个测量点定义的直线自北测量的方位角。 测量影像中沿平坦地形的点很重要。
对于从对象底部到对象顶部测量的高度,假设点是垂直对齐的,这意味着较低的点直接低于较高的点。 对于使用阴影的测量,太阳角度信息必须包含在传感器模型元数据中。 假设对象将阴影投射到平坦地形上,该地形与对象底部相交于被理解为底部的点。 如果地形是倾斜的,则可以延伸或缩短返回的高度值。
计算沿影像顶部的距离。
import arcpy
raster = arcpy.sa.Raster(raster_path)
mens = arcpy.ia.Mensuration(raster)
result = mens.distance((0, 0), (raster.width, 0))
print(f"Image Width: {result.distance} m")
面积计算使用影像的传感器模型和定义的地形来计算影像的地面覆盖范围和周长。 这是在椭圆体上计算的,不跟随地形。 如果无法收敛到解决方案,则此方法可能不返回值。 仅在此函数中使用影像坐标很重要,因为地图坐标将首先转换到影像空间,从而导致可能的错误。
计算影像的地面面积。
import arcpy
raster = arcpy.sa.Raster(raster_path)
mens = arcpy.ia.Mensuration(raster)
result = mens.area([(0, 0), (raster.width, 0),
(raster.width, raster.height), (0, raster.height)])
print(f"Image Size: {result.area} m^2")
高度计算是在椭圆体上进行的,不跟随地形。 如果无法收敛到解决方案,则此方法可能不返回值。 仅在此方法中使用影像坐标(列、行)很重要,因为地图坐标将转换到影像空间,从而导致可能的错误。
计算对象高度:
import arcpy
raster = arcpy.sa.Raster(raster_path)
mens = arcpy.ia.Mensuration(raster)
result = mens.height((base_x, base_y),
(top_x, top_y),
Mensuration.base_to_top)
print (f"Height: {result.height} m")
语法
Mensuration (raster)
属性
属性 | 说明 | 数据类型 |
base_to_shadow (可读写) | 通过测量对象底部到地面上对象阴影顶部的顶部来计算要素的高度。 | Long |
base_to_top (可读写) | 通过测量对象底部到对象顶部的距离来计算地面要素的高度。 | Long |
top_to_shadow (可读写) | 通过测量对象顶部到地面上对象阴影顶部的顶部来计算要素的高度。 | Long |
方法概述
方法 | 说明 |
area (polygon) | 基于传感器模型计算图像中面的面积。 |
distance (from_point, to_point) | 根据传感器模型计算图像中两点之间的地理距离。 |
height (base_point, top_point, height_type) | 计算对象垂直高度。 |
point (point) | 根据传感器模型计算地理坐标。 |
方法
area (polygon)
参数 | 说明 | 数据类型 |
polygon | The input polygon. The polygon can be specified as a Polygon object, a list of Point objects, or a list of coordinate pairs in tuples. If specified as a list of tuples, the x- and y-coordinate values must be in the image coordinate system (column, row). If other spatial reference systems are preferred, use Polygon or Point objects with a spatial reference system defined. | Polygon |
数据类型 | 说明 |
AreaMeasurement | 计算面积值。 将返回以下属性:
|
计算影像的地面面积。
import arcpy
in_raster = arcpy.sa.Raster('Charlotte_multiband.tif')
mensuration = arcpy.ia.Mensuration(in_raster)
result = mensuration.area([(0, 0), (in_raster.width, 0), (in_raster.width, in_raster.height), (0, in_raster.height)])
print(f"Image Size: {result.area} m^2")
distance (from_point, to_point)
参数 | 说明 | 数据类型 |
from_point | The input coordinates of the origin point. The point can be specified as a Point object, a PointGeometry object, or a coordinate pair in a tuple. If specified as a tuple, the x- and y-coordinate values must be in an image coordinate system (column, row). If other spatial reference systems are preferred, use the Point or PointGeometry objects with a spatial reference system defined. | Point |
to_point | The input coordinates of the destination point. The point can be specified as a Point object, a PointGeometry object, or a coordinate pair in a tuple. If specified as a tuple, the x-and y-coordinate values must be in the image coordinate system (column, row). If other spatial reference systems are preferred, use Point or PointGeometry objects with a spatial reference system defined. | Point |
数据类型 | 说明 |
LinearMeasurement | 计算距离值。 将返回以下属性:
|
计算沿影像顶部的距离。
import arcpy
in_raster = arcpy.Raster('Charlotte_multiband.tif')
mensuration = arcpy.ia.Mensuration(in_raster)
result = mensuration.distance((0, 0),( raster.width, 0))
print(f"Image Width: {result.distance} m")
height (base_point, top_point, height_type)
参数 | 说明 | 数据类型 |
base_point | The input coordinates of the base of the feature to measure. This can be specified as a Point object, a PointGeometry object, or a coordinate pair in a tuple. If specified as a tuple, the x- and y-coordinate values should be in the image coordinate system (column, row). If other spatial reference systems are preferred, use PointGeometry or Point objects with a spatial reference system defined. | Point |
top_point | The input coordinates of the top of the feature to measure. The point can be specified as a Point object, a PointGeometry object, or a coordinate pair in a tuple. If specified as a tuple, the x- and y-coordinate values should be in the image coordinate system (column, row). If other spatial reference systems are preferred, use PointGeometry or Point objects with a spatial reference system defined. | Point |
height_type | Height measurements of an object can be obtained when a sensor model exists for an image. Sun angle information is required to make measurements using shadows. The height of an object is calculated between two points, based on a sensor model. Three types of height measurements are supported:
| Integer |
数据类型 | 说明 |
HeightMeasurement | 计算高度值。 将返回以下属性:
|
计算对象高度。
import arcpy
in_raster = arcpy.sa.Raster('Charlotte_multiband.tif')
mensuration = arcpy.ia.Mensuration(in_raster)
result = mensuration.height((base_x, base_y), (top_x, top_y), Mensuration.base_to_top)
print(f"Height: {result.height} m")
point (point)
参数 | 说明 | 数据类型 |
point | The input coordinates to measure. The point can be specified as a Point object, a PointGeometry object, or a coordinate pair in a tuple. If specified as a tuple, the x- and y-coordinate values must be in the image coordinate system (column, row). If other spatial reference systems are preferred, use Point or PointGeometry objects with a spatial reference system defined. | Point |
数据类型 | 说明 |
PointMeasurement | 计算所得的地面位置。 将返回以下属性:
|
返回图像中心点的纬度和经度值。
import arcpy
in_raster = arcpy.Raster('Charlotte_multiband.tif')
mensuration = arcpy.ia.Mensuration(in_raster)
result = mensuration.point((in_raster.width/2, in_raster.height/2))
print(f"Center: ({result.lat}, {result.lon})")