npm地理网格库的python实现-用于处理全局离散地理网格(gdggs)的实用程序

geogrids的Python项目详细描述


Latest PyPI version

npm的Python实现 geogrids库由Iván Sánchez Ortega-实用程序 使用全球离散大地测量网格(GDGGS)。

此模块包含可用于生成 散列或获取has并生成一个位置,以及一个编码器 可以将代码转换为(希望)有用文本的模块 字符串。

这是用原始库中的默认编码器编写的,并且 可以很容易地扩展到使用您选择的文本集。

用法

库有两个组件:

表示位置

给定具有经纬度的位置,例如: -35.6498150.2935您可以轻松地创建一个散列 字符串或数值:

>>> latitude = -35.6498
>>> longitude = 150.2935
>>> import geogrids
>>> geogrids.gdgg.latitude_longitude_to_readable_hash(latitude=latitude, longitude=longitude)
'702020210311'
>>> geogrids.gdgg.latitude_longitude_to_numeric_hash(latitude=latitude, longitude=longitude)
12108871

当然你也可以往另一个方向走:

>>> geogrids.gdgg.numeric_hash_to_latitude_longitude(12108871)
(-35.65283203125, 150.2789682218808)
>>> geogrids.gdgg.readable_hash_to_latitude_longitude('702020210311')
(-35.65283203125, 150.2789682218808)

注意散列是取决于级别的位置近似值。 精度-精度越高,精度越好:

>>> numeric_hash = geogrids.gdgg.latitude_longitude_to_numeric_hash(latitude=latitude, longitude=longitude, precision=55)
>>> geogrids.gdgg.numeric_hash_to_latitude_longitude(numeric_hash, precision=55)
(-35.64979965984821, 150.2934998246466)

这些散列有效地定义了三角形区域内的位置, 您可以从numeric_hash_to_areareadable_hash_to_area函数,返回 Location对象(通常是三角形区域的三个顶点, 但是为了简化,接近极点的默认值是返回 方框):

>>> vertices = geogrids.gdgg.numeric_hash_to_area(numeric_hash)
>>> vertices
[<Location [702020210311]>, <Location [702020210311]>, <Location [702020210311]>]
>>> vertices[0].latitude, vertices[0].longitude
(-35.63964843750004, 150.24252223120465)

总的来说,最好还是保持在散列和纬度上。 和经度,但是Location对象确实实现了 __geo_feature__ 接口,这意味着您可以将它与使用 这个接口用于更复杂的几何操作,例如 通过Shapely库:

>>> from shapely import geometry
>>> points = [geometry.shape(vertex) for vertex in vertices]
>>> line = geometry.LineString(points)
>>> line.length
0.11570586750499379
>>> polygon = geometry.Polygon(line)
>>> polygon.area
0.0015986572857657128

编码和解码散列

编码器允许您将散列转换为易于记忆的 再绕一圈。开箱即用 编码器:

给定一个位置的数字散列(见上文),这些函数很容易使用:

>>> geogrids.encoders.cheeses.hash_to_string(numeric_hash, precision=25)
'Dubliner Requeijão Provolone Telemea'
>>> geogrids.encoders.cheeses.hash_to_string(numeric_hash, precision=55)
'Dubliner Requeijão Provolone Telemea Danablu Coulommiers Chevrotin'

或者考虑到可读编码,可以简单地从另一个方向返回:

>>> numeric_hash, precision = geogrids.encoders.cheeses.string_to_hash('Dubliner Requeijão Provolone Telemea')
>>> numeric_hash, precision
(3870868551, 32)
>>> geogrids.gdgg.numeric_hash_to_latitude_longitude(numeric_hash, precision)
(-35.647064208984375, 150.2948563112389)

如果不想使用内置编码器之一,可以生成 你自己很容易:

>>> wordlist = list('???????⚽????????')

note单词列表的长度应该是2的幂-级别 用于计算精度的四舍五入到 两个-数字后的任何单词都将被跳过。

>>> emoji_encoder = geogrids.encoders.Encoder(wordlist, separator='')
>>> emoji_encoder.hash_to_string(numeric_hash, precision)
'⚽???????'

警告编码器的一个关键注意事项:如果您创建 编码并与其他人共享单词列表必须完全位于 同样的命令!否则解码时你会完全不同 结果!

>>> numeric_hash, precision = emoji_encoder.string_to_hash('⚽???????')
>>> geogrids.gdgg.numeric_hash_to_latitude_longitude(numeric_hash, precision)
(-35.647064208984375, 150.2948563112389)

安装

pip install geogrids

要求

geogrids没有任何第三方库要求

兼容性

Python3.5+

许可证

这是你他妈的想要什么就做什么的执照 是最初的js实现。好好享受吧!

作者

geogrids由Henry Walshaw用Python编写,从 伊万·桑切斯·奥尔特加的NPM地理网格库

ducks编码器由Adam Steer提供

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
javagae/JPA/Datastore如何查询无主列表   java从xml中读取未知元素   java如何在控制台上显示MavReplugin单元测试覆盖率报告   java什么被认为是遍历LDAP DIT的正确方法?   Eclipse(Java)在创建了一个新包之后,我无法向其中添加源文件   java new REngine启动并立即停止   java Android:如何从保存在SQLite数据库中的listview中删除项目?   找不到java Gradle DSL方法:“compile()”错误   java使用POI获取具有特定列名的每一行中的值   java解析JSON文件   java中断for循环,返回4个结果,而不是2个   LDAP处理过程中发生java未分类异常;嵌套的异常是javax。命名。NamingException   当表单在基于spring3注释的控制器中验证失败时,java引用数据将丢失   java Android,从web获取数据并更新UI(多线程和MVC设计模式)   用于OS X Yosemite的java优化Swing程序