这年头和LBS相关的应用越来越火。从foursquare的热闹程度就可见一般(什么,没听过 foursquare…. 哥们,你 out 了)。和 LBS有关的应用一般都包括一些共同的操作,最常见的一个,就是找附近的东东(餐馆, 商店, 妞…)。 所以, 这里就抛出了一个问题, 怎样才能知道两个物体离得近呢?

例如:用iPhone/android手机定位得到理想国际大厦的经纬度:39.98123848, 116.30683690 然后查找附近的妞根据一点的经纬度实现附近点的查询" title="在SAE上开发LBS应用之 根据一点的经纬度实现附近点的查询"> 

<?php

require_once('geohash.class.php');

$geohash = new Geohash;

//得到这点的hash值

$hash = $geohash->encode(39.98123848, 116.30683690);

//取前缀,前缀约长范围越小

$prefix = substr($hash, 0, 6);

//取出相邻八个区域

$neighbors = $geohash->neighbors($prefix);

array_push($neighbors, $prefix);

print_r($neighbors);

 

?>

 

得到9geohash值:

 

Array

(

    [top] => wx4eqx

    [bottom] => wx4eqt

    [right] => wx4eqy

    [left] => wx4eqq

    [topleft] => wx4eqr

    [topright] => wx4eqz

    [bottomright] => wx4eqv

    [bottomleft] => wx4eqm

    [0] => wx4eqw

)

 

范围如图:

 

 

用sql语句查询:

SELECT * FROM xy WHERE geohash LIKE 'wx4eqw%';

SELECT * FROM xy WHERE geohash LIKE 'wx4eqx%';

SELECT * FROM xy WHERE geohash LIKE 'wx4eqt%';

SELECT * FROM xy WHERE geohash LIKE 'wx4eqy%';

SELECT * FROM xy WHERE geohash LIKE 'wx4eqq%';

SELECT * FROM xy WHERE geohash LIKE 'wx4eqr%';

SELECT * FROM xy WHERE geohash LIKE 'wx4eqz%';

SELECT * FROM xy WHERE geohash LIKE 'wx4eqv%';

SELECT * FROM xy WHERE geohash LIKE 'wx4eqm%';

看一下是否用上索引(一共有50多万行测试数据):

根据一点的经纬度实现附近点的查询">

geohash.class.php下载地址:https://github.com/CloudSide/geohash

资料:

·      geohash演示:  http://openlocation.org/geohash/geohash-js/

·      wiki: http://en.wikipedia.org/wiki/Geohash

·      原理: http://blog.sina.com.cn/s/blog_62ba0fdd0100tr98.html

LBS应用之 根据一点的经纬度实现附近点的查询的更多相关文章

  1. PHP jpgraph的一点小提示(附安装方法)

    PHP中的GD库本身是一套很强大的绘图库了,绘制的图像基本可以满足日常要求,但强大规强大,还是不够方便哈,因为强大方便的基于PHP的GD库的jpgraph也就诞生啦! PHP默认是不启用GD库的,因为 ...

  2. geohash编码算法在LBS中的应用

    随着移动终端的普及,很多应用都基于LBS功能,附近的某某(餐馆.银行.妹纸等等). 基础数据中,一般保存了目标位置的经纬度:利用用户提供的经纬度,进行对比,从而获得是否在附近. 目标: 查找附近的某某 ...

  3. 跟据经纬度实现附近搜索Java实现

    现在很多手机软件都用附近搜索功能,但具体是怎么实现的呢>在网上查了很多资料,mysql空间数据库.矩形算法.geohash我都用过了,当数据上了百万之后mysql空间数据库方法是最强最精确的(查 ...

  4. 通过百度地图API--获取全国地图的经纬度

    因为要做一个前端画图需要经纬度,一个个的查询过麻烦,最终弄出这个,以备后查! import threading , time import requests from decimal import D ...

  5. javascript百度地图使用(根据地名定位、根据经纬度定位)

    需要购买阿里云产品和服务的,点击此链接领取优惠券红包,优惠购买哦,领取后一个月内有效: https://promotion.aliyun.com/ntms/yunparter/invite.html? ...

  6. Android开发之位置定位详解与实例解析(GPS定位、Google网络定位,BaiduLBS(SDK)定位)

    在android开发中地图和定位是很多软件不可或缺的内容,这些特色功能也给人们带来了很多方便.定位一般分为三种发方案:即GPS定位.Google网络定位以及基站定位 最简单的手机定位方式当然是通过GP ...

  7. WebGIS中GeoHash编码的研究和扩展

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 1.1普通地理编码流程 将采集的POI入库后,数据库里保存有 ...

  8. PROJ4初探(转并整理格式)

    PROJ4初探(转并整理格式) Proj4是一个免费的GIS工具,软件还称不上. 它专注于地图投影的表达,以及转换.采用一种非常简单明了的投影表达--PROJ4,比其它的投影定义简单,但很明显.很容易 ...

  9. [资料]mysql实现地理位置搜索

    mysql实现地理位置搜索 使用mysql来实现lbs(地理位置服务)功能 Mysql 地区经纬度 查询

随机推荐

  1. 发布 vscode 插件 Cnblogs Client For VSCode 预览版

    为了方便大家使用 vscode 发布博文,我们做了一个小插件,今天发布预览版,欢迎大家试用并反馈问题与建议. 插件的英文名称是 Cnblogs Client For VSCode,简称是 vscode ...

  2. unittest_测试报告(6)

    用例执行完成后,执行结果默认是输出在屏幕上,其实我们可以把结果输出到一个文件中,形成测试报告. unittest自带的测试报告是文本形式的,如下代码: import unittest if __nam ...

  3. Flask_获取请求信息(三)

    引用request的方法: from flask import request 与Django不同的是,flask是不需要将request对象作为第一个参数传入视图函数,他的request对象是来自于 ...

  4. CAP原理详解

    转载 https://blog.csdn.net/u013332124/article/details/82874178 文章目录 一.CAP原理介绍 对CAP原理的一些常见的理解误区 二.CAP原理 ...

  5. 微信小程序组建通信

    子组件传递父组件需要用到triggerEvent方法,当子组件(自定义组件)点击button的时候调用triggerEvent方法传递一些数据,首先第一个属性为自定义名称(myevent)对应父组件( ...

  6. 微服务架构攀登之路(二)之RPC

    1. RPC 简介 远程过程调用(Remote Procedure Call,RPC)是一个计算机通信协议 该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编 ...

  7. HDURomantic

    Problem - 1004 (hdu.edu.cn) 扩展欧几里得解决线性同余方程.先得到gcd的解,再恢复原解,因为知道通解的一般形式,所以通过模来得到最小正整数解.另一个可以通过相减,或者一样的 ...

  8. PAT 乙级 1002. 写出这个数 (20)(C语言描述)

    读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10100. 输出格式:在一行内输出n的各位数字之和的每 ...

  9. 使用医学影像开源库cornerstone.js解析Dicom图像显示到HTML中

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. postman设置token等关联参数

    登陆时登录成功后服务器会返回一个token,这个token作为第二步骤的入参:第二个步骤请求成功后服务器会返回一个新token,然后这个token作为第三步骤的入参!如此一来的话,要用postman做 ...