簡體   English   中英

地理空間數據的表結構

[英]Table structure for Geo Spatial Data

在包含Geo Spatial數據的MYSQL數據庫中構造表的建議方法是什么。 作為POC,我正在努力將數據插入數據庫表中,如下圖所示。

數據庫

以下是Phpmyadmin表創建表創建的快照

phpmyadmintable

尋找建立地理空間數據表的建議,如截圖所示。

編輯:我正在使用運行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數據庫中。

將其存儲為幾何數據類型 MySQL支持Geometry(通用),Point,Linestring和Polygon數據類型,請參閱創建空間數據類型 單個經度或緯度值本身不能是幾何體,就像在屏幕截圖中一樣。

如果你使用幾何類型的路線,它比擁有單獨的緯度和經度字段有兩個優點:你可以添加一個空間索引 ,你將能夠使用一些MySQL的空間操作符函數 ,如ST_Buffer,ST_Intersects,ST_Distance to做進一步的分析。 空間索引基於R樹,並且在非空間列,緯度和經度上的性能遠遠優於兩個B樹索引 - 並且這種性能差異將隨着表大小的增長而增長。

您仍然可以通過使用X和Y點函數來獲取經度和緯度值,這樣您就不會因為將數據存儲為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中引入(它沒有太多文檔,所以我不確定確切的版本),在此之前你必須使用concat與GeomFromText函數,請參閱移動lat / lon文本列進入'點'類型列有關此的更多信息,雖然注意到Quassnoi的答案有lon和lat錯誤的方式回合 - 它是Point(lon,lat)而不是其他方式,雖然這是一個非常常見的錯誤。

注意:直到最近,如果使用MyISAM引擎,您只能索引空間列。

編輯:在即將發布的MySQL 5.7.5版本中 ,InnoDB最終將支持空間數據類型的索引(而不僅僅是在沒有索引的情況下存儲空間類型,這種方法相當不太有用)。 這意味着您可以在一個引擎中擁有外鍵,ACID保證,空間索引,這已經很長時間了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM