Tải bản đầy đủ (.pdf) (18 trang)

Web cho ứng dụng GIS và xây dựng ứng dụng minh họa khai thác dịch vụ - 10 pot

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (559.13 KB, 18 trang )

PHỤ LỤC – MySQL với phần mở rộng hỗ trợ cho OpenGIS

Một GeometryCollection là 1 tập gồm 1 hoặc nhiều đối tượng của bất kì
lớp nào.
Các thành phần trong 1 Geometry Collection phải có cùng 1 hệ thống
điểm.
Lớp MultiPoint
Một MultiPoint là tập hợp các Point. Các điểm này có thể được nối với
nhau theo bất kì thứ tự nào
Ví dụ về MultiPoint: Trong bản đồ thế giới, 1 MultiPoint có thể mơ tả 1
tập hợp các hịn đảo nhỏ
Lớp MultiCurve: MultiCurve là 1 tập hợp các đối tượng Curve.
Lớp MultiLineString:
MultiLineString là 1 MultiCurve với các thành phần là các LineString
Ví dụ về MultiLineString: Trong bản đồ, MultiLineString có thể dùng để
biểu diễn 1 hệ thống sơng ngịi hoặc 1 hệ thống đường cao tốc.
Lớp MultiSurface: MultiSurface là 1 GeometryCollection với các thành phần
là các đối tượng Surface.
Lớp MultiPolygon
MultiPolygon là 1 MultiSurface với các đối tượng là các Polygon.
Ví dụ về MultiPolygon: Trong bản đồ thì MultiPolygon có thể dùng để
biểu diễn 1 hệ thống các ao hồ.
Các Polygon của 1 MultiPolygon khơng được phép có các thuộc tính
interior giao nhau .
Định dạng dữ liệu không gian trong MySQL
Phần này mô tả các định dạng dữ liệu không gian được dùng để thể hiện các
đối tượng địa lý trong các câu truy vấn.

152



PHỤ LỤC – MySQL với phần mở rộng hỗ trợ cho OpenGIS

Các loại định dạng này gồm:
Định dạng Well-Known Text (WKT)
Định dạng Well-Known Binary (WKB)
Các đối tượng địa lý được lưu trữ bên trong MySQL với định dạng khác với
2 loại trên.

Định dạng Well-Known Text (WKT)
Loại định dạng này được dùng để truyển các dữ liệu của đối tượng dưới dạng
các chuỗi ASCII
Ví dụ về việc sử dụng WKT để mô tả đối tượng như sau:
Một điểm: POINT(15 20)
Chú ý là khơng có dấu phẩy ngăn cách giữa các thành phần của 1 điếm
Một LineString gồm có 4 điểm: LINESTRING(0 0, 10 10, 20 25, 50 60)
Chú ý là giữa các điểm có dấu phẩy ngăn cách
Một Polygon với 1 vòng exterior và 1 vòng interior :
POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7, 5 5))
Một MultiPoint gồm 3 điểm: MULTIPOINT(0 0, 20 20, 60 60)
Một MultiLineString với 2 thành phần LineString
MULTILINESTRING((10 10, 20 20), (15 15, 30 15))
Một MultiPolygon với 2 thành phần Polygon
MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)),((5 5,7
5,7 7,5 7, 5 5)))
Một GeometryCollection với 2 Point và 1 LineString
GEOMETRYCOLLECTION(POINT(10 10),POINT(30
30),LINESTRING(15 15,20 20))

153



PHỤ LỤC – MySQL với phần mở rộng hỗ trợ cho OpenGIS

Định dạng Well-Known Binary (WKB)
Loại định dạng này được định nghĩa trong đặc tả của OpenGIS.
Nó cũng được định nghĩa trong ISO ``SQL/MM Part 3: Spatial''
WKB được dùng để trao đổi dữ liệu của các đối tượng dưới dạng chuỗi
binary.
WKB sử dụng 1 số nguyên không dấu 1 byte, dấu nguyên không dấu 4 byte,
số thực 8 byte (theo định dạng IEEE 754).
Ví dụ như 1 giá trị WKB tương ứng với WKT POINT(1 1) gồm có 21 byte
liên tiếp như dưới đây (mỗi byte được mô tả bằng 2 con số thập lục phân):
0101000000000000000000F03F000000000000F03F
Chuỗi byte này có thể được tách ra thành các phần nhau:
Trật tự byte : 01
Loại WKB : 01000000
X

