先建一个 空间数据表

CREATE TABLE `points` (

`name` varchar(20) NOT NULL DEFAULT '',

`location` point NOT NULL,

`description` varchar(200) DEFAULT NULL,

PRIMARY KEY (`name`),

SPATIAL KEY `sp_index` (`location`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8;

SET @center = GEOMFROMTEXT('POINT(120.140746 30.305061)');

SET @radius = 1000;

SET @bbox = CONCAT('POLYGON((',

X(@center) - @radius, ' ', Y(@center) - @radius, ',',

X(@center) + @radius, ' ', Y(@center) - @radius, ',',

X(@center) + @radius, ' ', Y(@center) + @radius, ',',

X(@center) - @radius, ' ', Y(@center) + @radius, ',',

X(@center) - @radius, ' ', Y(@center) - @radius, '))'

);

SELECT `id`,`companyname`,`address`,

SQRT(POW( ABS( X(location) - X(@center)), 2) + POW( ABS(Y(location) - Y(@center)), 2 )) AS distance

FROM `cms_company_info` WHERE 1=1

AND INTERSECTS( location, GEOMFROMTEXT(@bbox) )

AND SQRT(POW( ABS( X(location) - X(@center)), 2) + POW( ABS(Y(location) - Y(@center)), 2 )) < @radius

ORDER BY distance LIMIT 10;

SELECT `id`,`companyname`,`address`,

SQRT(POW( ABS( X(location) - X(@center)), 2) + POW( ABS(Y(location) - Y(@center)), 2 )) AS distance

FROM `cms_company_info` WHERE 1=1

AND within( location, GEOMFROMTEXT(@bbox) )

AND SQRT(POW( ABS( X(location) - X(@center)), 2) + POW( ABS(Y(location) - Y(@center)), 2 )) < @radius

ORDER BY distance LIMIT 10

现在很多手机软件都用附近搜索功能,但具体是怎么实现的呢》

在网上查了很多资料,mysql空间数据库、矩形算法、geohash我都用过了,当数据上了百万之后mysql空间数据库方法是最强最精确的(查询前100条数据只需5秒左右)。

接下来推出一个原创计算方法,查询速度是mysql空间数据库算法的2倍

$lng是你的经度,$lat是你的纬度

SELECT lng,lat,

(POWER(MOD(ABS(lng - $lng),360),2) + POWER(ABS(lat - $lat),2)) AS distance

FROM `user_location`

ORDER BY distance LIMIT 100

经测试,在100万数据中取前100条数据只需2.5秒左右。

####################################

另外的几种算法还是在这里展示一下:

一、距形算法

define(EARTH_RADIUS, 6371);//地球半径,平均半径为6371km

/**

*计算某个经纬度的周围某段距离的正方形的四个点

*

*@param lng float 经度

*@param lat float 纬度

*@param distance float 该点所在圆的半径,该圆与此正方形内切,默认值为0.5千米

*@return array 正方形的四个点的经纬度坐标

*/

function returnSquarePoint($lng, $lat,$distance = 0.5){

$dlng =  2 * asin(sin($distance / (2 * EARTH_RADIUS)) / cos(deg2rad($lat)));

$dlng = rad2deg($dlng);

$dlat = $distance/EARTH_RADIUS;

$dlat = rad2deg($dlat);

return array(

'left-top'=>array('lat'=>$lat + $dlat,'lng'=>$lng-$dlng),

'right-top'=>array('lat'=>$lat + $dlat, 'lng'=>$lng + $dlng),

'left-bottom'=>array('lat'=>$lat - $dlat, 'lng'=>$lng - $dlng),

'right-bottom'=>array('lat'=>$lat - $dlat, 'lng'=>$lng + $dlng)

);

}

//使用此函数计算得到结果后,带入sql查询。

$squares = returnSquarePoint($lng, $lat);

$info_sql = "select id,locateinfo,lat,lng from `lbs_info` where lat<>0 and lat>{$squares['right-bottom']['lat']} and lat{$squares['left-top']['lng']} and lng

mysql intersects_mysql gis 空间数据库 根据 经纬度查找附近 (INTERSECTS,within)相关推荐

  1. 抓取高德POI数据,并使用MySQL建立本地空间数据库(一)

    使用Python获取高德POI数据,并使用MySQL建立本地空间数据库(一) 关于高德POI 高德地图搜索POI的接口 抓取高德POI的思路 高德POI抓取的Python实现 本方法仅供参考和学习交流 ...

  2. mysql数据范围什么意思_数据都在mysql里的话,基于经纬度的范围查询有什么高效的方案吗...

    [今日话题] 数据都在mysql里的话,基于经纬度的范围查询有什么高效的方案吗 – yingang 1. 经纬度搜索(1)-Geohash算法原理 http://hankesi2000.iteye.c ...

  3. MySQL优化系列(二)--查找优化(1)(非索引设计)

    MySQL优化系列(二)--查找优化(1)(非索引设计) 接下来这篇是查询优化,用户80%的操作基本都在查询,我们有什么理由不去优化他呢??所以这篇博客将会讲解大量的查询优化(索引以及库表结构优化等高 ...

  4. mysql查询已知两列第三列,MySQL查询从两列中查找出现的次数?

    使用MySQL GROUP_BY从两列中查找出现的次数.让我们首先创建一个表-mysql> create table DemoTable -> ( -> Name1 varchar( ...

  5. 风云4A卫星行列号和经纬度查找表文件下载及解析

    FY-4A是中国自主研发的静止气象卫星,其在太阳同步轨道上运行,每天可以全天候.全球范围内获取高空大气和地表的红外.可见光.微波等多种信息,对天气.气候研究及预报有着重要的作用. 一.风云卫星官网   ...

  6. FY-4A/LPW产品4km经纬度查找表生成代码-风云四号

    实在是太忙,没时间整理,没办法,抽时间整理一下吧. FY-4A/LPW水汽产品4km经纬度查找表生成代码: # -*- coding: utf-8 -*- """ Cre ...

  7. mysql gis空间数据库_GIS开发:使用空间数据库

    在早期GIS开发中,空间数据库的使用比较少,一般都是使用Arcgis Engine进行GIS空间分析等功能的开发,或者通过Spatial Database Engine(sde)空间数据引擎调用数据库 ...

  8. mysql按经纬度排序_mysql根据经纬度查找排序

    目的是,根据经纬度,实现查其找附近的人或地点,LBS场景. 做基于地理位置的应用后台,没有使用mongodb,看了网上的很多答案,其实也就是几份答案而已,天下文章一大抄. 这里综合网上的,结合自身,总 ...

  9. 根据GPS经纬度查找指定范围内的对象

    项目上需要根据当前的经纬度查询指定范围内离这个坐标最近的对象. 主要是思路.请大家指正 public static void CheckGps() {            double temp = ...

最新文章

  1. 我要再接再力 学更多
  2. class类文件结构
  3. 牛客网 【每日一题】6月10日 失衡天平
  4. 别再用Else语句写代码了!
  5. non thread safe php vc11,PHP 中什么线程安全(TS)和非线程安全(NTS)
  6. ubuntu jdk tomcat mysql_linux-ubuntu tomcat jdk 及 mysql 安装配置
  7. 吴恩达深度学习笔记(归一化)
  8. # AD19规则设置的傻瓜式教程
  9. vmware 官方下载
  10. 弹出USB大容量存储设备时出问题的解决方案
  11. 智能跟随小车-红外遥控(程序+原理图+PCB+论文报告)
  12. easyui datagrid deleteRow(删除行)的BUG
  13. 蛋白质语言建模?伯克利RoshanRao157页博士论文《训练,评估和理解蛋白质序列的进化模型》...
  14. HTML 实现打电话
  15. 《R语言入门与实践》学习笔记四
  16. git pull报错:Your configuration specifies to...from the remote, but no such ref was fetched
  17. 英语翻译太难?我一怒之下用爬虫写了两个翻译脚本
  18. 亚马逊、沃尔玛自养号大额下单需要解决哪些问题?
  19. 4.1黄金原油今日价格走势分析#白银TD趋势行情操作建议
  20. 彻底删除paragon ntfs for mac

热门文章

  1. Git安装与使用教程-本地仓库与远程仓库内容版本管理
  2. layui 表格内容写temple函数_layui 表格内容显示更改
  3. vue element upload 控件用form-data上传方式导入xls文件
  4. WCDMA系统中的扰码规划
  5. 实例15 判断某一年是否为闰年
  6. NOIP2018TG 初赛复习
  7. Python学习心得第一周-03练习2
  8. 软件包管理(rpmyum)
  9. MySQL 解压版创建用户密码
  10. UIImage 各种处理(分类)