Mysql中空间扩展 - 查询你附近的餐厅或酒店

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


基本思路如下:

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

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

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


具体解决方案如下:


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


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)'));







参考地址:http://dev.mysql.com/doc/refman/5.1/zh/spatial-extensions-in-mysql.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值