: 000000000000F03F

Y

: 000000000000F03F

Các thành phần này có ý nghĩa như sau:
• Trật tự byte có thể là 0 hoặc là 1 dùng để thể hiện cách lưu trữ là littleendian hay big-endian.
• Giá trị “loại WKB” là mã dùng để chỉ loại đối tượng địa lý,gốm có các
giá trị từ 1 đến 7 tương ứng với các loại đối tượng Point,
LineString,


Polygon,

MultiPoint,

MultiLineString,

MultiPolygon, và GeometryCollection.

• Hai thành phần X và Y là các số thập phân dùng để thể hiện 2 giá trị X
và Y của đối tượng Point.

154


PHỤ LỤC – MySQL với phần mở rộng hỗ trợ cho OpenGIS

Các giá trị WKB dùng cho các đối tượng phức tạp sẽ có cấu trúc phức tạp,
theo như mơ tả của OpenGIS.
Tạo 1 cơ sở dữ liệu trong MySQL dùng cho dữ liệu không gian
Phần này mô tả các loại dữ liệu được dùng để thể hiện các loại dữ liệu không
gian, và các hàm dùng cho việc tạo và truy vần dữ liệu không gian.

Các kiểu dữ liệu khơng gian trong MySQL:
MySQL có các kiểu dữ liệu tương ứng với các lớp trong OpenGIS. Một vài
kiểu có thể lưu trữ 1 đối tượng địa lý đơn giản
GEOMETRY
POINT
LINESTRING
POLYGON
GEOMETRY có thể lưu trữ bất cứ kiểu dữ liệu địa lý nào. Các kiểu dữ liệu

như: POINT, LINESTRING và POLYGON chỉ chứa các kiểu dữ liệu thuộc
cùng 1 loại nào đó.
Các kiểu dữ liệu khác có thể lưu tập hợp của giá trị sau:
MULTIPOINT
MULTILINESTRING
MULTIPOLYGON
GEOMETRYCOLLECTION
GEOMETRYCOLLECTION có thể lưu tập hợp đối tượng của bất cứ kiểu dữ
liệu

nào.Các

loại

tập

hợp

khác

như

MULTIPOINT,

MULTILINESTRING,MULTIPOLYGON và GEOMETRYCOLLECTION
chỉ lưu được các đối tượng thuộc các kiểu dữ liệu tương ứng.

155



PHỤ LỤC – MySQL với phần mở rộng hỗ trợ cho OpenGIS

Tạo các giá trị không gian
Phần này mô tả cách dùng các hàm của Well-Known Text và Well-Known
Binary để tạo ra các giá trị không gian theo chuẩn OpenGIS.
Tạo các giá trị địa lý bằng các hàm của WKT
MySQL có các hàm nhận tham số truyền vào thuộc dạng Well-Known Text
và có thể có thêm tham số SRID. Chúng trả về đối tượng địa lý tương ứng.
Hàm GeoFromText() nhận tham số đầu vào là 1 chuỗi WKT của bất kì
loại đối tượng nào.
Hàm GeomFromText(wkt[,srid]) , GeometryFromText(wkt[,srid])
Tạo đối tượng địa lý bất kì với giá trị WKT và SRID truyền vào.
Hàm LineFromText(wkt[,srid]) , LineStringFromText(wkt[,srid])
Tạo đối tượng LINESTRING với giá trị WKT và SRID truyền vào.
HàmMLineFromText(wkt[,srid]),
MultiLineStringFromText(wkt[,srid])
Tạo đối tượng MULTILINESTRING với giá trị WKT và SRID truyền
vào.
Hàm MPointFromText(wkt[,srid]) , MultiPointFromText(wkt[,srid])
Tạo đối tượng MULTIPOINT với giá trị WKT và SRID truyền vào.
Hàm MPolyFromText(wkt[,srid]) , MultiPolygonFromText(wkt[,srid])
Tạo đối tượng MULTIPOLYGON với giá trị WKT và SRID truyền
vào
Hàm PointFromText(wkt[,srid])
Tạo đối tượng POINT với giá trị WKT và SRID truyền vào
Hàm PolyFromText(wkt[,srid]) , PolygonFromText(wkt[,srid])
Tạo đối tượng POLYGON với giá trị WKT và SRID truyền
Tạo đối tượng địa lý sử dụng các hàm của WKB

