Skip to main content

Python GeoJSON、WKT 和 __geo_interface__ 变得简单。

项目描述

Geodaisy:让 Python GeoJSON、WKT 和 __geo_interface__ 变得简单

GitHub 许可证 PyPI 版本 特拉维斯

Geodaisy 可帮助您在支持 __geo_interface__ 标准的 GeoJSON、众所周知的文本 (WKT) 和 Python 对象之间相互转换。

Geodaisy 适用于 Python 2 和 Python 3。

这是用来干嘛的?

如果您满足以下条件,Geodaisy 适合您:

  • 有 GeoJSON 并且需要 WKT
  • 有 WKT 并且需要 GeoJSON
  • 有 GeoJSON 或 WKT 并且需要 Python 字典或数组
  • 读取 shapefile 后有一个 Pyshp 形状对象,需要 GeoJSON 或 WKT
  • 有一个 Shapely shape 对象并且需要 GeoJSON 或 WKT
  • 有任何其他带有 __geo_interface__ 的 Python 对象并且需要 GeoJSON 或 WKT
  • 想要一个正确且一致地实现规范的 __geo_interface__ 字典

Geodaisy 提供了一个可以从上述任何格式或对象创建的 GeoObject。GeoObject 方法输出对象的 GeoJSON、WKT 等表示。Geodaisy 还包括单独的转换器,如果您不需要对象,可以单独使用这些转换器。

例子

将 WKT 转换为 GeoJSON

>>> import geodaisy.converters as convert
>>> wkt = 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'
>>> convert.wkt_to_geojson(wkt)
'{"type": "Polygon", "coordinates": [[[30, 10], [40, 40], [20, 40], [10, 20], [30, 10]]]}'

将 GeoJSON 转换为 WKT

>>> import geodaisy.converters as convert
>>> geojson = '{"type": "Polygon", "coordinates": [[[30, 10], [40, 40], [20, 40], [10, 20], [30, 10]]]}'
>>> convert.geojson_to_wkt(geojson)
'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'

使用 geo_interface 从任何 Python 对象创建 GeoObject

>>> from shapely.geometry import Polygon
>>> polygon = Polygon([(30, 10), (40, 40), (20, 40), (10, 20), (30, 10)])
>>> from geodaisy import GeoObject
>>> geo_obj = GeoObject(polygon)
>>> geo_obj
{'type': 'Polygon', 'coordinates': [[(30.0, 10.0), (40.0, 40.0), (20.0, 40.0), (10.0, 20.0), (30.0, 10.0)]]}
>>> geo_obj.type
'Polygon'
>>> geo_obj.coordinates
[[(30.0, 10.0), (40.0, 40.0), (20.0, 40.0), (10.0, 20.0), (30.0, 10.0)]]
>>> geo_obj.geojson()
'{"type": "Polygon", "coordinates": [[[30.0, 10.0], [40.0, 40.0], [20.0, 40.0], [10.0, 20.0], [30.0, 10.0]]]}'
>>> geo_obj.wkt()
'POLYGON ((30.0 10.0, 40.0 40.0, 20.0 40.0, 10.0 20.0, 30.0 10.0))'

为什么要使用它来代替 Shapely 或 geojson 等?

其他库仅提供特定格式的翻译。例如,Shapely 可以往返于 WKT 和 __geo_interface__,但不能往返于 GeoJSON。geojson 可以往返于 GeoJSON 和 __geo_interface__,但不能往返于 WKT。如果您需要不止一种翻译,则需要使用多个库。Geodaisy 可转换为多种格式。

此外,其他一些库,如 Shapely,要重得多。这是有道理的,因为它们还可以做更多的事情——但这也让安装它们变得更加繁琐。Geodaisy 是轻量级的,除了 Python 核心之外没有任何依赖项。

我什么时候应该使用其他东西?

如果您需要验证坐标

Geodaisy 不验证坐标。然而。如果您需要验证坐标,您可能会发现Shapelygeojson 之类的库很有帮助,具体取决于您预期的输入和输出。请注意,在创建形状对象时,它们都不能完全验证坐标——您需要先创建一个对象,然后再对其进行验证,这意味着无论您使用 Geodaisy 还是其他库之一,您最终都可能会创建一个无效的形状。

将来,Geodaisy 将在创建对象时验证坐标。(如果您愿意帮助实现这一目标,欢迎投稿!

请注意,您仍然可以将 Geodaisy其他地理库一起使用,或者作为其他库或对象类型之间的中间人或中介。

如果需要对几何对象进行几何谓词、关系、变换等操作

如果您需要上述任何一项,您可能需要Shapely

如何安装

pip install geodaisy

运行测试

(以下命令假设您位于geodaisy根目录中。)

Geodaisy 使用 pytest 测试框架以及 Shapely 和 geojson 库进行测试。您需要先安装它们pip install -r dev-requirements.txt

如果您使用的是 Python 2 或 3.5 之前的 Python 3 版本,则需要确保typing已安装该模块:pip install -r py2-requirements.txtpip install typing

要运行测试,只需执行pytest.

贡献

非常欢迎贡献!除了上面提到的测试,Geodaisy 还使用 flake8 进行 linting 和 Mypy 进行类型检查。拉取请求需要通过测试以及 flake8 和 Mypy 检查(除非您使用 Python 2 进行开发,在这种情况下您必须跳过 Mypy,因为它需要 Python 3。

(以下命令假设您位于 Geodaisy 根目录中并且已经 pip 安装了开发要求(见上文)。)

运行 flake8:flake8 src tests

要运行 Mypy(如果您使用的是 Python 3):mypy --py2 src

执照

Geodaisy 在MIT 许可下获得许可,可免费用于商业和私人用途。

版权

版权所有 © 2018 Kevin Brochet-Nguyen

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

geodaisy-0.1.1.tar.gz (8.6 kB 查看哈希)

已上传 source

内置分布

geodaisy-0.1.1-py2.py3-none-any.whl (10.3 kB 查看哈希

已上传 py2 py3