Arcgis python geometry
Geometry
描述
来自:https://pro.arcgis.com/zh-cn/pro-app/arcpy/classes/geometry.htm
几何对象定义空间位置和关联几何形状。
说明
在许多地理处理工作流中,您可能需要使用坐标和几何信息运行特定操作,但不一定想经历创建新(临时)要素类、使用光标填充要素类、使用要素类,然后删除临时要素类的过程。可以使用几何对象替代输入和输出,从而使地理处理变得更简单。使用 Geometry、Multipoint、PointGeometry、Polygon或 Polyline 类可以从头开始创建几何对象。
语法
Geometry (geometry, inputs, {spatial_reference}, {has_z}, {has_m})
参数 | 说明 | 数据类型 |
geometry
|
几何类型:点、面、折线或多点。 |
String |
inputs
|
用于创建对象的坐标。数据类型可以是 Point 或 Array 对象。 |
Object |
spatial_reference
|
新几何的空间参考。 (默认值为 None) |
SpatialReference |
has_z
|
Z 状态:如果启用 Z,则为几何的 True,如果未启用,则为 False。 (默认值为 False) |
Boolean |
has_m
|
M 状态:如果启用 M,则为几何的 True,如果未启用,则为 False。 (默认值为 False) |
Boolean |
属性
属性 | 说明 | 数据类型 |
JSON
(只读)
|
返回一个字符串形式的几何 Esri JSON 制图表达。 提示:通过 Python 的 json.loads 函数,返回的字符串可转换至字典。 |
String |
WKB
(只读)
|
返回 OGC 几何的熟知二进制 (WKB) 制图表达。该存储类型将几何值表示为不间断的字节流形式。 |
Bytearray |
WKT
(只读)
|
返回 OGC 几何的熟知文本 (WKT) 制图表达。其将几何值表示为文本字符串。 几何中的所有真曲线都将在 WKT 字符串的近似曲线中进行增密。 |
String |
area
(只读)
|
面要素的面积。其他所有要素类型为空。 |
Double |
centroid
(只读)
|
如果质心位于要素之内或要素之上则为真;否则返回标注点。返回点对象。 |
Point |
extent
(可读写)
|
几何范围。 |
Extent |
firstPoint
(只读)
|
第一个几何坐标点。 |
Point |
hullRectangle
(只读)
|
以空格分隔的凸包矩形坐标对的字符串。 |
String |
isMultipart
(只读)
|
如果此几何的部分数大于一,则为 True。 |
Boolean |
labelPoint
(只读)
|
标注位置所在的点。labelPoint 始终位于要素之内/之上。 |
Point |
lastPoint
(只读)
|
要素的最后一个坐标。 |
Point |
length
(只读)
|
线状要素的长度。点和多点要素类型为零。 |
Double |
length3D
(可读写)
|
线状要素的 3D 长度。点和多点要素类型为零。 |
Double |
partCount
(只读)
|
要素几何部分的数目。 |
Integer |
pointCount
(只读)
|
要素的总点数。 |
Integer |
spatialReference
(只读)
|
几何的空间参考。 |
SpatialReference |
trueCentroid
(只读)
|
要素的重心。 |
Point |
type
(只读)
|
几何类型:面、折线、点、多点、多面体、尺寸或注记。 |
String |
方法概述
方法 | 说明 |
angleAndDistanceTo (other, {method}) |
使用测量类型将一组角和距离返回到另一个点。 |
boundary () |
构造几何边界。 ![]() |
buffer (distance) |
在距几何的指定距离处构造一个面。 ![]() |
clip (envelope) |
构造几何体与指定范围的交集。 ![]() |
contains (second_geometry, {relation}) |
指明基础几何中是否包含比较几何。 contains 与 within 相反。 本图仅显示 True 关系。 ![]() |
convexHull () |
构造具有最小边界多边形的几何,以便所有外角均为凸角。 ![]() |
crosses (second_geometry) |
指明两个几何是否相交于较小形状类型的几何。 如果两条折线仅共用公共点(至少有一个点不是端点),则这两条折线交叉。如果折线和面在面(不等于整条折线)的内部共享一条折线或一个公共点(对于垂线),那么该折线与面交叉。 本图仅显示 True 关系。 ![]() |
cut (cutter) |
将该几何分割到剪切折线的左右两侧。 剪切折线或面时,会从其与剪切折线的相交处将其分割。每一段被分类为剪切线的左侧或右侧。该分类基于剪切线的方向。目标折线中不与剪切折线相交的部分将作为该输入折线结果的右侧部分返回。如果未对几何进行剪切,则左侧几何将为空 (None)。 ![]() |
densify (type, distance, deviation) |
使用添加的折点 创建新的几何。 |
difference (other) |
构造一个几何体,该几何体仅由基础几何所特有、而其他几何所没有的区域组成。下图显示当红色多边形为源几何时的结果。 ![]() |
disjoint (second_geometry) |
指明基础几何和比较几何是否未共用任何点。 如果 disjoint 返回 False,则两个几何相交。 本图仅显示 True 关系。 ![]() |
distanceTo (other) |
返回两个几何之间的最小距离。如果两个几何相交,则最小距离为 0。 两个几何必须具有相同的投影。 |
equals (second_geometry) |
指示原几何和参照几何的 shape 类型是否相同并在平面中定义相同点集。这仅是 2D 的比较;已忽略 M 值和 Z 值。 本图仅显示 True 关系。 ![]() |
generalize (max_offset) |
使用指定的最大偏移容差来创建一个简化几何。 |
getArea ({type}, {units}) |
使用测量类型返回要素的面积。 |
getLength ({measurement_type}, {units}) |
使用测量类型返回要素的长度。 |
getPart ({index}) |
返回几何特定部分的点对象数组,或包含多个数组(每个数组对应一个部分)的数组。 |
intersect (other, dimension) |
构造作为两个输入几何交集的几何体。不同的维数可用于创建不同的 shape 类型。 对于同一 shape 类型的两个几何体,其交集为仅包含原始几何重叠区域的几何。 ![]() 为了更快地获取结果,请在调用 intersect 类之前先测试两个几何体是否 disjoint。 |
measureOnLine (in_point, {use_percentage}) |
返回从此条线的起点到 in_point 之间的一个测量值。 |
overlaps (second_geometry) |
指示两个几何的交集是否具有与其中一个输入几何相同的形状类型,并且不等于任一输入几何。 本图仅显示 True 关系。 ![]() |
pointFromAngleAndDistance (angle, distance, {method}) |
使用指定的测量类型按给定的角度(以度为单位)和距离(采用几何空间参考的单位)返回点。 |
positionAlongLine (value, {use_percentage}) |
返回线上距线起点指定距离处的点。 |
projectAs (spatial_reference, {transformation_name}) |
定义几何投影,并应用相应的地理变换。 要进行投影,几何体需要具有一个空间参考且不具有 UnknownCoordinateSystem。传递到该方法的新空间参考系统参数定义了一个输出坐标系。如果任一空间参考未知,坐标将不会发生更改。ProjectAs 方法并不更改 Z 值和测量值。 |
queryPointAndDistance (in_point, {as_percentage}) |
在折线上找到离 in_point 最近的点,并确定这两点间的距离。同时返回关于 in_point 位于线的哪一侧以及最近点沿线的距离。 |
segmentAlongLine (start_measure, end_measure, {use_percentage}) |
在起始测量值和结束测量值之间返回 Polyline。虽然与 Polyline.positionAlongLine 相似,但是会在折线的两点之间(而不是在单点)返回折线段。 |
snapToLine (in_point) |
基于以该几何作为捕捉目标的 in_point 返回一个新点。 |
symmetricDifference (other) |
构造一个几何体,该几何体由两个几何的并集减去其交集所形成。 两个输入几何必须为同一 shape 类型。 ![]() |
touches (second_geometry) |
指示几何的边界是否相交。 当两个几何的交集不为空,但它们内部的交集为空时,说明两个几何接触。例如,仅当点与折线的一个终点重合时,才表示点与折线接触。 本图仅显示 True 关系。 ![]() |
union (other) |
构造一个几何体,该几何体是输入几何的并集。 要合并的两个几何必须为同一 shape 类型。 ![]() |
within (second_geometry, {relation}) |
指明基础几何是否位于比较几何之内。 within 与运算符 contains 相反。 本图仅显示 True 关系。
![]() 如果基础几何是这些几何的交集且其内部交集不为空,则基础几何位于比较几何之内。within 是 Clementini 运算符,空的基础几何除外。 |
方法
angleAndDistanceTo (other, {method})
参数 | 说明 | 数据类型 |
other
|
第二个几何。 |
PointGeometry |
method
|
PLANAR 测量值反映出的是地理数据在 2D 表面上的投影(也就是说,平面测量不考虑地球的曲率)。如有必要,可选择 GEODESIC、GREAT_ELLIPTIC、LOXODROME 以及 PRESERVE_SHAPE 测量类型作为替代类型。
(默认值为 GEODESIC) |
String |
数据类型 | 说明 |
tuple |
将一组角(以度为单位)和距离(以米为单位)返回到另一个点。 |
boundary ()
数据类型 | 说明 |
Object |
面的边界为折线。折线的边界为多点,与线的端点相对应。点或多点的边界为空点或多点。 |
buffer (distance)
参数 | 说明 | 数据类型 |
distance
|
缓冲距离。 缓冲几何时,缓冲距离采用相同的单位。 仅可以为面几何指定负距离。 |
Double |
数据类型 | 说明 |
Polygon |
缓冲的面几何。 |
contains (second_geometry, {relation})
参数 | 说明 | 数据类型 |
second_geometry
|
第二个几何。 |
Object |
relation
|
空间关系类型。
(默认值为 None) |
String |
数据类型 | 说明 |
Boolean |
返回的布尔值 True 表示该几何包含第二个几何。 |
convexHull ()
数据类型 | 说明 |
Object |
生成的几何。单个点的凸包为该点本身。 |
crosses (second_geometry)
参数 | 说明 | 数据类型 |
second_geometry
|
第二个几何。 |
Object |
数据类型 | 说明 |
Boolean |
返回布尔值为 True 指明两个几何相交于较小形状类型的几何。 |
densify (type, distance, deviation)
参数 | 说明 | 数据类型 |
type
|
增密、DISTANCE、ANGLE 或 GEODESIC 的类型。
|
String |
distance
|
折点间的最大距离。折点间的实际距离通常小于最大距离,原因是新折点会沿着原始线段均匀分布。 如果使用 DISTANCE 或 ANGLE 的 type,则距离将以几何空间参考的单位进行测量。如果使用 GEODESIC 的 type,则用米作单位测量距离。 |
Double |
deviation
|
增密使用直线逼近曲线。可以使用 deviation 控制近似精度。偏差是新线段与原始曲线间的最大距离。其值越小,就需要越多的线段来逼近曲线。 如果使用 DISTANCE 的 type,则用几何空间参考单位测量偏差。如果使用 ANGLE 的 type,则用弧度作单位测量偏差。如果使用 GEODESIC 的 type,则不使用偏差。 |
Double |
数据类型 | 说明 |
Geometry |
增密几何。 |
difference (other)
参数 | 说明 | 数据类型 |
other
|
第二个几何。 |
Object |
数据类型 | 说明 |
Object |
生成的几何。 |
disjoint (second_geometry)
参数 | 说明 | 数据类型 |
second_geometry
|
第二个几何。 |
Object |
数据类型 | 说明 |
Boolean |
返回布尔值 True 表示两个几何未共用任何点。 |
distanceTo (other)
参数 | 说明 | 数据类型 |
other
|
第二个几何。 |
Object |
数据类型 | 说明 |
Double |
两个几何之间的距离。 |
equals (second_geometry)
参数 | 说明 | 数据类型 |
second_geometry
|
第二个几何。 |
Object |
数据类型 | 说明 |
Boolean |
返回布尔值为 True 表示两个几何的 shape 类型相同并在平面中定义了相同点集。 |
getArea ({type}, {units})
参数 | 说明 | 数据类型 |
type
|
平面测量值反映出的是地理数据在 2D 表面上的投影(也就是说,平面测量不考虑地球的曲率)。如果需要,可选择 GEODESIC、GREAT_ELLIPTIC、LOXODROME 和 PRESERVE_SHAPE 作为替代测量类型。
(默认值为 GEODESIC) |
String |
units
|
计算面积时将采用的单位。 面积测量单位关键字:英亩 | 公亩 | 公顷 | 平方厘米 | 平方分米 | 平方英寸 | 平方英尺 | 平方千米 | 平方米 | 平方英里 | 平方毫米 | 平方码 |
String |
数据类型 | 说明 |
Double |
要素的面积。 默认情况下,在投影坐标系中,将采用坐标系的单位返回面积,在地理坐标系中,将以平方米为单位返回面积。 |
getLength ({measurement_type}, {units})
参数 | 说明 | 数据类型 |
measurement_type
|
平面测量值反映出的是地理数据在 2D 表面上的投影(也就是说,平面测量不考虑地球的曲率)。如果需要,可选择 GEODESIC、GREAT_ELLIPTIC、LOXODROME 和 PRESERVE_SHAPE 作为替代测量类型。
(默认值为 GEODESIC) |
String |
units
|
计算长度时将采用的单位。 线性测量单位关键字:厘米 | 分米 | 英尺 | 英寸 | 千米 | 米 | 英里 | 毫米 | 海里 | 码 |
String |
数据类型 | 说明 |
Double |
要素的长度。 默认情况下,在投影坐标系中,将采用坐标系的单位返回长度,在地理坐标系中,将以米为单位返回长度。 |
getPart ({index})
参数 | 说明 | 数据类型 |
index
|
几何的索引位置。 |
Integer |
数据类型 | 说明 |
Array |
如果指定了索引,则 getPart 将返回几何特定部分的点对象数组。如果未指定索引,则返回的数组将包含每个几何部分的点对象数组。 |
intersect (other, dimension)
参数 | 说明 | 数据类型 |
other
|
第二个几何。 |
Object |
dimension
|
生成几何的拓扑维度(形状类型)。
|
Integer |
数据类型 | 说明 |
Object |
作为两个输入几何体的交集的新几何体(点、多点、折线或面)。 |
measureOnLine (in_point, {use_percentage})
参数 | 说明 | 数据类型 |
in_point
|
用于从折线的起点开始测量的点(PointGeometry 或 Point)。 |
PointGeometry |
use_percentage
|
如果 False,则测量值将作为距离返回;如果True,则测量值将作为百分比返回。 (默认值为 False) |
Boolean |
数据类型 | 说明 |
Double |
一个距离或百分比。 |
overlaps (second_geometry)
参数 | 说明 | 数据类型 |
second_geometry
|
第二个几何。 |
Object |
数据类型 | 说明 |
Boolean |
返回布尔值为 True 表示两个几何的交集具有与其中一个输入几何相同的尺寸。 |
pointFromAngleAndDistance (angle, distance, {method})
参数 | 说明 | 数据类型 |
angle
|
到返回点的角度(以度为单位)。 |
Double |
distance
|
到返回点的距离(采用几何空间参考的单位)。 |
Double |
method
|
PLANAR 测量值反映出的是地理数据在 2D 表面上的投影(也就是说,这些测量值不考虑地球的曲率)。可根据需要选择 GEODESIC、GREAT_ELLIPTIC、LOXODROME 或 PRESERVE_SHAPE测量类型作为替代类型。
(默认值为 GEODESIC) |
String |
数据类型 | 说明 |
PointGeometry |
按给定的角度(以度为单位)和距离(以米为单位)返回点。 |
positionAlongLine (value, {use_percentage})
参数 | 说明 | 数据类型 |
value
|
沿线的距离。 如果距离小于零,则将返回线的起点;如果距离大于线的长度,则将返回线的终点。 |
Double |
use_percentage
|
可将距离指定为测量的固定单位或线的长度比率。 如果为真,则 value 将被用作百分比,如果为假,则 value 将被用作距离。对于百分比,该值应表示为 0.0 (0%) 到 1.0 (100%) 的双精度。 (默认值为 False) |
Boolean |
数据类型 | 说明 |
PointGeometry |
线上距线起点指定距离的点。 |
projectAs (spatial_reference, {transformation_name})
参数 | 说明 | 数据类型 |
spatial_reference
|
新空间参考。该项可以是 SpatialReference 对象或坐标系名称。 |
SpatialReference |
transformation_name
|
地理变换名称。 |
String |
数据类型 | 说明 |
Object |
经投影的几何。 |
queryPointAndDistance (in_point, {as_percentage})
参数 | 说明 | 数据类型 |
in_point
|
输入点(PointGeometry 或 Point)。 |
PointGeometry |
as_percentage
|
如果 False,会将测量值作为距离返回;如果 True,将以百分比返回测量值。 (默认值为 False) |
Boolean |
数据类型 | 说明 |
tuple |
返回包含以下信息的一个元组:
|
segmentAlongLine (start_measure, end_measure, {use_percentage})
参数 | 说明 | 数据类型 |
start_measure
|
从线起点起的起始距离。 |
Double |
end_measure
|
从线起点起的结束距离。 |
Double |
use_percentage
|
可将起始和结束测量值指定为固定单位或比率。 如果为真,则 start_measure 和 end_measure 将被用作百分比,如果为假,则 start_measure 和 end_measure 将被用作距离。对于百分比,该测量值应表示为 0.0 (0%) 到 1.0 (100%) 的双精度。 (默认值为 False) |
Boolean |
数据类型 | 说明 |
PolyLine |
两点之间的线段。 |
snapToLine (in_point)
参数 | 说明 | 数据类型 |
in_point
|
要捕捉到该线的点(PointGeometry 或 Point)。 |
PointGeometry |
数据类型 | 说明 |
PointGeometry |
捕捉到的点。 |
symmetricDifference (other)
参数 | 说明 | 数据类型 |
other
|
第二个几何。 |
Object |
数据类型 | 说明 |
Object |
生成的几何。 |
touches (second_geometry)
参数 | 说明 | 数据类型 |
second_geometry
|
第二个几何。 |
Object |
数据类型 | 说明 |
Boolean |
返回布尔值为 True,表示几何的边界相交。 |
union (other)
参数 | 说明 | 数据类型 |
other
|
第二个几何。 |
Object |
数据类型 | 说明 |
Object |
生成的几何。 |
within (second_geometry, {relation})
参数 | 说明 | 数据类型 |
second_geometry
|
第二个几何。 |
Object |
relation
|
空间关系类型。
(默认值为 None) |
String |
数据类型 | 说明 |
Boolean |
返回布尔值 True 表示该几何被包含在另一个几何之内。 |
代码示例
几何示例将地理处理工具的输出参数设置为空 Geometry 对象时,该工具将返回 Geometry 对象列表。
import arcpy
# Run the Copy Features tool, setting the output to the geometry object.
# geometries is returned as a list of geometry objects.
geometries = arcpy.CopyFeatures_management("c:/data/streets.shp",
arcpy.Geometry())
# Walk through each geometry, totaling the length
length = 0
for geometry in geometries:
length += geometry.length
print("Total length: {0}".format(length))