156



PHỤ LỤC – MySQL với phần mở rộng hỗ trợ cho OpenGIS

Hàm GeomCollFromWKB(wkb[,srid]) ,
GeometryCollectionFromWKB(wkb[,srid]). Tạo đối tượng
GEOMETRYCOLLECTION với giá trị WKT và SRID truyền vào.
Hàm GeomFromWKB(wkb[,srid]) , GeometryFromWKB(wkb[,srid]).
Tạo đối tượng địa lý bất kì với giá trị WKT và SRID truyền vào.
Hàm LineFromWKB(wkb[,srid]) , LineStringFromWKB(wkb[,srid]).
Tạo đối tượng LINESTRING với giá trị WKT và SRID truyền vào.
Hàm MLineFromWKB(wkb[,srid]) ,
MultiLineStringFromWKB(wkb[,srid]). Tạo đối tượng
MULTILINESTRING với giá trị WKT và SRID truyền vào.
Hàm MPointFromWKB(wkb[,srid]) ,
MultiPointFromWKB(wkb[,srid]).Tạo đối tượng MULTIPOINT với giá
trị WKT và SRID truyền vào.
Hàm MPolyFromWKB(wkb[,srid]) ,
MultiPolygonFromWKB(wkb[,srid]).Tạo đối tượng MULTIPOLYGON
với giá trị WKT và SRID truyền vào.
Hàm PointFromWKB(wkb[,srid]).Tạo đối tượng POINT với giá trị
WKT và SRID truyền vào.
Hàm PolyFromWKB(wkb[,srid]) , PolygonFromWKB(wkb[,srid]). Tạo
đối tượng POLYGON với giá trị WKT và SRID truyền vào.

Tạo các cột lưu dữ liệu không gian
Dùng lệnh CREATE TABLE để tạo các bảng với các cột lưu dữ liệu không
gian
mysql> CREATE TABLE geom (g GEOMETRY);
Query OK, 0 rows affected (0.02 sec)


157


PHỤ LỤC – MySQL với phần mở rộng hỗ trợ cho OpenGIS

Dùng lệnh ALTER TABLE để thêm hoặc xóa 1 cột trong 1 bảng có sẵn
mysql> ALTER TABLE geom ADD pt POINT;
Query OK, 0 rows affected (0.00 sec)
Records: 0

Duplicates: 0

Warnings: 0

mysql> ALTER TABLE geom DROP pt;
Query OK, 0 rows affected (0.00 sec)
Records: 0

Duplicates: 0

Warnings: 0

Thêm dữ liệu vào các cột lưu trữ thông tin không gian
Dữ liệu được lưu trữ trong các cột này dưới dạng riêng bên trong MySQL
nhưng bạn có thể tạo ra định dạng riêng này từ định dạng WKB hoặc WKT.
Các ví dụ dưới đây mơ tả cách thêm dữ liệu không gian vào bảng bằng cách
chuyển từ WKT sang định dạng riêng trong MySQL.
Ta có thể thực hiện việc chuyển đổi trực tiếp bằng câu lệnh INSERT
INSERT INTO geom VALUES (GeomFromText('POINT(1 1)'));

SET @g = 'POINT(1 1)';
INSERT INTO geom VALUES (GeomFromText(@g));

Hoặc có thể thực hiện việc chuyển đổi trước khi thực hiện câu lệnh INSERT
SET @g = GeomFromText('POINT(1 1)');
INSERT INTO geom VALUES (@g);
SET @g = 'LINESTRING(0 0,1 1,2 2)';
INSERT INTO geom VALUES (GeomFromText(@g));

