这年头和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. 每天学一点——python用户的交互、格式化输出与基础运算符运用

    用户交互 input输入 input接收的数据都是字符串类型 如下图 output输出 还可以相加 换行符 想让他们隔行排列的话就可以这样(如图) 在想各行的开头前面加上\n即可 那若是想将两个输出的 ...

  2. [学习笔记] Oracle体系结构、下载安装、创建实例、客户端工具、网络服务名、服务管理

    Oracle体系结构 实例: 一个操作系统只有一个 Oracle 数据库 一个 Oracle 数据库可以有多个 Oracle 实例(通常只安装一个实例) 一个实例对应着一系列的后台进程和内存结构 表空 ...

  3. CSS基础-5 伪类

    一.伪类 我们以a标签为例 伪类标签分为4类     1. 设置超链接默认的样式 a:link {属性:值;.....} 或者 a { 属性: 值;}           推荐使用这种方式     2 ...

  4. Snack3 3.2 发布,轻量的Json+Jsonpath框架

    Snack3 是一个轻量的 JSON + Jsonpath 框架. 借鉴了 Javascript 所有变量由 var 申明,及 Xml dom 一切都是 Node 的设计.其下一切数据都以ONode表 ...

  5. redis 加锁与解锁的详细总结,解决线程并发导致脏数据

    1.前言 对每个controller来说都是全新且单独的,原因是多线程,如果多个请求操作共有的数据,这样的并发操作会导致脏数据 怎么解决? mysql可以使用积极锁解决, 这里讲解的是redis的解决 ...

  6. Thrift框架-安装

    1.前言 今天接触了使用 PRC[远程过程调用协议]的Thrift 框架  ,留下随笔心得,这是安装篇 2.下载 去apache官网下载Thrift脚本编译程序,window则下载一个exe文件,然后 ...

  7. 通过了解Servlet和Http之间的关系,了解web中http通信使用(二)

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6512399401825075719/ 1.<Servlet简单实现开发部署过程> 2.<Serv ...

  8. 闯祸了,生成环境执行了DDL操作《死磕MySQL系列 十四》

    由于业务随着时间不停的改变,起初的表结构设计已经满足不了如今的需求,这时你是不是想那就加字段呗!加字段也是个艺术活,接下来由本文的主人咔咔给你吹. 试想一下这个场景 事务A在执行一个非常大的查询 事务 ...

  9. 《剑指offer》面试题40. 最小的k个数

    问题描述 输入整数数组 arr ,找出其中最小的 k 个数.例如,输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3.4. 示例 1: 输入:arr = [3,2,1], k ...

  10. jsp文本框输入限制问题

    1.jsp文本窗口实现控制输入格式 <input onkeyup = "value=value.replace(/[\W]/g,'')" onbeforepaste=&quo ...