mysql – 地理空间数据的表结构
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – 地理空间数据的表结构,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3166字,纯文字阅读大概需要5分钟。
内容图文
在包含Geo Spatial数据的MYSQL数据库中构造表的建议方法是什么.作为POC,我正在努力将数据插入数据库表中,如下图所示.
以下是Phpmyadmin表创建表创建的快照
寻找建立地理空间数据表的建议,如截图所示.
编辑:我正在使用运行MYSQL版本5.6.16的XAMPP V1.8.3 Windows8.
使用下面的sql创建表格geomduplicate和列以及插入数据
CREATE TABLE geomduplicate1(
zip INTEGER(3) NOT NULL PRIMARY KEY,
latitude NUMERIC(9,6),
longitude NUMERIC(10,6),
city VARCHAR(10),
state VARCHAR(2),
county VARCHAR(9)
);
REPLACE INTO geomduplicate1(zip,latitude,longitude,city,state,county) VALUES
(501,40.922326,-72.637078,'Holtsville','NY','Suffolk');
REPLACE INTO geomduplicate1(zip,latitude,longitude,city,state,county) VALUES
(544,40.922326,-72.637078,'Holtsville','NY','Suffolk');
REPLACE INTO geomduplicate1(zip,latitude,longitude,city,state,county) VALUES
(601,18.165273,-66.722583,'Adjuntas','PR','Adjuntas');
REPLACE INTO geomduplicate1(zip,latitude,longitude,city,state,county) VALUES
(602,18.393103,-67.180953,'Aguada','PR','Aguada');
REPLACE INTO geomduplicate1(zip,latitude,longitude,city,state,county) VALUES
(603,18.455913,-67.14578,'Aguadilla','PR','Aguadilla');
REPLACE INTO geomduplicate1(zip,latitude,longitude,city,state,county) VALUES
(604,18.49352,-67.135883,'Aguadilla','PR','Aguadilla');
REPLACE INTO geomduplicate1(zip,latitude,longitude,city,state,county) VALUES
(605,18.465162,-67.141486,'Aguadilla','PR','Aguadilla');
REPLACE INTO geomduplicate1(zip,latitude,longitude,city,state,county) VALUES
(606,18.172947,-66.944111,'Maricao','PR','Maricao');
REPLACE INTO geomduplicate1(zip,latitude,longitude,city,state,county) VALUES
(610,18.288685,-67.139696,'Anasco','PR','Anasco');
并且数据已成功插入mysql数据库中.
解决方法:
将其存储为geometry data type.MySQL支持几何(通用),以及Point,Linestring和Polygon数据类型,请参阅creating spatial data types.单个经度或纬度值本身不能是几何体,因为您在屏幕中拥有它射击.
如果你使用几何类型的路线,它比你有单独的纬度和经度字段有两个优点:你可以添加一个spatial index,你可以使用一些MySQL’s spatial operator functions,如ST_Buffer,ST_Intersects,ST_Distance进行进一步的分析.空间索引基于R树,并且在非空间列,纬度和经度上的性能远远优于两个B树索引 – 并且这种性能差异将随着表大小的增长而增长.
您仍然可以使用X and Y point functions获取纬度和经度值,这样您就不会因为将数据存储为Point而丢失任何内容.
如果已将数据放在两个单独的lat / lon列中,并且想要使用geometry / point数据类型路由,则可以使用Point函数创建Point数据类型:
alter table mytable add column pt POINT;
update mytable set pt=Point(longitude, latitude);
alter table mytable modify pt POINT NOT NULL;
create spatial index ix_spatial_mytable_pt ON mytable(pt);
请注意,Point函数仅在MySQL 5.1.x中引入(它没有太多文档记录,所以我不确定确切版本),在此之前你必须使用带有GeomFromText函数的concat,参见Moving lat/lon text columns into a ‘point’ type column关于这一点的更多信息,虽然注意到Quassnoi的回答有lon和lat错误的方式 – 它是Point(lon,lat)而不是其他方式,尽管这是一个非常常见的错误.
注意:直到最近,如果使用MyISAM引擎,您只能索引空间列.
编辑:在即将发布的MySQL 5.7.5版本中,InnoDB最终将支持空间数据类型的索引(而不仅仅是存储没有索引的空间类型,这种方式相当不太有用).这意味着您可以在一个引擎中拥有外键,ACID保证,空间索引,这已经很长时间了.
内容总结
以上是互联网集市为您收集整理的mysql – 地理空间数据的表结构全部内容,希望文章能够帮你解决mysql – 地理空间数据的表结构所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。