Các ví dụ dưới đây thêm các kiểu dữ liệu phức tạp hơn vào các bảng
SET @g = 'POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7,
5 5))';
INSERT INTO geom VALUES (GeomFromText(@g));
SET @g ='GEOMETRYCOLLECTION(POINT(1 1),LINESTRING(0 0,1 1,2
2,3

3,4 4))';

INSERT INTO geom VALUES (GeomFromText(@g));

158


PHỤ LỤC – MySQL với phần mở rộng hỗ trợ cho OpenGIS

Các ví dụ ở trên đều sử dụng hàm GeoFromText() để tạo các đối tượng đại
lý, các ví dụ dưới đây sẽ dùng các hàm riêng biệt của từng loại.
SET @g = 'POINT(1 1)';
INSERT INTO geom VALUES (PointFromText(@g));
SET @g = 'LINESTRING(0 0,1 1,2 2)';

INSERT INTO geom VALUES (LineStringFromText(@g));
SET @g = 'POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7,
5

5))';

INSERT INTO geom VALUES (PolygonFromText(@g));
SET @g =
'GEOMETRYCOLLECTION(POINT(1 1),LINESTRING(0 0,1 1,2 2,3 3,4
4))';
INSERT INTO geom VALUES (GeomCollFromText(@g));

Có thể sử dụng định dạng WKB như sau: Thêm 1 POINT(1 1) vào bảng
mysql> INSERT INTO geom VALUES
->
(GeomFromWKB(0x0101000000000000000000F03F000000000000F03F));

Lấy dữ liệu không gian
Các đối tượng địa lý được lưu trữ có thể được lấy ra bằng định dạng riêng
bên trong MySQL nhưng bạn có thể chuyển chúng sang các định dạng WKT
hoặc WKB.
Lấy dữ liệu theo định dạng WKT. Dùng hàm AsText() để chuyển từ định
dạng riêng bên trong MySQL thành định dạng WKT.
mysql> SELECT AsText(g) FROM geom;
+-------------------------+
| AsText(p1)

|

159



PHỤ LỤC – MySQL với phần mở rộng hỗ trợ cho OpenGIS

+-------------------------+
| POINT(1 1)

|

| LINESTRING(0 0,1 1,2 2) |
+-------------------------+

Lấy dữ liệu theo định dạng WKB
SELECT AsBinary(g) FROM geom;

Phân tích thơng tin không gian
Các hàm dùng để truy vấn dữ liệu khơng gian có thể chia thành các 4 nhóm:
Các hàm dùng để chuyển đổi kiểu định dạng của đối tượng địa lý
Các hàm dùng để truy xuất đến các thuộc tính về chất lượng và số lượng
của đối tượng.
Các hàm mô tả quan hệ giữa 2 đối tượng địa lý.
Các hàm dùng để tạo ra đối tượng dựa trên đối tượng khác

Các hàm dùng để chuyển đổi kiểu định dạng của đối tượng địa lý
AsBinary(g): Chuyển từ định dạng riêng bên trong thành WKB và trả về kết
quả dạng binary.
AsText(g):Chuyển từ định dạng riêng bên trong thành WKT và trả về kết
quả dạng chuỗi.
mysql> SET @g = 'LineString(1 1,2 2,3 3)';
mysql> SELECT AsText(GeomFromText(@g));

+--------------------------+
| AsText(GeomFromText(@G)) |
+--------------------------+
| LINESTRING(1 1,2 2,3 3)

|

+--------------------------+

160


PHỤ LỤC – MySQL với phần mở rộng hỗ trợ cho OpenGIS

GeomFromText(wkt[,srid]): Chuyển từ định dạng WKT thành định dạng
riêng bên trong và trả kết quả về
GeomFromWKB(wkb[,srid]): Chuyển từ định dạng WKT thành định dạng
riêng bên trong và trả kết quả về
Các hàm địa lý
Các hàm liệt kê dưới đây khơng có ràng buộc cho tham số và có thể nhận bất
kì loại đối tượng nào.
Dimension(g) :Trả về thuộc tính Dimension của đối tượng g. Giá trị trả về
có thể là -1, 0, 1, 2
mysql> SELECT Dimension(GeomFromText('LineString(1 1,2 2)'));
+------------------------------------------------+
| Dimension(GeomFromText('LineString(1 1,2 2)')) |
+------------------------------------------------+
|

