地理信息系统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几何例程接口,仅在python中使用 ctypes .

  • 松耦合到geodjango。例如, GEOSGeometry 对象可以在Django项目/应用程序之外使用。换句话说,不需要 DJANGO_SETTINGS_MODULE 设置或使用数据库等。

  • Mutability: 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

另一种选择是使用要创建的特定几何体类型的构造函数。例如,一个 Point 可以通过将X和Y坐标传入其构造函数来创建对象:

>>> 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"))

几何学是 Python 的

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 将归还戒指(a 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 参数,然后假定正确的几何子类(例如, GEOSGeometry('POINT(1 1)') 将创建一个 Point 对象)。

这个 srid 如果满足以下条件,则将参数设置为所创建几何的SRID geo_input 没有SRID。如果不同的SRID通过 geo_inputsrid 参数、 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

六角/HEXEWKB

str

WKB/EWKB

memoryview

GeoJSON

str

对于geojson格式,srid是基于 crs 成员。如果 crs 未提供,srid默认为4326。

classmethod GEOSGeometry.from_gml(gml_string)

构建一个 GEOSGeometry 来自给定的GML字符串。

属性

GEOSGeometry.coords

以元组形式返回几何图形的坐标。

GEOSGeometry.dims

返回几何图形的尺寸:

GEOSGeometry.empty

返回几何图形中的点集是否为空。

GEOSGeometry.geom_type

返回与几何图形类型对应的字符串。例如:

>>> pnt = GEOSGeometry("POINT(5 23)")
>>> pnt.geom_type
'Point'
GEOSGeometry.geom_typeid

返回几何图形类型标识号。下表显示了每种几何图形类型的值:

几何图形

ID

Point

0

LineString

1

LinearRing

2

Polygon

3

MultiPoint

4

MultiLineString

5

MultiPolygon

6

GeometryCollection

7

GEOSGeometry.num_coords

返回几何图形中的坐标数。

GEOSGeometry.num_geom

返回此几何图形中的几何图形数。换言之,除了几何集合之外,将返回1。

GEOSGeometry.hasz

返回指示几何图形是否为三维的布尔值。

GEOSGeometry.ring

返回一个布尔值,指示几何图形是否为 LinearRing .

GEOSGeometry.simple

返回一个布尔值,该布尔值指示几何图形是否“简单”。几何图形是简单的,当且仅当它不与自身相交(边界点除外)。例如,一个 LineString 如果对象本身相交,它就不是简单的。因此, LinearRingPolygon 对象总是简单的,因为根据定义,它们不能自己相交。

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结构,而是 geometry geojson结构的关键内容。也见 GeoJSON 串行化器 .

GEOSGeometry.geojson

Alias GEOSGeometry.json .

GEOSGeometry.kml

返回A `KML`_ _几何图形的(键孔标记语言)表示。这只能用于SRID为4326(wgs84)的几何图形,但不强制执行此限制。

GEOSGeometry.ogr

返回一个 OGRGeometry 与几何图形相对应的对象。

GEOSGeometry.wkb

将此几何图形的wkb(众所周知的二进制)表示形式返回为python缓冲区。不包括srid值,请使用 GEOSGeometry.ewkb 改为属性。

GEOSGeometry.ewkb

将此几何图形的EWKB表示返回为python缓冲区。这是wkb规范的扩展,其中包括属于此几何图形的任何srid值。

GEOSGeometry.wkt

返回几何图形的已知文本(OGC标准)。

空间谓词方法

以下所有空间谓词方法都采用另一种方法 GEOSGeometry 实例 (other )作为参数,并返回布尔值。

GEOSGeometry.contains(other)

返回 True 如果 other.within(this) 收益率 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)

返回 True 如果两个几何图形的de-9im交集矩阵为 T*T****** (对于点和曲线、点和区域或线和区域) 0******** (对于两条曲线)。

GEOSGeometry.disjoint(other)

返回 True 如果两个几何图形的de-9im交集矩阵为 FF*FF**** .

GEOSGeometry.equals(other)

返回 True 如果两个几何图形的de-9im交集矩阵为 T*F**FFF* .

GEOSGeometry.equals_exact(other, tolerance=0)

如果两个几何图形完全相等,则返回“真”,直至达到指定的公差。这个 tolerance 值应该是表示比较中的误差容限的浮点数,例如, poly1.equals_exact(poly2, 0.001) 将等于千分之一单位内。

