`
pypy
  • 浏览: 92091 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

geohash的应用 附近地址搜索

阅读更多
http://en.wikipedia.org/wiki/Geohash

简单使用 geohash, redis,bottle, python-geohash 来实现 restful api的地理位置附近人搜素

from bottle import Bottle, run
import time
import json

from redis_pool import Redis                                                   
R = Redis().connection_pool() 

import geohash

app = Bottle()

@app.route('/v1/mark/<longitude:float>/<latitude:float>')
def mark_police(longitude, latitude):
    geo_encode = geohash.encode(longitude, latitude, 12)
    R.set(geo_encode, time.time())
    return json.dumps({"code":"success", "msg":{"geohash":geo_encode}})

@app.route('/v1/show/<longitude:float>/<latitude:float>')
def show(longitude, latitude):
    geo_encode = geohash.encode(longitude, latitude, 7)
    eight = geohash.expand(geo_encode)
    response = []
    for e in eight:
        response.extend([geohash.decode(i) for i in R.keys("%s*"%e)])
    return json.dumps({"code":"success", "msg":response})

run(server='eventlet', app=app, host='0.0.0.0', port=9090)


依赖的redis封装class

import redis

class Redis(object):
    pool=None
    R = None
    def __init__(self, host='localhost', port=6379, max_connections=2048):
        self.host=host
        self.port=port
        self.max_connections=int(max_connections)
        self.pool = redis.ConnectionPool(host=host, 
                port=port, db=0, 
                max_connections=max_connections)
    
    def connection_pool(self):
        if not self.R:
            self.R = redis.Redis(connection_pool=self.pool)
        return self.R


API 接口使用example

1. 标记 user 位置
http://localhost:9090/v1/mark/longitude/latitude

example: http://localhost:9090/v1/mark/12.1256/22.22

            
 {"msg": {"geohash": "s6pucxkhex8v"}, "code": "success"}


2. 用户请求周围1km内的 其他 user 位置信息
http://localhost:9090/v1/show/longitude/latitude

example: http://localhost:9090/v1/show/12.1256/22.22
              
             
 {"msg": [[12.123455917462707, 22.220000009983778], [12.125600008293986, 22.220000009983778]], "code": "success"}




注:
   longitude 经度
   latitude   纬度
   均为float 型
分享到:
评论

相关推荐

    geohash:一个解决计算附近距离的php类库

    结合现代Web开发框架,`geohash`可以无缝融入各种地理位置相关的应用场景,如社交网络的“附近的人”功能、本地搜索服务以及地图应用等。在处理大量地理位置数据时,`geohash`的效率优势尤为明显,极大地优化了性能...

    Android-java中的Geohash工具类

    在Android应用中,Geohash可以用于地图应用的搜索功能,比如寻找附近的餐馆或景点;也可以用于社交应用,帮助用户找到附近的其他用户。此外,它还可以用于位置跟踪和地理围栏,当用户进入或离开特定区域时触发通知。...

    nodejs geohash

    通过Geohash编码,可以快速查找附近的兴趣点、实现地图上的搜索过滤等功能,极大地优化了空间数据的存储和查询效率。 总之,"nodejs geohash"是Node.js开发中处理地理信息的一种有效工具,它利用Geohash算法将...

    Java实现GeoHash算法

    在实际应用中,Java实现的GeoHash算法常用于地理信息系统(GIS)、位置服务和物联网(IoT)等领域,帮助优化空间数据的存储和查询性能。 为了更好地理解并实现GeoHash算法,你可以参考`geoHash`压缩包中的源代码,...

    如何找到周围8个区域的GeoHash编码

    - 在数据库中,可以使用GeoHash编码作为索引来加速地理位置的搜索。当查找附近位置时,只需要查询与目标GeoHash编码相邻的几个编码即可。 - 地图应用中,可以使用GeoHash来对地图进行分块,以优化地图加载和导航...

    python_geohash-0.8.5-cp312-cp312-win_amd64.whl.zip

    Geohash是一种将地理坐标(经度和纬度)编码成可搜索的字符串的方法,这使得在数据库中存储和检索地理位置变得高效。它通过分层的二进制编码系统,将地球表面划分为多个网格,每个网格都有一个唯一的字符串表示。这...

    geohash算法实现Java代码

    GeoHash算法的使用场景广泛,例如在地图应用中,可以用来快速找到附近的服务设施;在社交网络中,可以帮助用户发现附近的其他用户;在物流配送中,可以优化路线规划。因此,掌握GeoHash算法对于从事地理信息系统(GIS...

    python_geohash-0.8.5-cp39-cp39-win_amd64.whl.zip

    标题中的"python_geohash-0.8.5-cp39-cp39-win_amd64.whl.zip"表明这是一个与Python相关的压缩包,其中包含了一个名为"python_geohash-0.8.5-cp39-cp39-win_amd64.whl"的文件,这个文件是Python的轮子(wheel)格式...

    python_geohash-0.8.5-cp310-cp310-win_amd64.whl.zip

    在实际应用中,Geohash常用于地理信息系统(GIS)、社交网络的附近好友查找、物流配送路径规划等场景,因为它能够高效地处理和存储地理信息,且能简化空间查询操作。因此,了解并熟练掌握Python Geohash库的使用对于...

    geohash:一个解决计算附近距离的php类库.zip

    总的来说,Geohash是解决计算附近距离和搜索附近商业点问题的强大工具,它通过将地理位置编码为字符串,实现了对空间位置的有效索引和快速查询,极大地简化了PHP开发者在地理位置应用处理上的工作。掌握并合理运用...

    geohash经纬度转换包linux

    3. **邻接(Neighbours)**: 这个库可能还支持获取给定Geohash的相邻Geohash,这对于处理邻近位置或者进行范围搜索很有用。 4. **精度(Precision)**: 用户可能能够调整Geohash的长度,从而控制编码的精度。较短的...

    python_geohash-0.8.5-cp36-cp36m-win_amd64.whl.zip

    - 范围查询:找出给定范围内的所有GeoHash,这对于实现地理位置附近的搜索非常有用。 - 邻居查询:找到与给定GeoHash相邻的其他GeoHash,这有助于处理边界情况和相邻区域的查找。 - 距离计算:根据GeoHash计算两个...

    python_geohash-0.8.5-cp37-cp37m-win_amd64.whl.zip

    3. **范围查询(Range Query)**:通过一个GeoHash字符串,可以查找附近的其他GeoHash,以实现地理位置的邻近性查询。这对于地理数据索引和搜索非常有用。 4. **边界计算(Boundary Calculation)**:可以计算出一...

    python_geohash-0.8.5-cp38-cp38-win_amd64.whl.zip

    2. **邻近搜索**:利用Geohash的特性,可以快速找到与特定Geohash编码相邻的其他编码,从而找出附近的位置。这在构建地理索引和实现地理围栏时非常有用。 3. **精度控制**:Geohash的长度决定了其精度,更长的字符...

    经纬度地址编码geohash.zip

    移动互联网,lbs可以说是一个基础应用,geohash对于解决附近地点搜索提供了一个有效的解决方案。扩展: 这个php扩展,提供了三个函数:/**  * $latitude //纬度  * $longitude //经度  * $precision //...

    python_geohash-0.8.5-cp311-cp311-win_amd64.whl.zip

    6. **应用**:GeoHash常用于地图服务、位置数据分析、地理空间索引等领域,例如在社交媒体的位置分享、地理围栏设定、物流路径规划等场景中。 7. **安装和使用**:在Python环境中,用户可以通过`pip`安装Wheel文件...

    Laravel开发-geohash

    在Laravel框架中集成Geohash,可以极大地优化处理地理位置相关的功能,比如地图服务、附近地点搜索、地理围栏等。开发者可以方便地将Geohash编码后的字符串存储在数据库中,而不是原始的经纬度值,这将简化空间查询...

    iOS Geohash.zip

    在iOS开发中,地理定位是常见的需求之一,特别是在构建基于位置的应用时,如地图服务、导航、附近搜索或签到功能。"iOS Geohash.zip"这个压缩包可能包含了一个解决方案,即使用Geohash技术将经纬度转换为字符串,...

    geohash-cpp:GeoHash 库

    总之,GeoHash 是一种有效的地理坐标编码技术,它在 C++ 中的应用可以帮助开发者处理复杂的地理数据问题,如索引、查询和分析。通过深入理解 GeoHash 的原理和实现,可以提升你在地理信息系统(GIS)领域的开发能力...

    Geohash编码抗k近邻攻击的脆弱性分析.docx

    Geohash编码是一种广泛应用在空间数据库中的地理编码技术,它将地球表面的经纬度坐标转换为一维的字符串,以此来提高空间查询的效率。在大数据和云计算的背景下,面对PB级别的空间数据,Geohash编码因其高效性和简洁...

Global site tag (gtag.js) - Google Analytics