1 |


+------------------------------------------------+

Envelope(g): Trả về hình chữ nhật bao nhỏ nhất (MBR) xung quanh đối
tượng g. Giá trị trả về là 1 đối tượng Polygon.
mysql> SELECT AsText(Envelope(GeomFromText('LineString(1 1,2
2)')));
+-------------------------------------------------------+
| AsText(Envelope(GeomFromText('LineString(1 1,2 2)'))) |
+-------------------------------------------------------+
| POLYGON((1 1,2 1,2 2,1 2,1 1))

|

+-------------------------------------------------------+

Polygon được định nghĩa bởi các điểm ở các góc của hình chữ nhật bao
POLYGON((MINX MINY,MAXX MINY,MAXX MAXY,MINX MAXY,MINX MINY))

161


PHỤ LỤC – MySQL với phần mở rộng hỗ trợ cho OpenGIS

GeometryType(g): Trả về chuỗi cho biết loại mà đối tượng này thuộc về.
Tên này tương ứng với 1 lớp con cụ thể.
mysql> SELECT GeometryType(GeomFromText('POINT(1 1)'));
+------------------------------------------+
| GeometryType(GeomFromText('POINT(1 1)')) |
+------------------------------------------+

| POINT

|

SRID(g): Trả về 1 số là ID của loại hệ tọa độ của đối tượng. Trong MySQL
thì SRID chỉ là 1 số liên quan đến 1 loại đối tượng
mysql> SELECT SRID(GeomFromText('LineString(1 1,2 2)',101));
+-----------------------------------------------+
| SRID(GeomFromText('LineString(1 1,2 2)',101)) |
+-----------------------------------------------+
|

101 |

+-----------------------------------------------+

Các hàm của lớp Point
Một Point gồm 2 thành phần là X và Y, có thể lấy giá trị của 2 thành phần
này như sau:
X(p)
mysql> SELECT X(GeomFromText('Point(56.7 53.34)'));
+--------------------------------------+
| X(GeomFromText('Point(56.7 53.34)')) |
+--------------------------------------+
|

56.7 |

+--------------------------------------+


Y(p)
mysql> SELECT Y(GeomFromText('Point(56.7 53.34)'));
+--------------------------------------+

162


PHỤ LỤC – MySQL với phần mở rộng hỗ trợ cho OpenGIS

| Y(GeomFromText('Point(56.7 53.34)')) |
+--------------------------------------+
|

53.34 |

+--------------------------------------+

Các hàm của lớp LineString
LineString bao gồm các Point. Bạn có thể lấy từng Point, đếm số lượng Point
hoặc lấy chiều dài của LineString này.
EndPoint(ls): Trả về Point cuối cùng của LineString ls
mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
mysql> SELECT AsText(EndPoint(GeomFromText(@ls)));
+-------------------------------------+
| AsText(EndPoint(GeomFromText(@ls))) |
+-------------------------------------+
| POINT(3 3)

|


+-------------------------------------+

GLength(ls): Trả về chiều dài của LineString ls trong hệ tọa độ mà nó thuộc
về.
mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
mysql> SELECT GLength(GeomFromText(@ls));
+----------------------------+
| GLength(GeomFromText(@ls)) |
+----------------------------+
|

2.8284271247462 |

+----------------------------+

IsClosed(ls): Trả về 1 nếu như LineString này là closed (tức là hàm
EndPoint() và hàm StartPoint() trả về cùng 1 giá trị). Trả về 0 nếu
LineString khơng closed và trả về -1 nếu nó là null.
mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
mysql> SELECT IsClosed(GeomFromText(@ls));

163


PHỤ LỤC – MySQL với phần mở rộng hỗ trợ cho OpenGIS

+-----------------------------+
| IsClosed(GeomFromText(@ls)) |
+-----------------------------+
|


0 |

+-----------------------------+

NumPoints(ls): Trả về số lượng điểm trong LineString ls
mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
mysql> SELECT NumPoints(GeomFromText(@ls));
+------------------------------+
| NumPoints(GeomFromText(@ls)) |
+------------------------------+
|

3 |

+------------------------------+

PointN(ls,n): Trả về Point thứ n trong LineString ls, tính từ số 1.
mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
mysql> SELECT AsText(PointN(GeomFromText(@ls),2));
+-------------------------------------+
| AsText(PointN(GeomFromText(@ls),2)) |
+-------------------------------------+
| POINT(2 2)

|

StartPoint(ls): Trả về Point đầu tiên trong LineString ls
mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
mysql> SELECT AsText(PointN(GeomFromText(@ls),2));

+-------------------------------------+
| AsText(PointN(GeomFromText(@ls),2)) |
+-------------------------------------+
| POINT(2 2)

|

Các hàm của lớp MultiLineString

164


PHỤ LỤC – MySQL với phần mở rộng hỗ trợ cho OpenGIS

GLength(mls): Trả về số thập phân cho biết chiều dài của MultiLineString
này. Chiều dài này bằng tổng các chiều dài của nó.
mysql> SET @mls = 'MultiLineString((1 1,2 2,3 3),(4 4,5 5))';
mysql> SELECT GLength(GeomFromText(@mls));
+-----------------------------+
| GLength(GeomFromText(@mls)) |
+-----------------------------+
|

4.2426406871193 |

IsClosed(mls): Trả về nếu MultiLineString này là closed.
Các hàm của lớp Polygon
Area(poly): Trả về diện tích của Polygon dưới dạng số thực, được đo trong
hệ tọa độ của đối tượng.
mysql> SET @poly = 'Polygon((0 0,0 3,3 0,0 0),(1 1,1 2,2 1,1

1))';
mysql> SELECT Area(GeomFromText(@poly));
+---------------------------+
| Area(GeomFromText(@poly)) |
+---------------------------+
|

