GEOS API¶
背景¶
什么是 GEOS?¶
GEOS 代表几何引擎 - 开源,是一个 C++ 库,移植自 Java 拓扑套件。GEOS 实现了 OpenGIS SQL 简单要素 空间谓词函数和空间运算符。GEOS 现在是 OSGeo 项目,最初由加拿大维多利亚的 Refractions Research 开发和维护。
功能¶
GeoDjango 为 GEOS 库实现了高级 Python 封装,其功能包括
- 使用
ctypes
纯 Python 实现的、面向 GEOS 几何例程的 BSD 许可接口。 - 与 GeoDjango 松散耦合。例如,
GEOSGeometry
对象可以在 Django 项目/应用程序之外使用。换句话说,无需设置DJANGO_SETTINGS_MODULE
或使用数据库等。 - 可变性:
GEOSGeometry
对象可以修改。 - 跨平台且经过测试;与 Windows、Linux、Solaris 和 macOS 平台兼容。
教程¶
本部分包含使用 GEOSGeometry
对象的简要介绍和教程。
创建几何¶
GEOSGeometry
对象可以通过几种方式创建。首先,只需在某些空间输入上实例化对象,以下是从 WKT、HEX、WKB 和 GeoJSON 创建相同几何的示例
>>> from django.contrib.gis.geos import GEOSGeometry
>>> pnt = GEOSGeometry("POINT(5 23)") # WKT
>>> pnt = GEOSGeometry("010100000000000000000014400000000000003740") # HEX
>>> pnt = GEOSGeometry(
... memoryview(
... b"\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14@\x00\x00\x00\x00\x00\x007@"
... )
... ) # WKB
>>> pnt = GEOSGeometry(
... '{ "type": "Point", "coordinates": [ 5.000000, 23.000000 ] }'
... ) # GeoJSON
另一种选择是使用要创建的特定几何类型的构造函数。例如,可以通过将 X 和 Y 坐标传递到其构造函数中来创建 Point
对象
>>> from django.contrib.gis.geos import Point
>>> pnt = Point(5, 23)
所有这些构造函数都采用关键字参数 srid
。例如
>>> from django.contrib.gis.geos import GEOSGeometry, LineString, Point
>>> print(GEOSGeometry("POINT (0 0)", srid=4326))
SRID=4326;POINT (0 0)
>>> print(LineString((0, 0), (1, 1), srid=4326))
SRID=4326;LINESTRING (0 0, 1 1)
>>> print(Point(0, 0, srid=32140))
SRID=32140;POINT (0 0)
最后,还有 fromfile()
工厂方法,它从文件中返回 GEOSGeometry
对象
>>> from django.contrib.gis.geos import fromfile
>>> pnt = fromfile("/path/to/pnt.wkt")
>>> pnt = fromfile(open("/path/to/pnt.wkt"))
几何图形是 Pythonic¶
GEOSGeometry
对象是“Pythonic”,换句话说,可以使用标准 Python 约定访问、修改和迭代组件。例如,您可以迭代 Point
中的坐标
>>> pnt = Point(5, 23)
>>> [coord for coord in pnt]
[5.0, 23.0]
对于任何几何对象,GEOSGeometry.coords
属性可用于获取几何坐标作为 Python 元组
>>> pnt.coords
(5.0, 23.0)
您可以使用标准 Python 索引技术获取/设置几何组件。但是,返回的内容取决于对象的几何类型。例如,对 LineString
进行索引将返回一个坐标元组
>>> from django.contrib.gis.geos import LineString
>>> line = LineString((0, 0), (0, 50), (50, 50), (50, 0), (0, 0))
>>> line[0]
(0.0, 0.0)
>>> line[-2]
(50.0, 0.0)
而对 Polygon
进行索引将返回与索引对应的环(LinearRing
对象)
>>> from django.contrib.gis.geos import Polygon
>>> poly = Polygon(((0.0, 0.0), (0.0, 50.0), (50.0, 50.0), (50.0, 0.0), (0.0, 0.0)))
>>> poly[0]
<LinearRing object at 0x1044395b0>
>>> poly[0][-2] # second-to-last coordinate of external ring
(50.0, 0.0)
此外,可以添加或修改几何图形的坐标/组件,就像 Python 列表一样
>>> line[0] = (1.0, 1.0)
>>> line.pop()
(0.0, 0.0)
>>> line.append((1.0, 1.0))
>>> line.coords
((1.0, 1.0), (0.0, 50.0), (50.0, 50.0), (50.0, 0.0), (1.0, 1.0))
几何支持类集合运算符
>>> from django.contrib.gis.geos import LineString
>>> ls1 = LineString((0, 0), (2, 2))
>>> ls2 = LineString((1, 1), (3, 3))
>>> print(ls1 | ls2) # equivalent to `ls1.union(ls2)`
MULTILINESTRING ((0 0, 1 1), (1 1, 2 2), (2 2, 3 3))
>>> print(ls1 & ls2) # equivalent to `ls1.intersection(ls2)`
LINESTRING (1 1, 2 2)
>>> print(ls1 - ls2) # equivalent to `ls1.difference(ls2)`
LINESTRING(0 0, 1 1)
>>> print(ls1 ^ ls2) # equivalent to `ls1.sym_difference(ls2)`
MULTILINESTRING ((0 0, 1 1), (2 2, 3 3))
相等运算符不检查空间相等性
GEOSGeometry
相等运算符使用 equals_exact()
,而不是 equals()
,即它要求所比较的几何在相同位置具有相同的坐标,并且 SRID 相同
>>> from django.contrib.gis.geos import LineString
>>> ls1 = LineString((0, 0), (1, 1))
>>> ls2 = LineString((1, 1), (0, 0))
>>> ls3 = LineString((1, 1), (0, 0), srid=4326)
>>> ls1.equals(ls2)
True
>>> ls1 == ls2
False
>>> ls3 == ls2 # different SRIDs
False
几何对象¶
GEOSGeometry
¶
-
class
GEOSGeometry
(geo_input, srid=None)¶ 参数 - geo_input – 几何输入值(字符串或
memoryview
) - srid (int) – 空间参考标识符
- geo_input – 几何输入值(字符串或
这是所有 GEOS 几何对象的基类。它在给定的 geo_input
参数上初始化,然后假定适当的几何子类(例如,GEOSGeometry('POINT(1 1)')
将创建一个 Point
对象)。
如果给出了 srid
参数,则将其设置为创建的几何的 SRID(如果 geo_input
没有 SRID)。如果通过 geo_input
和 srid
参数提供了不同的 SRID,则会引发 ValueError
>>> from django.contrib.gis.geos import GEOSGeometry
>>> GEOSGeometry("POINT EMPTY", srid=4326).ewkt
'SRID=4326;POINT EMPTY'
>>> GEOSGeometry("SRID=4326;POINT EMPTY", srid=4326).ewkt
'SRID=4326;POINT EMPTY'
>>> GEOSGeometry("SRID=1;POINT EMPTY", srid=4326)
Traceback (most recent call last):
...
ValueError: Input geometry already has SRID: 1.
接受以下输入格式及其对应的 Python 类型
格式 | 输入类型 |
---|---|
WKT / EWKT | str |
HEX / HEXEWKB | str |
WKB / EWKB | memoryview |
GeoJSON | str |
对于 GeoJSON 格式,SRID 根据 crs
成员设置。如果未提供 crs
,SRID 将默认为 4326。
-
classmethod
GEOSGeometry.
from_gml
(gml_string)¶ 根据给定的 GML 字符串构造
GEOSGeometry
。
属性¶
-
GEOSGeometry.
coords
¶ 以元组形式返回几何体的坐标。
-
GEOSGeometry.
dims
¶ 返回几何体的维度
0
适用于Point
和MultiPoint
1
适用于LineString
和MultiLineString
2
适用于Polygon
和MultiPolygon
-1
适用于空的GeometryCollection
- 非空
GeometryCollection
的最大维度
-
GEOSGeometry.
empty
¶ 返回几何图形中的点集是否为空。
-
GEOSGeometry.
geom_type
¶ 返回与几何图形类型相对应的字符串。例如
>>> pnt = GEOSGeometry("POINT(5 23)") >>> pnt.geom_type 'Point'
-
GEOSGeometry.
geom_typeid
¶ 返回 GEOS 几何图形类型识别号。下表显示了每种几何图形类型的数值
几何图形 ID 点
0 线串
1 线环
2 多边形
3 多点
4 多线串
5 多边形
6 几何图形集合
7
-
GEOSGeometry.
num_coords
¶ 返回几何图形中的坐标数。
-
GEOSGeometry.
num_geom
¶ 返回此几何中的几何数量。换句话说,除了几何集合外,其他任何内容都将返回 1。
-
GEOSGeometry.
hasz
¶ 返回一个布尔值,指示几何是否是三维的。
-
GEOSGeometry.
ring
¶ 返回一个布尔值,指示几何是否是
LinearRing
。
-
GEOSGeometry.
simple
¶ 返回一个布尔值,指示几何是否是“简单的”。当且仅当几何不与自身相交(边界点除外)时,该几何才简单。例如,如果
LineString
对象与自身相交,则该对象不简单。因此,根据定义,LinearRing
和Polygon
对象始终是简单的,因为它们不能与自身相交。
-
GEOSGeometry.
valid
¶ 返回一个布尔值,指示几何是否有效。
-
GEOSGeometry.
valid_reason
¶ 返回一个字符串,描述几何无效的原因。
-
GEOSGeometry.
srid
¶ 可用于检索或设置与几何关联的 SRID 的属性。例如
>>> pnt = Point(5, 23) >>> print(pnt.srid) None >>> pnt.srid = 4326 >>> pnt.srid 4326
输出属性¶
本部分中的属性将 GEOSGeometry
对象导出到其他对象中。此输出可以是字符串、缓冲区甚至另一个对象的形式。
-
GEOSGeometry.
ewkt
¶ 返回几何的“扩展”已知文本。此表示特定于 PostGIS,并且是 OGC WKT 标准的超集。[1]实质上,SRID 会被添加在 WKT 表示之前,例如
SRID=4326;POINT(5 23)
。注意
此属性的输出不包括 PostGIS 在其 EWKT 表示中支持的 3dm、3dz 和 4d 信息。
-
GEOSGeometry.
hex
¶ 以十六进制形式返回此几何的 WKB。请注意,此表示中不包括 SRID 值,因为它不是 OGC 规范的一部分(请改用
GEOSGeometry.hexewkb
属性)。
-
GEOSGeometry.
hexewkb
¶ 以十六进制形式返回此几何的 EWKB。这是 WKB 规范的扩展,其中包括此几何的一部分的 SRID 值。
-
GEOSGeometry.
json
¶ 返回几何的 GeoJSON 表示。请注意,结果不是完整的 GeoJSON 结构,而只是 GeoJSON 结构的
geometry
键内容。另请参见 GeoJSON 序列化器。
-
GEOSGeometry.
geojson
¶ 别名,用于
GEOSGeometry.json
。
-
GEOSGeometry.
ogr
¶ 返回与 GEOS 几何图形对应的
OGRGeometry
对象。
-
GEOSGeometry.
wkb
¶ 返回此几何图形的 WKB(已知二进制)表示形式,作为 Python 缓冲区。不包括 SRID 值,请改用
GEOSGeometry.ewkb
属性。
-
GEOSGeometry.
ewkb
¶ 返回此几何图形的 EWKB 表示形式,作为 Python 缓冲区。这是 WKB 规范的扩展,其中包括此几何图形的一部分的任何 SRID 值。
-
GEOSGeometry.
wkt
¶ 返回几何图形的已知文本(OGC 标准)。
空间谓词方法¶
以下所有空间谓词方法都采用另一个 GEOSGeometry
实例 (other
) 作为参数,并返回一个布尔值。
-
GEOSGeometry.
contains
(other)¶ 如果
other.within(this)
返回True
,则返回True
。
-
GEOSGeometry.
covers
(other)¶ 如果此几何覆盖指定几何,则返回
True
。covers
谓词具有以下等效定义- 其他几何的每个点都是此几何的一个点。
- 两个几何的 DE-9IM 交集矩阵为
T*****FF*
、*T****FF*
、***T**FF*
或****T*FF*
。
如果任一几何为空,则返回
False
。此谓词类似于
GEOSGeometry.contains()
,但更具包容性(即在更多情况下返回True
)。具体而言,与contains()
不同,它不区分边界中的点和几何内部的点。在大多数情况下,covers()
应优先于contains()
。作为附加好处,covers()
更适合优化,因此应该优于contains()
。
-
GEOSGeometry.
crosses
(other)¶ 如果两个几何的 DE-9IM 交集矩阵为
T*T******
(对于一个点和一条曲线、一个点和一个区域或一条线和一个区域)0********
(对于两条曲线),则返回True
。
-
GEOSGeometry.
disjoint
(other)¶ 如果两个几何体的 DE-9IM 交集矩阵为
FF*FF****
,则返回True
。
-
GEOSGeometry.
equals
(other)¶ 如果两个几何体的 DE-9IM 交集矩阵为
T*F**FFF*
,则返回True
。
-
GEOSGeometry.
equals_exact
(other, tolerance=0)¶ 如果两个几何体完全相等,且在指定容差范围内,则返回 true。
tolerance
值应为表示比较中误差容差的浮点数,例如,poly1.equals_exact(poly2, 0.001)
将在千分之一单位内比较相等性。
-
GEOSGeometry.
equals_identical
(other)¶ - Django 5.0 中的新增功能。
如果两个几何体通过检查所有顶点的结构、顺序和值在所有维度上都相同,则返回
True
。NaN
值被认为等于其他NaN
值。需要 GEOS 3.12。
-
GEOSGeometry.
intersects
(other)¶ 如果
GEOSGeometry.disjoint()
为False
,则返回True
。
-
GEOSGeometry.
overlaps
(other)¶ 如果两个几何图形的 DE-9IM 交叉矩阵为
T*T***T**
(对于两个点或两个曲面)1*T***T**
(对于两条曲线),则返回 true。
-
GEOSGeometry.
relate_pattern
(other, pattern)¶ 如果此几何图形和另一个几何图形的 DE-9IM 交叉矩阵中的元素与给定的
pattern
匹配,则返回True
,该模式是由字母表中的九个字符组成的字符串:{T
,F
,*
,0
}。
-
GEOSGeometry.
touches
(other)¶ 如果两个几何图形的 DE-9IM 交叉矩阵为
FT*******
,F**T*****
或F***T****
,则返回True
。
-
GEOSGeometry.
within
(other)¶ 如果两个几何图形的 DE-9IM 交叉矩阵为
T*F**F***
,则返回True
。
拓扑方法¶
-
GEOSGeometry.
buffer
(width, quadsegs=8)¶ 返回一个
GEOSGeometry
,它表示与该几何图形距离小于或等于给定width
的所有点。可选的quadsegs
关键字设置用于近似四分之一圆的线段数(默认为 8)。
-
GEOSGeometry.
buffer_with_style
(width, quadsegs=8, end_cap_style=1, join_style=1, mitre_limit=5.0)¶ 与
buffer()
相同,但允许自定义缓冲区的样式。end_cap_style
可以是圆形 (1
)、平坦 (2
) 或方形 (3
)。join_style
可以是圆形 (1
)、斜接 (2
) 或斜角 (3
)。- 斜接比率限制 (
mitre_limit
) 仅影响斜接连接样式。
-
GEOSGeometry.
difference
(other)¶ 返回一个
GEOSGeometry
,表示构成此几何图形但未构成其他几何图形的点。
-
GEOSGeometry.
interpolate
(distance)¶
-
GEOSGeometry.
interpolate_normalized
(distance)¶ 给定一个距离(浮点数),返回几何图形(
LineString
或MultiLineString
)中位于该距离处的点(或最近的点)。归一化版本将距离作为 0(起点)和 1(终点)之间的浮点数。与
GEOSGeometry.project()
相反。
-
GEOSGeometry.
intersection
(other)¶ 返回一个
GEOSGeometry
,表示此几何图形和 other 共有的点。
-
GEOSGeometry.
project
(point)¶
-
GEOSGeometry.
project_normalized
(point)¶ 返回几何图形(
LineString
或MultiLineString
)的起点到投影到几何图形上的点(即到距离给定点最近的线上的点)的距离(浮点数)。归一化版本将距离作为 0(起点)和 1(终点)之间的浮点数返回。
-
GEOSGeometry.
relate
(other)¶ 返回表示此几何图形与其他几何图形之间的拓扑关系的 DE-9IM 交叉矩阵(一个字符串)。
-
GEOSGeometry.
simplify
(tolerance=0.0, preserve_topology=False)¶ 返回一个新的
GEOSGeometry
,使用道格拉斯-普克算法简化为指定容差。较高的容差值意味着输出中的点数更少。如果没有提供容差,则默认为 0。默认情况下,此函数不保留拓扑。例如,
Polygon
对象可以被分割、折叠成线或消失。Polygon
孔可以创建或消失,并且线可能会交叉。通过指定preserve_topology=True
,结果将具有与输入相同的维度和组件数量;但是,这会显著降低速度。
-
GEOSGeometry.
sym_difference
(other)¶ 返回一个
GEOSGeometry
,它组合了此几何图形中不在其他几何图形中的点,以及其他几何图形中不在此几何图形中的点。
-
GEOSGeometry.
union
(other)¶ 返回一个
GEOSGeometry
,表示此几何图形和另一个几何图形中的所有点。
拓扑属性¶
-
GEOSGeometry.
boundary
¶ 返回边界作为一个新分配的几何图形对象。
-
GEOSGeometry.
unary_union
¶ 计算此几何图形中所有元素的并集。
结果遵循以下契约
- 合并一组
LineString
的效果是对线形进行完全节点化和溶解。 - 合并一组
Polygon
始终会返回一个Polygon
或MultiPolygon
几何(与GEOSGeometry.union()
不同,后者如果发生拓扑折叠,可能会返回低维几何)。
- 合并一组
其他属性和方法¶
-
GEOSGeometry.
area
¶ 此属性返回几何的面积。
-
GEOSGeometry.
extent
¶ 此属性返回此几何的范围,为一个 4 元组,由
(xmin, ymin, xmax, ymax)
组成。
-
GEOSGeometry.
clone
()¶ 此方法返回一个
GEOSGeometry
,它是原几何的克隆。
-
GEOSGeometry.
distance
(geom)¶ 返回此几何图形与给定
geom
(另一个GEOSGeometry
对象)上最近点之间的距离。注意
GEOS 距离计算是线性的 - 换句话说,即使 SRID 指定了地理坐标系,GEOS 也不会执行球面计算。
-
GEOSGeometry.
length
¶ 返回此几何图形的长度(例如,
Point
为 0,LineString
的长度,或Polygon
的周长)。
-
GEOSGeometry.
prepared
¶ 返回此几何图形内容的 GEOS
PreparedGeometry
。PreparedGeometry
对象针对包含、相交、覆盖、交叉、不相交、重叠、相切和在内部操作进行了优化。有关更多信息,请参阅 已准备几何图形 文档。
-
GEOSGeometry.
srs
¶ 返回一个
SpatialReference
对象,该对象对应于几何的 SRID 或None
。
-
GEOSGeometry.
transform
(ct, clone=False)¶ 根据给定的坐标转换参数 (
ct
) 转换几何,该参数可以是整数 SRID、空间参考 WKT 字符串、PROJ 字符串、SpatialReference
对象或CoordTransform
对象。默认情况下,几何将就地转换,并且不返回任何内容。但是,如果设置了clone
关键字,则不会修改几何,而是返回几何的转换克隆。注意
如果 GDAL 不可用于或几何的 SRID 为
None
或小于 0,则引发GEOSException
。如果使用CoordTransform
对象调用它,则不会对几何的 SRID 施加任何约束。
-
GEOSGeometry.
make_valid
()¶ 返回一个有效的
GEOSGeometry
等价项,尝试不丢失任何输入顶点。如果几何图形已经有效,则原样返回。这类似于MakeValid
数据库函数。需要 GEOS 3.8。
-
GEOSGeometry.
normalize
(clone=False)¶ 将此几何图形转换为规范形式。如果设置
clone
关键字,则不修改几何图形,而是返回几何图形的规范化克隆>>> g = MultiPoint(Point(0, 0), Point(2, 2), Point(1, 1)) >>> print(g) MULTIPOINT (0 0, 2 2, 1 1) >>> g.normalize() >>> print(g) MULTIPOINT (2 2, 1 1, 0 0)
Point
¶
-
class
Point
(x=None, y=None, z=None, srid=None)¶ 使用表示点分量坐标的参数或使用单个序列坐标实例化
Point
对象。例如,以下内容是等效的>>> pnt = Point(5, 23) >>> pnt = Point([5, 23])
可以通过不传递任何参数或空序列来实例化空的
Point
对象。以下内容是等效的>>> pnt = Point() >>> pnt = Point([])
LineString
¶
-
class
LineString
(*args, **kwargs)¶ LineString
对象使用坐标序列或Point
对象作为参数实例化。例如,以下内容是等效的>>> ls = LineString((0, 0), (1, 1)) >>> ls = LineString(Point(0, 0), Point(1, 1))
此外,
LineString
对象还可以通过传入坐标序列或Point
对象的单个序列来创建>>> ls = LineString(((0, 0), (1, 1))) >>> ls = LineString([Point(0, 0), Point(1, 1)])
可以通过不传递参数或空序列来实例化空
LineString
对象。以下内容是等效的>>> ls = LineString() >>> ls = LineString([])
-
closed
¶ 返回此
LineString
是否闭合。
-
LinearRing
¶
-
class
LinearRing
(*args, **kwargs)¶ LinearRing
对象的构造方式与LineString
对象完全相同,但坐标必须是闭合的,换句话说,第一个坐标必须与最后一个坐标相同。例如>>> ls = LinearRing((0, 0), (0, 1), (1, 1), (0, 0))
请注意,
(0, 0)
是第一个和最后一个坐标 – 如果它们不相等,则会引发错误。-
is_counterclockwise
¶ 返回此
LinearRing
是否逆时针。
-
Polygon
¶
-
class
Polygon
(*args, **kwargs)¶ Polygon
对象可以通过传入表示多边形环的参数来实例化。参数必须是LinearRing
实例,或者可以用来构造LinearRing
的序列。>>> ext_coords = ((0, 0), (0, 1), (1, 1), (1, 0), (0, 0)) >>> int_coords = ((0.4, 0.4), (0.4, 0.6), (0.6, 0.6), (0.6, 0.4), (0.4, 0.4)) >>> poly = Polygon(ext_coords, int_coords) >>> poly = Polygon(LinearRing(ext_coords), LinearRing(int_coords))
-
classmethod
from_bbox
(bbox)¶ 从给定的边界框(包含
(xmin, ymin, xmax, ymax)
的 4 元组)返回一个多边形对象。
-
num_interior_rings
¶ 返回此几何图形中的内部环数。
-
classmethod
比较多边形
请注意,可以使用 <
或 >
直接比较 Polygon
对象,但由于比较是通过多边形的 LineString
进行的,因此意义不大(但一致且快速)。您始终可以使用 area
属性强制比较
>>> if poly_1.area > poly_2.area:
... pass
...
几何图形集合¶
MultiPoint
¶
MultiLineString
¶
-
class
MultiLineString
(*args, **kwargs)¶ MultiLineString
对象可以通过传入LineString
对象作为参数,或LineString
对象的单个序列来实例化>>> ls1 = LineString((0, 0), (1, 1)) >>> ls2 = LineString((2, 2), (3, 3)) >>> mls = MultiLineString(ls1, ls2) >>> mls = MultiLineString([ls1, ls2])
-
merged
¶ 返回一个
LineString
,表示此MultiLineString
中所有组件的线合并。
-
closed
¶ 当且仅当所有元素都闭合时,返回
True
。
-
MultiPolygon
¶
几何集合
¶
-
类
几何集合
(*参数, **关键字参数)¶ 几何集合
对象可以通过传递其他GEOSGeometry
作为参数,或GEOSGeometry
对象的单个序列来实例化>>> poly = Polygon(((0, 0), (0, 1), (1, 1), (0, 0))) >>> gc = GeometryCollection(Point(0, 0), MultiPoint(Point(0, 0), Point(1, 1)), poly) >>> gc = GeometryCollection((Point(0, 0), MultiPoint(Point(0, 0), Point(1, 1)), poly))
已准备的几何¶
为了获取已准备的几何,访问 GEOSGeometry.prepared
属性。一旦拥有 PreparedGeometry
实例,其空间谓词方法(如下所列)就可以与其他 GEOSGeometry
对象一起使用。已准备几何的操作可以快几个数量级——已准备几何越复杂,操作速度提升越大。有关更多信息,请参阅 已准备几何的 GEOS wiki 页面。
例如
>>> from django.contrib.gis.geos import Point, Polygon
>>> poly = Polygon.from_bbox((0, 0, 5, 5))
>>> prep_poly = poly.prepared
>>> prep_poly.contains(Point(2.5, 2.5))
True
几何工厂¶
-
fromfile
(file_h)¶ 参数 file_h(Python file
对象或文件的字符串路径)– 包含空间数据的输入文件返回类型 与文件中空间数据相对应的 GEOSGeometry
示例
>>> from django.contrib.gis.geos import fromfile >>> g = fromfile("/home/bob/geom.wkt")
-
fromstr
(string, srid=None)¶ 参数 返回类型 与字符串中的空间数据相对应的
GEOSGeometry
fromstr(string, srid)
等效于GEOSGeometry(string, srid)
。示例
>>> from django.contrib.gis.geos import fromstr >>> pnt = fromstr("POINT(-90.5 29.5)", srid=4326)
I/O 对象¶
读取器对象¶
读取器 I/O 类从 WKB 和/或 WKT 输入返回一个 GEOSGeometry
实例,该输入提供给其 read(geom)
方法。
-
class
WKBReader
¶ 示例
>>> from django.contrib.gis.geos import WKBReader >>> wkb_r = WKBReader() >>> wkb_r.read("0101000000000000000000F03F000000000000F03F") <Point object at 0x103a88910>
-
class
WKTReader
¶ 示例
>>> from django.contrib.gis.geos import WKTReader >>> wkt_r = WKTReader() >>> wkt_r.read("POINT(1 1)") <Point object at 0x103a88b50>
写入器对象¶
所有 writer 对象都具有 write(geom)
方法,该方法返回给定几何的 WKB 或 WKT。此外,WKBWriter
对象还具有可用于更改字节顺序或包含 SRID 值(即 EWKB)的属性。
-
class
WKBWriter
(dim=2)¶ WKBWriter
可以最大程度地控制其输出。默认情况下,在调用其write
方法时,它会返回符合 OGC 的 WKB。但是,它具有允许创建 EWKB(WKB 标准的超集,其中包含其他信息)的属性。有关dim
参数的更多详细信息,请参见WKBWriter.outdim
文档。-
write
(geom)¶
将给定几何的 WKB 作为 Python
buffer
对象返回。示例>>> from django.contrib.gis.geos import Point, WKBWriter >>> pnt = Point(1, 1) >>> wkb_w = WKBWriter() >>> wkb_w.write(pnt) <read-only buffer for 0x103a898f0, size -1, offset 0 at 0x103a89930>
-
write_hex
(geom)¶
以十六进制返回几何的 WKB。示例
>>> from django.contrib.gis.geos import Point, WKBWriter >>> pnt = Point(1, 1) >>> wkb_w = WKBWriter() >>> wkb_w.write_hex(pnt) '0101000000000000000000F03F000000000000F03F'
-
byteorder
¶
可以设置此属性来更改几何表示的字节顺序。
字节顺序值 说明 0 大端序(例如,与 RISC 系统兼容) 1 小端序(例如,与 x86 系统兼容) 示例
>>> from django.contrib.gis.geos import Point, WKBWriter >>> wkb_w = WKBWriter() >>> pnt = Point(1, 1) >>> wkb_w.write_hex(pnt) '0101000000000000000000F03F000000000000F03F' >>> wkb_w.byteorder = 0 '00000000013FF00000000000003FF0000000000000'
-
outdim
¶
此属性可设置为更改几何表示的输出维度。换句话说,如果你有一个 3D 几何,则将其设置为 3,以便 Z 值包含在 WKB 中。
Outdim 值 说明 2 默认,输出 2D WKB。 3 输出 3D WKB。 示例
>>> from django.contrib.gis.geos import Point, WKBWriter >>> wkb_w = WKBWriter() >>> wkb_w.outdim 2 >>> pnt = Point(1, 1, 1) >>> wkb_w.write_hex(pnt) # By default, no Z value included: '0101000000000000000000F03F000000000000F03F' >>> wkb_w.outdim = 3 # Tell writer to include Z values >>> wkb_w.write_hex(pnt) '0101000080000000000000F03F000000000000F03F000000000000F03F'
-
srid
¶
使用布尔值设置此属性以指示几何的 SRID 是否应包含在 WKB 表示中。示例
>>> from django.contrib.gis.geos import Point, WKBWriter >>> wkb_w = WKBWriter() >>> pnt = Point(1, 1, srid=4326) >>> wkb_w.write_hex(pnt) # By default, no SRID included: '0101000000000000000000F03F000000000000F03F' >>> wkb_w.srid = True # Tell writer to include SRID >>> wkb_w.write_hex(pnt) '0101000020E6100000000000000000F03F000000000000F03F'
-
-
class
WKTWriter
(dim=2, trim=False, precision=None)¶ 此类允许输出几何的 WKT 表示。有关构造函数参数的详细信息,请参阅
WKBWriter.outdim
、trim
和precision
属性。-
write
(geom)¶
返回给定几何的 WKT。示例
>>> from django.contrib.gis.geos import Point, WKTWriter >>> pnt = Point(1, 1) >>> wkt_w = WKTWriter() >>> wkt_w.write(pnt) 'POINT (1.0000000000000000 1.0000000000000000)'
-
outdim
¶ 参见
WKBWriter.outdim
。
-
trim
¶
此属性用于启用或禁用不必要小数的修剪。
>>> from django.contrib.gis.geos import Point, WKTWriter >>> pnt = Point(1, 1) >>> wkt_w = WKTWriter() >>> wkt_w.trim False >>> wkt_w.write(pnt) 'POINT (1.0000000000000000 1.0000000000000000)' >>> wkt_w.trim = True >>> wkt_w.write(pnt) 'POINT (1 1)'
-
precision
¶
此属性控制坐标的舍入精度;如果设置为
None
,则禁用舍入。>>> from django.contrib.gis.geos import Point, WKTWriter >>> pnt = Point(1.44, 1.66) >>> wkt_w = WKTWriter() >>> print(wkt_w.precision) None >>> wkt_w.write(pnt) 'POINT (1.4399999999999999 1.6599999999999999)' >>> wkt_w.precision = 0 >>> wkt_w.write(pnt) 'POINT (1 2)' >>> wkt_w.precision = 1 >>> wkt_w.write(pnt) 'POINT (1.4 1.7)'
-
脚注
[1] | 参见 PostGIS EWKB、EWKT 和规范形式,PostGIS 文档第 4.1.2 章。 |