GEOS API¶
背景¶
什么是 GEOS?¶
GEOS 代表 **Geometry Engine - Open Source**,是一个 C++ 库,移植自 Java Topology Suite。GEOS 实现了 OpenGIS Simple Features for SQL 空间谓词函数和空间运算符。GEOS 现在是 OSGeo 项目,最初由加拿大维多利亚的 Refractions Research 开发和维护。
特性¶
GeoDjango 实现了一个 GEOS 库的高级 Python 包装器,其特性包括
一个 BSD 许可的 GEOS 几何例程接口,使用
ctypes纯 Python 实现。与 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)[source]¶
- 参数:
geo_input – 几何图形输入值(字符串或
memoryview)srid (int) – 空间参考标识符
这是所有 GEOS 几何图形对象的基类。它根据给定的 geo_input 参数进行初始化,然后假定正确的几何图形子类(例如,GEOSGeometry('POINT(1 1)') 将创建一个 Point 对象)。
如果提供 srid 参数,则如果 geo_input 没有 SRID,则将其设置为创建的几何图形的 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 |
|
HEX / HEXEWKB |
|
WKB / EWKB |
|
|
对于 GeoJSON 格式,SRID 根据 crs 成员设置。如果未提供 crs,则 SRID 默认为 4326。
- classmethod GEOSGeometry.from_gml(gml_string)¶
从给定的 GML 字符串构造一个
GEOSGeometry。
属性¶
- GEOSGeometry.coords¶
将几何体的坐标作为元组返回。
- GEOSGeometry.dims¶
返回几何体的维度
0用于Point和MultiPoint1用于LineString和MultiLineString2用于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.ogr¶
返回与 GEOS 几何体相对应的
OGRGeometry对象。
- GEOSGeometry.wkb¶
返回此几何图形的 WKB(Well-Known Binary)表示形式,作为 Python 缓冲区。SRID 值不包含在内,请改用
GEOSGeometry.ewkb属性。
- GEOSGeometry.ewkb¶
返回此几何图形的 EWKB 表示形式,作为 Python 缓冲区。这是 WKB 规范的扩展,包括作为此几何图形一部分的任何 SRID 值。
- GEOSGeometry.wkt¶
返回几何图形的 Well-Known Text(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(一个由九个字符组成的字符串,来自字母表:{T、F、*、0})匹配,则返回True。
- 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,表示构成此几何图形但不构成 other 的点。
- 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.interpolate()的反向操作。
- GEOSGeometry.relate(other)¶
返回 DE-9IM 交集矩阵(字符串),表示此几何图形与 other 之间的拓扑关系。
- GEOSGeometry.simplify(tolerance=0.0, preserve_topology=False)¶
返回一个新的
GEOSGeometry,使用道格拉斯-普克算法简化为指定的容差。较高的容差值意味着输出中的点数较少。如果未提供容差,则默认为 0。默认情况下,此函数不保留拓扑。例如,
Polygon对象可以被分割、折叠成线或消失。Polygon孔可以创建或消失,线条可能会交叉。通过指定preserve_topology=True,结果将与输入具有相同的维度和组件数量;但是,这会大大降低速度。
- GEOSGeometry.sym_difference(other)¶
返回一个
GEOSGeometry,组合此几何图形中不在 other 中的点,以及 other 中不在此几何图形中的点。
- GEOSGeometry.union(other)¶
返回一个
GEOSGeometry,表示此几何图形和 other 中的所有点。
拓扑属性¶
- GEOSGeometry.boundary¶
返回边界作为新分配的 Geometry 对象。
- GEOSGeometry.unary_union¶
计算此几何图形所有元素的并集。
结果遵循以下约定
对一组
LineString进行并集运算,将完全对线段进行节点化和融合。对一组
Polygon进行并集运算,将始终返回Polygon或MultiPolygon几何图形(与GEOSGeometry.union()不同,如果发生拓扑折叠,后者可能会返回较低维度的几何图形)。
其他属性和方法¶
- GEOSGeometry.area¶
此属性返回几何图形的面积。
- GEOSGeometry.extent¶
此属性返回此几何图形的范围,表示为一个包含
(xmin, ymin, xmax, ymax)的 4 元组。
- GEOSGeometry.clone()¶
此方法返回一个
GEOSGeometry,它是原始几何图形的克隆。
- GEOSGeometry.distance(geom)¶
返回此几何图形与给定
geom(另一个GEOSGeometry对象)上最近点的距离。注意
GEOS 距离计算是线性的——换句话说,即使 SRID 指定了地理坐标系,GEOS 也不会执行球面计算。
- GEOSGeometry.length¶
返回此几何图形的长度(例如,
Point为 0,LineString的长度或Polygon的周长)。
- GEOSGeometry.prepared¶
返回此几何图形内容的 GEOS
PreparedGeometry。PreparedGeometry对象针对 contains、intersects、covers、crosses、disjoint、overlaps、touches 和 within 操作进行了优化。有关更多信息,请参阅 准备好的几何图形 文档。
- GEOSGeometry.srs¶
返回与几何图形的 SRID 对应的
SpatialReference对象或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¶
LineString¶
- class LineString(*args, **kwargs)[source]¶
LineString对象使用作为坐标序列或Point对象的参数进行实例化。例如,以下等效>>> ls = LineString((0, 0), (1, 1)) >>> ls = LineString(Point(0, 0), Point(1, 1))
此外,还可以通过传入坐标或
Point对象的单个序列来创建LineString对象。>>> 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)[source]¶
LinearRing对象的构造方式与LineString对象完全相同,但是坐标必须是闭合的,换句话说,第一个坐标必须与最后一个坐标相同。例如>>> ls = LinearRing((0, 0), (0, 1), (1, 1), (0, 0))
请注意,
(0, 0)是第一个和最后一个坐标——如果它们不相等,则会引发错误。
Polygon¶
- class Polygon(*args, **kwargs)[source]¶
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))
比较多边形
请注意,可以使用 < 或 > 直接比较 Polygon 对象,但由于比较是通过 Polygon 的 LineString 进行的,因此意义不大(但一致且快速)。您可以始终使用 area 属性强制进行比较。
>>> if poly_1.area > poly_2.area:
... pass
...
几何图形集合¶
MultiPoint¶
MultiLineString¶
- class MultiLineString(*args, **kwargs)[source]¶
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¶
GeometryCollection¶
- class GeometryCollection(*args, **kwargs)[source]¶
GeometryCollection对象可以通过传入其他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 维基页面上的预处理几何图形。
例如
>>> 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
PreparedGeometry¶
几何图形工厂¶
- fromfile(file_h)[source]¶
- 参数:
file_h (Python
file对象或文件的字符串路径) – 包含空间数据的输入文件。- 返回类型:
与文件中的空间数据相对应的
GEOSGeometry。
示例
>>> from django.contrib.gis.geos import fromfile >>> g = fromfile("/home/bob/geom.wkt")
- fromstr(string, srid=None)[source]¶
- 参数:
- 返回类型:
与字符串中的空间数据相对应的
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 类从其 read(geom) 方法给定的 WKB 和/或 WKT 输入返回一个 GEOSGeometry 实例。
写入器对象¶
所有写入器对象都有一个 write(geom) 方法,该方法返回给定几何图形的 WKB 或 WKT。此外,WKBWriter 对象还具有可用于更改字节顺序和/或包含 SRID 值(换句话说,EWKB)的属性。
- class WKBWriter(dim=2)[source]¶
WKBWriter对其输出提供了最大的控制。默认情况下,当调用其write方法时,它会返回符合 OGC 标准的 WKB。但是,它具有允许创建 EWKB 的属性,EWKB 是 WKB 标准的超集,其中包含其他信息。有关dim参数的更多详细信息,请参阅WKBWriter.outdim文档。将给定几何图形的 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>
以十六进制形式返回几何图形的 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'
可以设置此属性以更改几何图形表示的输出维度。换句话说,如果您有 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 与 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)[source]¶
此类允许输出几何图形的 WKT 表示。有关构造函数参数的详细信息,请参阅
WKBWriter.outdim、trim和precision属性。返回给定几何图形的 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[source]¶
请参阅
WKBWriter.outdim。
此属性用于启用或禁用不必要的小数的修剪。
>>> 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)'
此属性控制坐标的舍入精度;如果设置为
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)'
脚注
设置¶
GEOS_LIBRARY_PATH¶
一个指定 GEOS C 库位置的字符串。通常,仅当 GEOS C 库位于非标准位置时才使用此设置(例如,/home/bob/lib/libgeos_c.so)。
注意
该设置必须是 **C** 共享库的完整路径;换句话说,您希望使用 libgeos_c.so,而不是 libgeos.so。