Trong hướng dẫn này, chúng ta sẽ hiểu cách lưu trữ và sử dụng các kiểu dữ liệu không gian như tọa độ và đối tượng. Tuy nhiên, chúng tôi sẽ chủ yếu tập trung vào Điểm [Tọa độ Descartes 2D] và Vị trí địa lý [Tọa độ trắc địa]
[lịch sự của pexels. com]
Open Geospatial Consortium [OGC] là một tập đoàn quốc tế gồm hơn 250 công ty, cơ quan và trường đại học tham gia phát triển các giải pháp khái niệm có sẵn công khai có thể hữu ích với tất cả các loại ứng dụng quản lý dữ liệu không gian
Thông số kỹ thuật do Open Geospatial Consortium xuất bản [OGC] xuất bản chỉ định rằng cách MySQL triển khai các phần mở rộng không gian như một tập hợp con của môi trường SQL với các kiểu hình học. Thuật ngữ này đề cập đến một môi trường SQL đã được mở rộng với một tập hợp các loại hình học. Cột SQL có giá trị hình học được triển khai dưới dạng cột có loại hình học. Đặc tả mô tả một tập hợp các loại hình học SQL, cũng như các chức năng trên các loại đó để tạo và phân tích các giá trị hình học
Các tính năng của các kiểu dữ liệu không gian MySQL
Phần mở rộng không gian của MySQL cho phép tạo, lưu trữ và phân tích các đối tượng địa lý
- Các kiểu dữ liệu để biểu diễn các giá trị không gian
- Các hàm để thao tác các giá trị không gian
- Lập chỉ mục không gian để cải thiện thời gian truy cập vào các cột không gian
MySQL hỗ trợ một số loại dữ liệu không gian
MySQL có các kiểu dữ liệu tương ứng với các lớp OpenGIS. Một số loại này giữ các giá trị hình học đơn lẻ
- HÌNH HỌC
- ĐIỂM
- LINESTRING
- ĐA GIÁC
Các kiểu dữ liệu khác chứa các tập hợp giá trị
- ĐA ĐIỂM
- MULTILINESTRING
- ĐA GIÁC
- BỘ SƯU TẬP HÌNH HỌC
Loại hình học
Hình học là một từ biểu thị một đối tượng địa lý. Ban đầu từ hình học có nghĩa là phép đo trái đất. Một ý nghĩa khác xuất phát từ bản đồ học, đề cập đến các đặc điểm hình học mà người vẽ bản đồ sử dụng để lập bản đồ thế giới. Nó là một lớp không thể hiện được nhưng có một số thuộc tính, được đưa ra dưới đây là chung cho tất cả các giá trị hình học được tạo từ bất kỳ lớp con Hình học nào
NameDescriptiontypeMỗi hình học thuộc về một trong các lớp có thể khởi tạo trong cấu trúc phân cấp. SRID Dạng đầy đủ của SRID là Mã định danh tham chiếu không gian. Hệ thống này mô tả không gian tọa độ trong đó đối tượng hình học được xác định. Trong MySQL, giá trị SRID chỉ là một số nguyên được liên kết với giá trị hình học. tọa độTất cả hình học khác rỗng bao gồm ít nhất một cặp tọa độ [X,Y]. Hình học rỗng không chứa tọa độ. Các tọa độ có liên quan đến SRID. nội thất, ranh giới, ngoại thất. Mỗi hình học chiếm một số vị trí trong không gian. Mặt ngoài của hình học là toàn bộ không gian không bị hình học chiếm chỗ. Nội thất là không gian bị chiếm bởi hình học. Ranh giới là giao diện giữa bên trong và bên ngoài của hình học. MBRIts MBR [hình chữ nhật giới hạn tối thiểu] hoặc phong bì. Đây là hình học giới hạn, được hình thành bởi tọa độ [X,Y] tối thiểu và tối đa. đơn giản hay không đơn giản. Cho dù giá trị là đơn giản hay không đơn giản. Giá trị hình học của các loại [LineString, MultiPoint, MultiLineString] là đơn giản hoặc không đơn giản. Mỗi loại xác định các xác nhận của riêng nó là đơn giản hay không đơn giản. đã đóng hay chưa đóngCho dù giá trị đã đóng hay chưa đóng. Giá trị hình học của các loại [LineString, MultiString] được đóng hoặc không đóng. Mỗi loại xác định các xác nhận của riêng nó để đóng hoặc không đóng. rỗng hay không rỗngCho dù giá trị rỗng hay không trống Một hình học trống nếu nó không có bất kỳ điểm nào. Ngoại thất, nội thất và ranh giới của một hình học trống không được xác định. Một hình học trống được định nghĩa là luôn đơn giản và có diện tích bằng 0. thứ nguyênThứ nguyên của nó. Một hình học có thể có kích thước là –1, 0, 1 hoặc 2
– 1 cho một hình học rỗng
0 cho hình học không có chiều dài và không có diện tích
1 cho hình học có độ dài khác không và diện tích bằng không
2 cho hình học có diện tích khác không
Thí dụ
Sử dụng câu lệnh CREATE TABLE để tạo bảng có cột không gian
CREATE TABLE geotest [code int[5],descrip varchar[50], g GEOMETRY];
Đây là cấu trúc của bảng
Đầu ra mẫu
MySQL> describe geotest; +---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | code | int[5] | YES | | NULL | | | descrip | varchar[50] | YES | | NULL | | | g | geometry | YES | | NULL | | +---------+-------------+------+-----+---------+-------+ 3 rows in set [0.01 sec]
Sử dụng câu lệnh ALTER TABLE để thêm hoặc xóa một cột không gian vào hoặc từ một bảng hiện có
ALTER TABLE geotest ADD pt_loca POINT;
ALTER TABLE geotest DROP pt_loca ;
Loại điểm
Điểm là một hình học đại diện cho một vị trí duy nhất trong không gian tọa độ
Cách sử dụng điểm
Trên bản đồ thành phố, một đối tượng Điểm có thể đại diện cho một nhà ga
Thuộc tính điểm
- Giá trị tọa độ X
- Giá trị tọa độ Y
- Điểm được định nghĩa là một hình học không chiều
- Biên của một điểm là tập hợp rỗng
Thí dụ
MySQL> SELECT X[POINT[18, 23]]; +------------------+ | X[POINT[18, 23]] | +------------------+ | 18 | +------------------+ 1 row in set [0.00 sec] MySQL> SELECT X[GeomFromText['POINT[18 23]']]; +---------------------------------+ | X[GeomFromText['POINT[18 23]']] | +---------------------------------+ | 18 | +---------------------------------+ 1 row in set [0.00 sec]
Loại đường cong
Đường cong là hình học một chiều, nói chung, nó được biểu diễn bằng một chuỗi các điểm. Các lớp con cụ thể của Curve xác định kiểu nội suy giữa các điểm. Đường cong là một lớp không thể xác định
Thuộc tính đường cong
- Một đường cong có tọa độ của các điểm của nó
- Đường cong được định nghĩa là hình học một chiều
- Một đường cong là đơn giản nếu nó không đi qua cùng một điểm hai lần
- Một đường cong được đóng nếu điểm đầu của nó bằng điểm cuối của nó
- Ranh giới của một đường cong khép kín trống rỗng
- Ranh giới của một Đường cong không khép kín bao gồm hai điểm cuối của nó
- Đường cong đơn giản và khép kín là LinearRing
DòngChuỗi Loại
LineString là một Curve với nội suy tuyến tính giữa các điểm
Cách sử dụng LineString
Các đối tượng LineString có thể đại diện cho một dòng sông trong bản đồ quốc gia
Thuộc tính LineString
- Một LineString có tọa độ của các phân đoạn, được xác định bởi từng cặp điểm liên tiếp
- LineString là một Line nếu nó bao gồm chính xác hai điểm
- Một LineString là một LinearRing nếu nó vừa đóng vừa đơn giản
Thí dụ
MySQL> SET @g = 'LINESTRING[0 0,1 2,2 4]'; Query OK, 0 rows affected [0.00 sec] MySQL> INSERT INTO geotest VALUES [123,"Test Data",GeomFromText[@g]]; Query OK, 1 row affected [0.00 sec]
Loại bề mặt
Surface là một hình học hai chiều. Nó là một lớp không thể xác định. Lớp con duy nhất có thể khởi tạo của nó là Đa giác
Thuộc tính bề mặt
- Một Surface được định nghĩa là một hình học hai chiều
- Đặc tả OpenGIS định nghĩa một Bề mặt đơn giản là một hình học bao gồm một "bản vá" duy nhất được liên kết với một ranh giới bên ngoài duy nhất và không có hoặc nhiều ranh giới bên trong
- Ranh giới của một Surface đơn giản là tập hợp các đường cong khép kín tương ứng với ranh giới bên ngoài và bên trong của nó
Loại đa giác
Đa giác là một Bề mặt phẳng biểu thị hình học nhiều mặt. Nó được xác định bởi một ranh giới bên ngoài duy nhất và không có hoặc nhiều ranh giới bên trong, trong đó mỗi ranh giới bên trong xác định một lỗ trong Đa giác
Sử dụng đa giác
Các đối tượng Đa giác có thể đại diện cho các quận, khối, v.v. từ bản đồ trạng thái
Xác nhận đa giác
- Ranh giới của một Đa giác bao gồm một tập hợp các đối tượng LinearRing [nghĩa là các đối tượng LineString vừa đơn giản vừa đóng] tạo nên các ranh giới bên ngoài và bên trong của nó
- Đa giác không có vành nào cắt nhau. Các vòng trong ranh giới của Đa giác có thể cắt nhau tại một Điểm, nhưng chỉ như một tiếp tuyến
- Đa giác không có đường thẳng, gai hoặc lỗ thủng
- Một Đa giác có phần bên trong là một tập hợp điểm được kết nối
- Một đa giác có thể có lỗ. Mặt ngoài của Đa giác có lỗ không được kết nối. Mỗi lỗ xác định một thành phần được kết nối của bên ngoài
Thí dụ
MySQL> SET @g = 'POLYGON[[0 0,8 0,12 9,0 9,0 0],[5 3,4 5,7 9,3 7, 2 5]]'; Query OK, 0 rows affected [0.00 sec] MySQL> INSERT INTO geotest VALUES [123,"Test Data",GeomFromText[@g]]; Query OK, 1 row affected [0.03 sec]
Loại bộ sưu tập hình học
GeometryCollection là một hình học là tập hợp của một hoặc nhiều hình học của bất kỳ lớp nào
Tất cả các phần tử trong GeometryCollection phải nằm trong cùng một Hệ quy chiếu không gian. Không có ràng buộc nào khác đối với các phần tử của GeometryCollection, mặc dù các lớp con của GeometryCollection được mô tả trong các phần sau có thể hạn chế tư cách thành viên. Các hạn chế có thể dựa trên
- Loại phần tử [ví dụ: MultiPoint có thể chỉ chứa các phần tử Điểm]
- Kích thước
- Ràng buộc về mức độ chồng chéo không gian giữa các phần tử
Thí dụ
MySQL> SET @g ='GEOMETRYCOLLECTION[POINT[3 2],LINESTRING[0 0,1 3,2 5,3 5,4 7]]'; Query OK, 0 rows affected [0.00 sec] MySQL> INSERT INTO geotest VALUES [123,"Test Data",GeomFromText[@g]]; Query OK, 1 row affected [0.00 sec]
Loại đa điểm
MultiPoint là một tập hợp hình học bao gồm các phần tử Điểm. Các điểm không được kết nối hoặc sắp xếp theo bất kỳ cách nào
Sử dụng MultiPoint
Trên bản đồ thế giới, một MultiPoint có thể đại diện cho một chuỗi các hòn đảo nhỏ
Thuộc tính đa điểm
- MultiPoint là một hình học không chiều
- Một MultiPoint là đơn giản nếu không có hai giá trị Điểm nào bằng nhau [có các giá trị tọa độ giống hệt nhau]
- Ranh giới của MultiPoint là tập rỗng
Loại đa đường cong
MultiCurve là một tập hợp hình học bao gồm các phần tử Đường cong. MultiCurve là một lớp không thể hiện được
Thuộc tính đa đường cong
- MultiCurve là hình học một chiều
- MultiCurve là đơn giản khi và chỉ khi tất cả các phần tử của nó đều đơn giản;
- Một ranh giới MultiCurve có được bằng cách áp dụng “quy tắc hợp mod 2” [còn được gọi là “quy tắc chẵn lẻ”]. Một điểm là ranh giới của MultiCurve nếu nó nằm trong ranh giới của một số lẻ phần tử MultiCurve
- MultiCurve bị đóng nếu tất cả các phần tử của nó bị đóng
- Ranh giới của MultiCurve đã đóng luôn trống
MySQL> SET @g ='MULTIPOINT[0 0, 15 25, 45 65]';
Query OK, 0 rows affected [0.00 sec]
MySQL> INSERT INTO geotest VALUES [123,"Multipoint",GeomFromText[@g]];
Query OK, 1 row affected [0.00 sec]
Loại MultiLineString
MultiLineString là một tập hợp hình học MultiCurve bao gồm các phần tử LineString
Cách sử dụng MultiLineString
- Trên bản đồ khu vực, MultiLineString có thể biểu thị hệ thống sông hoặc hệ thống đường cao tốc
Thí dụ
________số 8_______Loại đa bề mặt
MultiSurface là một tập hợp hình học bao gồm các phần tử bề mặt. MultiSurface là một lớp không thể xác định. Lớp con duy nhất có thể khởi tạo của nó là MultiPolygon