1. MySQL Spatial Extensions(后面简称MySQL Spatial)功能不够完全。至少和PostGIS相比是这样的,它只支持了openGIS(一个标准)的一个子集,包涵有限的几种空间数据类型(比如Point,LineString,Polygon等),支持的函数也很少,比如,连计算两个点的distance函数都没有...
2. MySQL Spatial的安装配置非常的简单。其实,它根本不需要安装。默认的MySQL配置就能够使用这些空间数据类型。这和PostGIS很不一样,PostGIS是需要在PostgreSQL上再安装一个扩展包。
3. 不同的存储引擎有差别。MyISAM和InnoDB都支持spatial extensions,但差别在于:如果使用MyISAM,可以建立spatial index,而InnoDB是不支持的。这点差别在某些场景下很关键,后面会再详细说说spatial index。
4. POINT的使用。点是最基本也是最常用的一种空间数据类型。MySQL Spatial中用POINT表示点,比如,可以创建一个table:
mysql 5.7
CREATE TABLEaddress (
addressCHAR(80) NOT NULL,
address_loc POINTNOT NULL,PRIMARY KEY(address),
SPATIALKEY(address_loc)
);
show craate tableaddressCREATE TABLE`address` (
`address`char(80) NOT NULL,
`address_loc` pointNOT NULL,PRIMARY KEY(`address`),
SPATIALKEY`address_loc` (`address_loc`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8'
其中,address_loc就是一个point类型,说明address_loc是一个点。
插入一个点:
INSERT INTO address VALUES('Foobar street 12', GeomFromText('POINT(2671 2500)'));INSERT INTO address VALUES('Foobar street 13', ST_GEOMFROMTEXT ('POINT(2670 2500)'));
读取一个点:
select AsText(address_loc) from address;
# AsText(address_loc)