__geo_interface__的基本实现
项目描述
简介
PyGeoIf提供了一个类似于GeoJSON的协议,用于地理空间(GIS)矢量数据。
您可能听说过的其他实现此协议的Python程序和包
当您想要编写支持此协议的自己的地理空间库时,可以使用pygeoif作为起点,并在其基础上构建功能。它没有超出Python标准库的要求,因此易于集成到您的项目中。它已在CPython和PyPy上进行了测试,但也应该在实现语言规范>=3.8的替代Python实现上工作。
PyGeoIf可以被看作是一种“轻量级shapely”,它允许您构建几何形状并执行一些基本操作,例如从WKT中读取和写入几何形状、从点构建线字符串、从线性环构建多边形、从多边形构建多边形等。它受到shapely的启发,并以一种方式实现了几何形状,当您熟悉PyGeoIf时,您会感觉在shapely中非常自在,反之亦然。它为所有几何形状提供Hypothesis策略,以进行基于属性的测试,使用Hypothesis。
它被编写来为fastkml提供干净且仅使用Python的几何形状。
安装
您可以使用pip从PyPI安装PyGeoIf。
pip install pygeoif
示例
>>> from pygeoif import geometry
>>> p = geometry.Point(1,1)
>>> p.__geo_interface__
{'type': 'Point', 'bbox': (1, 1, 1, 1), 'coordinates': (1, 1)}
>>> print(p)
POINT (1 1)
>>> p
Point(1, 1)
>>> l = geometry.LineString([(0.0, 0.0), (1.0, 1.0)])
>>> l.bounds
(0.0, 0.0, 1.0, 1.0)
>>> print(l)
LINESTRING (0.0 0.0, 1.0 1.0)
类
所有类都实现了属性
__geo_interface__:如上所述,一个用于GeoJSON的接口。
所有几何类都实现了属性
geom_type:返回一个指定对象几何类型的字符串
bounds:返回一个(minx, miny, maxx, maxy)元组,该元组定义了对象的边界。
wkt:返回对象的“已知文本”表示形式
对于二维几何形状,实现了以下方法
convex_hull:返回包含对象中所有点的最小凸多边形的表示形式,除非对象中的点数少于三个。对于两个点,凸包折叠为LineString;对于1个点,为Point。对于三维对象,仅考虑其在xy平面上的投影。没有坐标的空对象返回None作为凸包。
Point
零维几何形状
一个点没有长度和面积。一个点不能为空。
属性
- x, y, zfloat
坐标值
示例
LineString
由一个或多个线段组成的一维图形
LineString具有非零长度和零面积。它可能近似一个曲线,不一定直线。与LinearRing不同,LineString不是封闭的。
属性
- geomssequence
点的序列
LinearRing
由一个或多个线段组成的封闭的一维几何形状
如果LinearRing交叉自身或在一个点上触及自身,则它是无效的,并且对其进行的操作可能会失败。
LinearRing是自闭合的。
Polygon
由线性环界定的二维图形
多边形具有非零面积。它可能有一个或多个由线性环界定的负空间“孔”。如果任何环交叉,则几何形状无效,对其进行的操作可能会失败。
属性
- exteriorLinearRing
界定多边形正空间的环。
- interiorssequence
一个序列,界定所有现有孔的环。
- maybe_valid: boolean
当多边形有明显的错误,如自交叉线或位于外部边界之外的孔时,此值将返回False。即使此返回值为True,几何形状可能仍然无效,但如果此返回值为False,您确实有问题。
MultiPoint
一个或多个点的集合。
属性
- geomssequence
点的序列。
MultiLineString
一个或多个线字符串的集合。
MultiLineString具有非零长度和零面积。
属性
- geomssequence
LineStrings的序列
MultiPolygon
一个或多个多边形的集合。
属性
- geomssequence
Polygon实例的序列
GeometryCollection
异构几何集合(点、线串、线性环和多边形)。
属性
- geomssequence
几何实例的序列
请注意:GEOMETRYCOLLECTION 不受 Shapefile 或 GeoJSON 格式支持。并且这个子类通常不被普通 GIS 软件(查看器等)支持。因此,在现实世界的 GIS 专业领域中很少使用。
示例
>>> from pygeoif import geometry
>>> p = geometry.Point(1.0, -1.0)
>>> p2 = geometry.Point(1.0, -1.0)
>>> geoms = [p, p2]
>>> c = geometry.GeometryCollection(geoms)
>>> [geom for geom in geoms]
[Point(1.0, -1.0), Point(1.0, -1.0)]
要素
将几何实例与其相关联的用户定义属性聚合。
属性
- geometry对象
一个几何实例
- properties字典
一个字典,将字段键与与几何实例相关联的值联系起来
示例
>>> from pygeoif import Point, Feature
>>> p = Point(1.0, -1.0)
>>> props = {'Name': 'Sample Point', 'Other': 'Other Data'}
>>> a = Feature(p, props)
>>> a.properties
{'Name': 'Sample Point', 'Other': 'Other Data'}
>>> a.properties['Name']
'Sample Point'
FeatureCollection
要素的异构集合
属性
- features: 序列
要素实例的序列
示例
>>> from pygeoif import Point, Feature, FeatureCollection
>>> p = Point(1.0, -1.0)
>>> props = {'Name': 'Sample Point', 'Other': 'Other Data'}
>>> a = Feature(p, props)
>>> p2 = Point(1.0, -1.0)
>>> props2 = {'Name': 'Sample Point2', 'Other': 'Other Data2'}
>>> b = Feature(p2, props2)
>>> features = [a, b]
>>> c = FeatureCollection(features)
>>> [feature for feature in c]
[Feature(Point(1.0, -1.0), {'Name': 'Sample Point', 'Other': 'Other Data'},...]
函数
shape
从提供 __geo_interface__ 或任何 GeoJSON 兼容字典的对象创建 pygeoif 要素。
>>> from shapely.geometry import Point
>>> from pygeoif import geometry, shape
>>> shape(Point(0,0))
Point(0.0, 0.0)
from_wkt
从其 WKT 表示创建几何形状。
>>> from pygeoif import from_wkt
>>> p = from_wkt('POINT (0 1)')
>>> print(p)
POINT (0.0 1.0)
signed_area
返回环所包围的符号面积。值 >= 0 表示逆时针方向的环。
orient
返回一个多边形的副本,其外部和内部具有正确的方向。
如果 ccw 为 True,则外部将在逆时针方向,内部将在顺时针方向,或者当 ccw 为 False 时相反。
box
返回具有可配置法向量的矩形多边形。
mapping
返回 __geo_interface__ 字典。
开发
克隆此存储库,使用 Python 3.8 或更高版本创建虚拟环境,并使用 python3 -m venv .venv 安装它,然后使用 source .venv/bin/activate 激活它。
然后使用 pip install -e ".[dev]" 安装依赖项。
pre-commit
使用以下命令安装 pre-commit 挂钩:
pip install pre-commit pre-commit install
并使用以下命令检查代码:
pre-commit run --all-files
测试
使用以下命令运行单元测试和静态测试:
pytest tests pytest --doctest-glob="README.rst" black pygeoif ruff pygeoif flake8 pygeoif mypy pygeoif
致谢
使用 mutmut 改进了测试,它发现了一些令人讨厌的边缘情况。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分布
构建分布
pygeoif-1.5.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3ef7c5a98acfea3c5af1e8856184d538f3d216e12f3180fe0c1aa829933f5eb6 |
|
MD5 | e0d16184fb4ed30db3d20056e7fc5014 |
|
BLAKE2b-256 | 91c612557ff83a1184478c4630b20678a24e535d75a7eb6c6c0f59e6266ac6e7 |
pygeoif-1.5.0-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d8b4e08f1ce5228286cb92a1c4f8418482d578a9c17eff15dac2af08b65900ee |
|
MD5 | 4477dc5f87bb5f5adcbe164fc1f60d40 |
|
BLAKE2b-256 | 2bafa173f5db8a431a23b4f8f52000964f94b6d649a79ae9185762601b958650 |