4 |

+---------------------------+

ExteriorRing(poly): Trả về đường bao ngoài của đối tượng Polygon poly
dưới dạng 1 LineString
mysql> SET @poly =
-> 'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1
1))';
mysql> SELECT AsText(ExteriorRing(GeomFromText(@poly)));
+-------------------------------------------+
| AsText(ExteriorRing(GeomFromText(@poly))) |
+-------------------------------------------+

165


PHỤ LỤC – MySQL với phần mở rộng hỗ trợ cho OpenGIS

| LINESTRING(0 0,0 3,3 3,3 0,0 0)

|


+-------------------------------------------+

InteriorRingN(poly,n): Trả về đường bao trong thứ n của Polygon dưới
dạng 1 LineString, tính từ 1.
mysql> SET @poly =
-> 'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1
1))';
mysql> SELECT AsText(InteriorRingN(GeomFromText(@poly),1));
+----------------------------------------------+
| AsText(InteriorRingN(GeomFromText(@poly),1)) |
+----------------------------------------------+
| LINESTRING(1 1,1 2,2 2,2 1,1 1)

|

NumOfInteriorRings(poly): Trả về số lượng đường bao bên trong của đối
tượng
mysql> SET @poly =
-> 'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1
1))';
mysql> SELECT NumInteriorRings(GeomFromText(@poly));
+---------------------------------------+
| NumInteriorRings(GeomFromText(@poly)) |
+---------------------------------------+
|

1 |

+---------------------------------------+


Các hàm của đối tượng MultiPolygon
Area(mpoly): Trả về diện tích của MultiPolygon mpoly tính theo hệ tọa độ
của đối tượng.
mysql> SET @mpoly =
-> 'MultiPolygon(((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1
1)))';

166


PHỤ LỤC – MySQL với phần mở rộng hỗ trợ cho OpenGIS

mysql> SELECT Area(GeomFromText(@mpoly));
+----------------------------+
| Area(GeomFromText(@mpoly)) |
+----------------------------+
|

8 |

+----------------------------+

Các hàm của lớp GeometryCollection
GeometryN(gc,n)
mysql> SET @gc = 'GeometryCollection(Point(1 1),LineString(2
2, 3 3))';
mysql> SELECT AsText(GeometryN(GeomFromText(@gc),1));
+----------------------------------------+
| AsText(GeometryN(GeomFromText(@gc),1)) |
+----------------------------------------+