GEOSGeometry.equals_identical(other)
New in Django 5.0.

退货 True 检查所有顶点的结构、顺序和值在所有维度中是否相同,以确定两个几何图形在点上是等价的。 NaN 值被视为等于其他 NaN 价值观。需要GEOS 3.12。

GEOSGeometry.intersects(other)

返回 True 如果 GEOSGeometry.disjoint()False .

GEOSGeometry.overlaps(other)

如果两个几何图形的de-9im交集矩阵为 T*T***T** (对于两点或两个表面) 1*T***T** (对于两条曲线)。

GEOSGeometry.relate_pattern(other, pattern)

Returns True if the elements in the DE-9IM intersection matrix for this geometry and the other matches the given pattern -- a string of nine characters from the alphabet: {T, F, *, 0}.

GEOSGeometry.touches(other)

返回 True 如果两个几何图形的de-9im交集矩阵为 FT*******F**T*****F***T**** .

GEOSGeometry.within(other)

返回 True 如果两个几何图形的de-9im交集矩阵为 T*F**F*** .

拓扑方法

GEOSGeometry.buffer(width, quadsegs=8)

返回A 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)

返回A GEOSGeometry 表示组成此几何图形的点,而不是组成其他几何图形的点。

GEOSGeometry.interpolate(distance)
GEOSGeometry.interpolate_normalized(distance)

给定距离(浮点),返回几何图形中的点(或最近点) (LineStringMultiLineString )在那个距离。标准化版本将距离作为0(原点)和1(端点)之间的浮点值。

反向 GEOSGeometry.project() .

GEOSGeometry.intersection(other)

返回A GEOSGeometry 表示此几何图形和其他几何图形共享的点。

GEOSGeometry.project(point)
GEOSGeometry.project_normalized(point)

返回到几何图形原点的距离(浮动) (LineStringMultiLineString )投影到几何体上的点(即最接近给定点的直线点)。标准化版本以0(原点)和1(终点)之间的浮点形式返回距离。

反向 GEOSGeometry.interpolate() .

GEOSGeometry.relate(other)

返回表示此几何图形与其他几何图形之间拓扑关系的de-9im交集矩阵(字符串)。

GEOSGeometry.simplify(tolerance=0.0, preserve_topology=False)

返回新的 GEOSGeometry ,使用Douglas-Peucker算法简化为指定的公差。公差值越高,输出点越少。如果没有提供公差,则默认为0。

默认情况下,此函数不保留拓扑。例如, Polygon 对象可以拆分、折叠成线条或消失。 Polygon 孔可以创建或消失,线可以交叉。通过指定 preserve_topology=True ,结果将具有与输入相同的维度和组件数量;但是,这明显较慢。

GEOSGeometry.sym_difference(other)

返回A GEOSGeometry 组合此几何图形中不在其他几何图形中的点,以及其他不在此几何图形中的点。

GEOSGeometry.union(other)

返回A GEOSGeometry 表示此几何图形和其他几何图形中的所有点。

拓扑性质

GEOSGeometry.boundary

将边界作为新分配的几何图形对象返回。

GEOSGeometry.centroid

返回A Point 表示几何图形的几何中心的对象。该点不保证位于几何图形的内部。

GEOSGeometry.convex_hull

返回最小值 Polygon 它包含几何图形中的所有点。

GEOSGeometry.envelope

返回A Polygon 它表示此几何图形的边界封套。请注意,它还可以返回 Point 如果输入几何图形是一个点。

GEOSGeometry.point_on_surface

计算并返回 Point 保证在这个几何体的内部。

GEOSGeometry.unary_union

计算此几何图形中所有元素的并集。

结果符合以下合同:

其他属性和方法

GEOSGeometry.area

此属性返回几何图形的面积。

GEOSGeometry.extent

此属性以4元组的形式返回此几何图形的范围,包括 (xmin, ymin, xmax, ymax) .

GEOSGeometry.clone()

此方法返回 GEOSGeometry 那是原版的复制品。

GEOSGeometry.distance(geom)

返回此几何图形上最近点与给定点之间的距离 geom (另一) GEOSGeometry 对象)。

备注

地理距离计算是线性的——换句话说,即使SRID指定地理坐标系,GEOS也不执行球形计算。

GEOSGeometry.length

