zoukankan      html  css  js  c++  java
  • mysql对GIS空间数据的支持,包括创建空间索引

    CREATE TABLE tb_geo(
    id INT PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR(128) NOT NULL,
    pnt POINT NOT NULL,
    SPATIAL INDEX `spatIdx` (`pnt`) <!-- 1、创建表时创建空间索引 -->
    )ENGINE=MYISAM DEFAULT CHARSET=utf8; <!-- 数据库表引擎设置为 MYISAM-->
    
    <!-- 2、已经存在的表上创建索引 -->
    <!-- ALTER TABLE tb_geo ADD SPATIAL INDEX spatIdx(pnt); -->
    
    <!-- 3、使用CREATE INDEX语句创建索引,语法如下 -->
    <!-- CREATE SPATIAL INDEX spatIdx ON t7(g) -->
    
    <!-- 删除索引 -->
    <!-- ALTER TABLE book DROP INDEX UniqidIdx -->
    
    <!-- 表描述信息-->
    DESCRIBE tb_geo;
    
    <!-- 插入数据 -->
    INSERT INTO `tb_geo` VALUES(
    NULL,
    'a test string',
    POINTFROMTEXT('POINT(15 20)'));
    
    
    <!-- 查询 -->
    SELECT id,NAME,ASTEXT(pnt) FROM tb_geo;
    
    SELECT id,NAME,X(pnt),Y(pnt) FROM tb_geo;
    
    
    <!-- 空间查询示例 -->
    SELECT ASTEXT(pnt) FROM tb_geo WHERE MBRWITHIN(pnt,GEOMFROMTEXT('Polygon((0 0,0 30,30 30,30 0,0 0))'));
    
    <!-- 删除表 -->
    DROP TABLE tb_geo;
    
    
    <!-- 几种空间对象比较方法 -->
    SET @g1 = GEOMFROMTEXT('Polygon((0 0,0 3,3 3,3 0,0 0))');
    SET @g2 = GEOMFROMTEXT('Point(1 1)');
    
    <!-- 注意:比较的都是外包络几何类型对象 -->
    <!-- 包含 -->
    SELECT MBRCONTAINS(@g1,@g2), MBRCONTAINS(@g2,@g1), MBRCONTAINS(@g1,@g1);
    <!-- 被包含 -->
    SELECT MBRWITHIN(@g2,@g1),MBRWITHIN(@g1,@g2);
    <!-- 不相交 -->
    SELECT MBRDISJOINT(@g1,@g2);
    <!-- 相等 -->
    SELECT MBREQUAL(@g1,@g2);
    <!-- 相交 -->
    SELECT MBRINTERSECTS(@g1,@g2);
    <!-- 重叠 -->
    SELECT MBROVERLAPS(@g1,@g2);
    <!-- 相切 -->
    SELECT MBRTOUCHES(@g1,@g2);
    复制代码

    注:

    在最新发布的MySQL 5.7.4实验室版本中,InnoDB存储引擎新增了对于几何数据空间索引的支持。 
    在此之前,InnoDB将几何数据存储为BLOB(二进制大对象)数据,在空间数据上只能创建前缀索引,当涉及空间搜索时非常低效,尤其是在涉及复杂的几何数据时。在大多数情况下,获得结果的唯一方式是扫描表。
    新版本MySQL中,InnoDB支持空间索引,通过R树来实现,使得空间搜索变得高效。 
    InnoDB空间索引也支持MyISAM引擎现有的空间索引的语法,此外,InnoDB空间索引支持完整的事务特性以及隔离级别。 
    目前,InnoDB空间索引只支持两个维度的数据,MySQL开发团队表示有计划支持多维。此外,开发团队正在做更多关于性能方面的工作,以使其更加高效。

  • 相关阅读:
    通过smtp直接发送邮件
    C# 带参访问接口,WebClient方式
    ASP.NET MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction
    asp.net mvc Html.BeginForm()及Html.Action用法
    Knut重排算法
    C# copy() 与 Clone()区别
    oracle针对某列让特定信息排序[decode]
    oracle 创建表空间详细介绍
    【笔记】.NET开发环境下使用PostgreSQL+Oracle_fdw 实现两个数据库之间数据交互操作(二)
    【笔记】.NET开发环境下使用PostgreSQL+Oracle_fdw 实现两个数据库之间数据交互操作(一)
  • 原文地址:https://www.cnblogs.com/ExMan/p/10407962.html
Copyright © 2011-2022 走看看