Mysql中空间扩展 - 查询你附近的餐厅或酒店_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2077 | 回复: 0   主题: Mysql中空间扩展 - 查询你附近的餐厅或酒店        下一篇 
huan.liu
注册用户
等级:新兵
经验:72
发帖:58
精华:0
注册:2011-11-23
状态:离线
发送短消息息给huan.liu 加好友    发送短消息息给huan.liu 发消息
发表于: IP:您无权察看 2015-11-6 14:42:57 | [全部帖] [楼主帖] 楼主

公司最近做一个餐饮网站,需要根据访问者位置信息(经纬度坐标),搜索其附近餐厅

基本思路如下:

1、将餐厅位置(经纬度)存入数据库

2、获取访问者位置信息(经纬度坐标)

3、查询数据库得到距离访问者1000米范围内的餐厅


具体解决方案如下:

将餐厅位置(经纬度)存入数据库

Mysql支持一种空间数据类型Geometry,其可以存储几何空间数据


Geometry是一种基本类。它是一种抽象类。Geometry的可实例化子类限制为可在2维坐标空间中存在的0、1、2维几何对象。所有的可实例化几何类是这样定义的,从而使得几何类的实例从拓扑意义上讲是闭合的(也就是说,所有定义的几何类包含其边界)。

基本Geometry类具有关于Point、Curve、Surface和GeometryCollection的子类:

�Point表示0维对象。

�Curve表示1维对象,具有子类LineString,以及次级子类Line和LinearRing。

�Surface是为2维对象设计的,具有子类Polygon。

�GeometryCollection具有特殊的0维、1维和2维类集合,名为MultiPoint、MultiLineString和MultiPolygon,分别用于为对应的Points、LineStrings和Polygons集合进行几何建模。MultiCurve和MultiSurface是作为抽象超类引入的,它们归纳了用于处理Curves和Surfaces的集合接口。

Geometry、Curve、Surface、MultiCurve和MultiSurface定义为非实例化类。它们为其子类定义了公用方法集合,而且是为扩展而包含在内的。

Point、LineString、Polygon、GeometryCollection、MultiPoint、MultiLineString和MultiPolygon定义为可实例化类。


存储的数据格式:

文本(WTK)格式

如:POINT(15 20)

二进制(WKB)格式

例如,与POINT(1 1)对应的WKB值由下述21字节序列构成(在此,每个字节由2个十六进制数值表示):
0101000000000000000000F03F000000000000F03F


首先我们创建一张shop表


mysql> CREATE TABLE `shop`(
 `shopid` int(11) NOT NULL AUTO_INCREMENT,
 `latlng` geometry DEFAULT NULL,
  PRIMARY KEY (`shopid`)
  ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

然后将餐厅的维度和经度信息存入数据库,存成POINT类数据


mysql> insert into shop(latlng) values(GeomFromText('POINT(31.2689 120.275)'));






                                                                                                                         --转自



赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论