| POINT(1 1)

|

+----------------------------------------+

NumGeometries(gc): Trả về số lượng đối tượng trong GeometryCollection
gc
mysql> SET @gc = 'GeometryCollection(Point(1 1),LineString(2
2, 3 3))';
mysql> SELECT NumGeometries(GeomFromText(@gc));
+----------------------------------+
| NumGeometries(GeomFromText(@gc)) |
+----------------------------------+
|

2 |

+----------------------------------+

Các hàm dùng để tạo ra các đối tượng mới từ những đối tượng có sẵn
Các hàm tạo ra các đối tượng mới

167


PHỤ LỤC – MySQL với phần mở rộng hỗ trợ cho OpenGIS

Envelope(g)
StartPoint(ls)

EndPoint(ls)
PointN(ls,n)
ExteriorRing(poly)
InteriorRingN(poly,n)
GeometryN(gc,n)
Các hàm kiểm tra mối quan hệ giữa các đối tượng
Các hàm trong phần này nhận tham số là 2 đối tượng và trả về mối quan hệ
dựa trên hình chữ nhật bao (MBR) của chúng.
MySQL cung cấp các hàm dùng để kiểm tra quan hệ giữa các hình chữ nhật
bao của 2 đối tượng.
MBRContains(g1,g2): Trả về 1 hoặc 0 cho biết hình chữ nhật bao của g1 có
chứa hình chữ nhật bao của g2 khơng
mysql> SET @g1 = GeomFromText('Polygon((0 0,0 3,3 3,3 0,0
0))');
mysql> SET @g2 = GeomFromText('Point(1 1)');
mysql> SELECT MBRContains(@g1,@g2), MBRContains(@g2,@g1);
----------------------+----------------------+
| MBRContains(@g1,@g2) | MBRContains(@g2,@g1) |
+----------------------+----------------------+
|

1 |

0 |

+----------------------+----------------------+

MBRDisjoint(g1,g2): Trả về 1 hoặc 0 cho biết hình chữ nhật bao của g1 và
hình chữ nhật bao của g2 có rời nhau (không giao nhau) không


168


PHỤ LỤC – MySQL với phần mở rộng hỗ trợ cho OpenGIS

MBREqual(g1,g2): Trả về 1 hoặc 0 cho biết hình chữ nhật bao của g1 và
hình chữ nhật bao của g2 là một không.
MBRIntersects(g1,g2): Trả về 1 hoặc 0 cho biết hình chữ nhật bao của g1
và hình chữ nhật bao của g2 có cắt nhau khơng
MBROverlaps(g1,g2): Trả về 1 hoặc 0 cho biết hình chữ nhật bao của g1 và
hình chữ nhật bao của g2 có chồng lên nhau khơng
MBRTouches(g1,g2): Trả về 1 hoặc 0 cho biết hình chữ nhật bao của g1 và
hình chữ nhật bao của g2 có tiếp xúc với nhau khơng
MBRWithin(g1,g2) : Trả về 1 hoặc 0 cho biết hình chữ nhật bao của g1 có
nằm trong hình chữ nhật bao của g2 khơng.
mysql> SET @g1 = GeomFromText('Polygon((0 0,0 3,3 3,3 0,0
0))');
mysql> SET @g2 = GeomFromText('Polygon((0 0,0 5,5 5,5 0,0
0))');
mysql> SELECT MBRWithin(@g1,@g2), MBRWithin(@g2,@g1);
+--------------------+--------------------+
| MBRWithin(@g1,@g2) | MBRWithin(@g2,@g1) |
+--------------------+--------------------+
|

1 |

0 |

Kết nối với MySQL trong .NET

Để thực hiện việc kết nối với MySQL trong .NET và thực hiện câu các truy
vấn ,ta có thể sử dụng cơng cụ MySQL-connector-net-1.0.4. được cung cấp
trên trang chủ của MySQL: www.mysql.com.
Sau khi cài đặt, ta sẽ có thư viện MySql.Data.dll và một file hướng dẫn sử
dụng.
Để sử dụng ta chỉ cần thêm thư viện vào Project thêm dòng khai báo sau vào
chương trình

169



×