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第三方库


热门话题
java如何提高我的软件项目的速度?   java将Jetty嵌入JavaSE项目   数组中的java重复字符   java我的Shell排序没有按预期工作,我需要一些帮助来找出我做错了什么   java如何在JBoss EAP6/AS7中应用先过滤后安全约束   java使用一个随机运算符来处理多个变量   java为什么我不能在文件中写我的二叉树?   java应用程序不会在Eclipse emulator上运行   我第一次尝试制作一个简单的基于瓷砖的java游戏   java为TermVectors安装Solr修补程序   java无法将更新的对象值从客户端发送到服务器,服务器读取不存在的值   Azure,java sdk,使用ARM模板部署无法转换参数文件   是否有一个Java等价于空合并运算符(?)在C#?   java如果只初始化了超类对象,是否可以调用特定于子类的方法?   向类文件传递值时出现java NullPointerException   java模不起作用   java Android TranslateAnimation动态更新布局的大小   数据结构如何在java中实例化队列对象?   java如果用户选择一些随机的相机应用程序,如何在安卓中正确处理相机意图?