npm地理网格库的python实现-用于处理全局离散地理网格(gdggs)的实用程序
geogrids的Python项目详细描述
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_area或 readable_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.fucks如中所述 http://www.what3fucks.com
- geogrids.encoders.goshdarnits如中所述 http://www.what3goshdarnits.com/
- geogrids.encoders.pokes如中所述 http://www.what3pokemon.com/
- geogrids.encoders.cheeses它在任何地方都没有功能 (AFAIK)
- geogrids.encoders.ducks如
- http://www.what3ducks.com
给定一个位置的数字散列(见上文),这些函数很容易使用:
>>> 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实现。好好享受吧!