返回此几何图形的长度(例如,对于 Point ,a的长度 LineString 或A的周长 Polygon

GEOSGeometry.prepared

返回GEOS PreparedGeometry 用于此几何图形的内容。 PreparedGeometry 对象针对包含、相交、覆盖、交叉、分离、重叠、接触和内部操作进行优化。参考 准备好的几何图形 有关详细信息的文档。

GEOSGeometry.srs

返回A SpatialReference 与几何体的srid相对应的对象或 None .

GEOSGeometry.transform(ct, clone=False)

根据给定的坐标转换参数转换几何图形 (ct ),可以是整数SRID、空间引用WKT字符串、PROJ字符串、a SpatialReference 对象,或 CoordTransform 对象。默认情况下,几何图形将在适当位置转换,不会返回任何内容。但是如果 clone 设置关键字,则不修改几何图形,而是返回几何图形的转换副本。

备注

加薪 GEOSException 如果gdal不可用或几何体的srid为 None 或小于0。如果使用 CoordTransform 对象。

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 对象,但是坐标必须是 closed 换句话说,第一个坐标必须与最后一个坐标相同。例如:

>>> 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)[源代码]

从给定的边界框返回一个多边形对象,由4个元组组成 (xmin, ymin, xmax, ymax) .

num_interior_rings

返回此几何图形中的内环数。

比较多边形

请注意,可以比较 Polygon 对象直接使用 <> ,但由于比较是通过Polygon的 LineString ,它没有太大的意义(但始终如一、迅速)。您始终可以强制使用 area 物业:

>>> if poly_1.area > poly_2.area:
...     pass
...

几何图形集合

MultiPoint

class MultiPoint(*args, **kwargs)[源代码]

MultiPoint 对象可以通过传入 Point 对象作为参数,或单个序列 Point 对象:

>>> mp = MultiPoint(Point(0, 0), Point(1, 1))
>>> mp = MultiPoint((Point(0, 0), Point(1, 1)))

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

返回A LineString 表示此中所有组件的行合并 MultiLineString .

closed

退货 True 当且仅当所有元素都关闭时。

MultiPolygon

class MultiPolygon(*args, **kwargs)[源代码]

MultiPolygon 对象可以通过传递 Polygon 对象作为参数,或单个序列 Polygon 对象:

>>> p1 = Polygon(((0, 0), (0, 1), (1, 1), (0, 0)))
>>> p2 = Polygon(((1, 1), (1, 2), (2, 2), (1, 1)))
>>> mp = MultiPolygon(p1, p2)
>>> mp = MultiPolygon([p1, p2])

GeometryCollection

class GeometryCollection(*args, **kwargs)[源代码]

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 wiki page on prepared geometries .

例如:

>>> 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

class PreparedGeometry

所有方法 PreparedGeometry 拿一个 other 参数,必须是 GEOSGeometry 实例。

contains(other)
contains_properly(other)
covers(other)
crosses(other)
disjoint(other)
intersects(other)
overlaps(other)
touches(other)
within(other)

几何工厂

fromfile(file_h)[源代码]
参数:

file_h (a Python file object or a string path to the file) -- 包含空间数据的输入文件

返回类型:

GEOSGeometry 与文件中的空间数据相对应

示例:

>>> from django.contrib.gis.geos import fromfile
>>> g = fromfile("/home/bob/geom.wkt")
fromstr(string, srid=None)[源代码]
参数:
  • string (str) -- 包含空间数据的字符串

  • srid (int) -- 空间引用标识符

返回类型:

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类返回一个 GEOSGeometry wkb和/或wkt输入的实例 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 方法被调用。但是,它的属性允许创建ewkb,这是wkb标准的超集,包含附加信息。见 WKBWriter.outdim 有关 dim 参数。

write(geom)[源代码]

以Python形式返回给定几何的WKB 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

小endian(例如,与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

此属性可以设置为更改几何图形表示的输出尺寸。换句话说,如果您有一个三维几何图形,那么设置为3,以便Z值包含在WKB中。

外差值

描述

2

默认值,输出2d wkb。

3

输出三维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.outdimtrimprecision 有关构造函数参数的详细信息的属性。

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)'

脚注

设置

GEOS_LIBRARY_PATH

指定geos c库位置的字符串。通常,仅当geos c库位于非标准位置(例如, /home/bob/lib/libgeos_c.so

备注

设置必须是 full 路径到 C 共享库;换句话说,您要使用 libgeos_c.so 不是 libgeos.so .

例外情况

exception GEOSException[源代码]

基本GEOS异常,表示与GEOS相关的错误。