1. Trang chủ
  2. » Giáo Dục - Đào Tạo

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

18 394 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 18
Dung lượng 559,13 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Đị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... ™ Các loại định dạng này

Trang 1

ƒ 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

Trang 2

™ 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))

Trang 3

Đị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à little-endian hay big-little-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

Trang 4

™ 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

Trang 5

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

Trang 6

ƒ 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)

Trang 7

™ 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

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

Trang 8

™ 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,

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) |

Trang 9

+ -+

| 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) |

+ -+

Trang 10

™ 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))

Trang 11

™ 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)'));

+ -+

Trang 12

| 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));

Trang 13

+ -+

| 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

Trang 14

™ 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))) |

+ -+

Ngày đăng: 30/07/2014, 17:20

HÌNH ẢNH LIÊN QUAN

Hình chữ nhật bao của g2 có rời nhau (không giao nhau) không - 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
Hình ch ữ nhật bao của g2 có rời nhau (không giao nhau) không (Trang 17)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm