Python GeoJSON、WKT 和 __geo_interface__ 变得简单。
项目描述
Geodaisy:让 Python GeoJSON、WKT 和 __geo_interface__ 变得简单
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 不验证坐标。然而。如果您需要验证坐标,您可能会发现Shapely或geojson 之类的库很有帮助,具体取决于您预期的输入和输出。请注意,在创建形状对象时,它们都不能完全验证坐标——您需要先创建一个对象,然后再对其进行验证,这意味着无论您使用 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.txt或pip 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
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。