Nhóm lệnh định dạng

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Một số mô hình cơ sở dữ liệu mở rộng Luận văn ThS. Công nghệ thông tin 60 48 05002 (Trang 40)

Thao tác tạo và sử dụng hàm

Sử dụng file viết bằng ngôn ngữ C thì chúng ta cần biên dịch chúng thành file có mở rộng là “.dll” nếu thao tác trong môi trƣờng Window còn file có mở rộng là “.so”

Sau khi đã biên dịch file .c thành file .so, đến đây tạo và sử dụng hàm mở rộng không còn là việc khó khăn. Việc tạo và sử dụng hàm mở rộng đƣợc thao tác bằng ngôn ngữ SQL. Nhƣ đã giới thiệu phần trên, để tạo hàm mở rộng chúng ta dùng lệnh CREATE FUNCTION

Ví dụ:

CREATE FUNCTION add_one(integer) RETURNS integer AS „funcs.so‟,‟add_one‟ LANGUAGE „C‟ ;

Cú pháp lệnh:

CREATE FUNCTION [tên hàm] RETURNS [kiểu trả về] AS [file.so], [tên hàm sử dụng] LANGUAGE [ngôn ngữ].

Việc xây dựng hàm mở rộng trong postgreSQL đƣợc thực hiện một lần, nhƣng sẽ đƣợc sử dụng trong bất cứ lần khác bởi vì, sau khi biên dịch dạng file .so đã luôn tồn tại trong thƣ mục /usr/lib/pgsql/.

2.1.4. Cài đặt hệ quản trị CSDL PostgreSQL.

PostgreSQL có thể chạy trên nhiều hệ điều hành nhƣ Linux, UNIX và Windows. Thực hiện việc cài đặt hệ quản trị CSDL PostgreSQL trong hệ điều hành Window. Tải phiên bản Postgresql-8.4 sau đó thực hiện các bƣớc sau để cài đặt hệ quản trị cơ sở dữ liệu Postgresql.

Download tài liệu và phần mềm hệ quản trị CSDL PostgreSQL tại đƣờng dẫn sau: http://www.postgresql.org/ hoặc http://www.pgadmin.org.

Bƣớc 1: Cài đặt Postgresql-8.4.17-1-windows và postgis_1_5_pg84 Bƣớc 2: Mở pgAdmin3 tạo cơ sở dữ liệu có tên xebuyt

Có 2 cách thực hiện nhập dữ liệu Cách 1: Nhập dữ liệu qua ứng dụng

Bƣớc 3: Chạy ứng dụng shp2pgsql-gui để nhập dữ liệu và cơ sở dữ liệu vừa tạo (C:\Program Files\PostgreSQL\8.4\bin\postgisgui\shp2pgsql-gui)

Ví dụ 1: Nhập dữ liệu bản đồ hành chính Việt Nam.

Shape File: Chọn đến đƣờng dẫn chứa file .shp ở đây là file VNM_adm0.shp

(file.shp về bản đồ số ViệtNam tại http://gpsvietnam.googlepages.com/maps)

PostGIS Connection: Kết nối tới cơ sở dữ liệu Destination Table: đặt tên là vietnam_adm0 Options…: Để là LATIN1

Import: Hoàn thành nhập file VNM_adm0.shp vào cơ sở dữ liệu, thành công nếu thông báo Shapefile import completed.

Cách 2: Nhập dữ liệu qua dòng lệnh.

Sau khi nhập xong dữ liệu trong hệ quản trị cơ sở dữ liệu PostgreSQL thực hiện các truy vấn không gian:

Ví dụ2: Tính tổng chiều dài biên giới đƣờng bộ của Việt Nam ( Với file

CSDL VNM_adm0.shp trong ví dụ 1 ).

SELECT t1.cntry_name, sum(ST_Length(ST_Intersection(t1.the_geom, t2.the_geom))) "chieu dai bien gioi"

FROM thegioi_borders t1, thegioi_borders t2

WHERE ST_Touches(t1.the_geom, t2.the_geom) and t1.cntry_name = 'Vietnam' GROUP BY t1.cntry_name

Kết quả kiểm tra

Hình 2. 6. Kết quả kiểm tra tính tống chiều dài biên giới đường bộ Việt Nam

Ví dụ 3: Tính tổng độ dài đƣờng bộ chạy qua địa phận Hà Nội (Với file

SELECT t1.name_2, SUM(ST_Length(ST_Intersection(t1.the_geom, t2.the_geom))) "chieu dai"

FROM vietnam_adm2 t1, vietnam_road t2

WHERE ST_Intersects(t1.the_geom, t2.the_geom) AND t1.name_2 like 'Hà N?i%'

AND t2.f_code_des like 'Road' GROUP BY t1.name_2

Kết quả kiểm tra câu truy vấn.

2.2. POSTGIS

2.2.1. Giới thiệu về POSTGIS .

PostGis đƣợc Refraction Research Inc phát triển nhƣ một dự án nghiên cứu công nghệ CSDL không gian. PostGis hỗ trợ đối tƣợng địa lý cho CSDL đối tƣợng quan hệ PostgreSQL, cho phép PostgreSQL sử dụng nhƣ một CSDL không gian phụ trợ cho các hệ thống thông tin địa lý GIS(Geographic Information System).

PostGIS là một mã nguồn mở, mở rộng không gian cho PostgreSQL. CSDL không gian trong PostGIS đƣợc sử dụng cho hiệu suất sử dụng cao đa ngƣời dùng truy cập đến tập dữ liệu có tính liền mạch. Nếu bạn quản lý số lƣợng lớn đọc/ghi dữ liệu không gian, thì việc sử dụng CSDL không gian có thể cải thiện đƣợc tốc độ truy cập, dễ dàng quản lý và đảm bảo tính toàn vẹn dữ liệu. PostGIS cung cấp việc tạo và thao tác trên CSDL không gian nhƣng nó bổ sung thêm các kiểu dữ liệu không gian và các mối quan hệ giữa các kiểu dữ liệu đó. PostGIS đƣợc phát hành lần đầu tiên vào năm 2001, và hiện đang đƣợc sử dụng trên khắp thế giới nhƣ một máy chủ hoạt động cho các đối tƣợng không gian.

2.2.2. Chức năng cơ bản của Postgis.

PostGIS hỗ trợ tất cả các hàm (function) và các đối tƣợng (object) định nghĩa trong OpenGIS (Simple Feature For SQL). Giống nhƣ Oracle, DB2 và SQL server.

Đối với truy vấn không gian là thực hiện các câu lệnh truy vấn đƣợc thực hiện trên bảng không gian trong CSDL để tìm ra mối quan hệ giữa các đối tƣợng trong không gian, mối quan hệ đó có thể là sự giao nhau, tính khoảng cách, tính diện tích, tính chu vi, tính chiều dài…và các câu lệnh truy vấn đƣợc viết ra dễ dàng hơn nhờ các hàm hỗ trợ sẵn của PostGIS. PostGIS cung cấp các nhóm hàm để hỗ trợ việc truy vấn nhƣ nhóm hàm xác định mối quan hệ không gian, nhóm hàm trả về đối đối tƣợng mới…Nhờ đó, việc thực hiện truy vấn trong không gian sẽ trở nên dễ dàng và dễ thao tác hơn.

PostGIS đƣợc nở rộng hơn với những khả năng nhƣ:

Mở rộng lƣu trữ kiểu dữ liệu hình học cho các kiểu dữ liệu thƣờng dùng ( varchar, char, integer, date…).

- Thêm vào các functions cho kiểu hình học (geometry) và cung cấp các thông tin hữu ích .

ST_Distance(geometry,geometry),ST_Area(geometry), ST_Length(geometry), ST_Intersects(geometry)…

- Cơ chế đánh chỉ số cho các câu truy vấn với không gian giới hạn, trả về các record nhanh từ các bảng dữ liệu khổng lồ.

Những chức năng cơ bản của cơ sở dữ liệu không gian dễ dàng đƣợc liệt kê nhƣ: kiểu, hàm, chỉ mục. Do PostGis đƣợc sử dụng nhƣ một CSDL không gian nên sẽ bao gồm tất cả các đặc điểm của CSDL không gian nhƣ đã nêu tại chƣơng 1, bên cạnh đó có những đặc trƣng nhƣ sau [19]:

- Các kiểu dữ liệu hình học nhƣ Point, linestring, polygon, multipoint, multilinestring, multipolygons, geometrycollection. Các kiểu dữ liệu hình học này đƣợc lƣu trữ nhƣ đối tƣợng hình học.

- Các toán tử không gian cho phép xác định các phép đo địa lý nhƣ diện tích, tính khoảng cách, tính độ dài và chu vi. PostGis hỗ trợ các hàm cơ bản nhƣ : ST_Area(), ST_length(), ST_Perimeter, ST_Distance().... Các hàm này thƣờng thực hiện chức năng kiểu phép đo.

- Các toán tử không gian cho phép xác định không gian địa lý. Các thao tác nhƣ phép hợp, so sánh sự khác nhau giữa các đối tƣợng hình học, và PostGis hỗ trợ nhƣ: ST_Difference(), ST_bufffer()...

PostGis cung cấp việc đánh chỉ mục không gian tốc độ cao sử dụng GisT hoặc R-Tree. Chỉ mục hỗ trợ chọn lọc, cung cấp việc thực hiện truy vấn bản đồ pha trộn truy vấn không gian hoặc truy vấn không có không gian.

2.2.3. Cách lệnh thao tác trong PostGis

Công cụ shp2psql.

Shp2pgsql là công cụ dùng để chuyển định dạng file từ shap file sang định dạng file.sql, lƣu ý shap.file là định dạng dữ liệu không gian địa lý vector phổ biến cho các phần mềm GIS. Shap file trong không gian hỗ trợ mô tả các kiểu hình học chính Line, Point và Polygon. Các kiểu Point, line, Polygon. Các kiểu này cùng với thuộc tính địa lý có thể tạo rất nhiều hiển thị với dữ liệu địa lý. Shap file còn dùng để lƣu trữ vị trí hình học và thông tin thuộc tính liên quan. Công cụ psql

cung cấp một cách thức mạnh để quản lý mọi mặt của máy chủ PostgreSQL. Với psql có thể tạo và xóa CSDL , tablespacess, bảng, thực thi transaction, thực thi các truy vấn thông thƣờng nhƣ chọn bảng, chèn và nhiều hơn thế nữa

Cấu trúc câu lệnh psql : psql [option....] [dbname[username]].

Các hàm trong CSDL không gian PostGis[19].

Hình 2.8 Đƣờng viền

Loại Hàm Giải thích Kết quả trả về

Basic function

Envelope(geometry) Hình nhỏ nhất chứa geometry (bounding box)

Geometry IsEmpty(geometry) Geometry rỗng True/false Boundary(geometry) Biên của geometry Geometry

Topologica l/

Set

Operators

Equals (geo, geo) 2 geometry bằng nhau True/false Disjoint (geo, geo) Trả về true nếu hai geometry

không giao nhau

True/false

Intersects (geo, geo) Trả về true nếu 2 geometry

cắt Nhau True/false

Touches (geo, geo) 2 geometry có cùng biên True/false Crosses (geo, geo) Trả về true nếu vùng cắt với

1 đƣờng True/false

Within (geo1, geo2) Geo1 hoàn toàn nằm trong

geo2 True/false

Contains (geo1,

Overlaps (geo, geo) Kiểm tra chồng lớp True/false Spatial

Analysis

Distance (geo, geo) Khoảng cách ngắn nhất giữa hai geometry

Double

Length(geometry Chiều dài Double

Area(geometry) Diện tích Double Perimeter Chu vi Double Buffer Trả về tất cả các điểm nằm trong vùng buffer Geometry ConvexHull Trả về một tập đa giác lồi

nhỏ nhất chứa tất cả các điểm

Geometry Intersection

(geo,geo) Giao giữa 2 geometry Geometry St_union(geo, geo)

Hợp giữa 2 geometry Geometry Difference(geo, geo) Tìm kiếm sự khác nhau giữa

2 Geometry Geometry Symmdifference (geo,geo) Lấy tất cả các phần không giao

nhau của 2 geometry

Geometry

Hình 2.9: Một số hàm cơ bản trong PostGis.

Nhóm hàm điều khiển Addgeometry column()

Chức năng:

Hàm Addgeometry là thêm một cột hình học vào bảng đã tồn tại, hàm này rất quan trọng trong việc tạo bảng trong CSDL không gian.

Cú pháp:

Text Addgeometry column( varchar table_name, varvhar column _name, integer scrid, varchar type, integer dimension);

Text Addgeometry column( varchar schema_name, varvhar table_name, vachar column_name,integer srid, varchar type, integer dimension);

Trong đó:

schema_name: Tên của bảng sơ đồ, thƣờng mặc định khi cài đặt PostgreSQL

Srid: Giá trị là một số nguyên, tham chiếu đến bảng SPATIAL_REF_SYS.

Type: Xác định kiểu hình học cho cột cần thêm.

Dimension: Xác định chiều hình học, chiều tƣơng ứng với kiểu hình học.

DropGeometry column()

Chức năng:

Hàm DropGeometry column() là loại bỏ một cột hình học từ bảng không gian

Cú pháp:

Text DropGeometry column( varchar table_name, vachar column_name); Text DropGeometry column( varchar schema_name, varvhar table_name, vachar column_name);

Nhóm hàm khởi tạo hình học ST_Geometry FromText()

Chức năng:

Hàm ST_Geometry FromText() trả về giá trị đƣợc chỉ định ST_Geometry từ hiển thị WKT

Cú pháp:

Geometry ST_Geometry FromText(text WKT);

Hàm trả về kiểu hình học ở đầu ra ST_AsText().

Chức năng:

Hàm ST_AsText().trả về hiển thị dạng WKT của hình Cú pháp:

Text ST_AsText( geometry g);

Hàm xác định mối quan hệ không gian. ST_Equals()

Chức năng:

Hàm ST_Equals() là trả về True nếu đƣa ra những hình đƣợc coi là "bằng nhau trong không gian".

Cú pháp:

Boolean ST_Equals(geometry A, geometry B);

ST_Disjoint().

Chức năng:

Hàm ST_Disjoint() là trả về True nếu các hình "không giao nhau trong không gian" nếu chúng không chia sẻ bất cứ khoảng không gian nào cho nhau, hay là tách biệt hẳn với nhau. Nếu bất kỳ các hàm ST_Overlaps(),ST_Touches(),ST_within() trả về true thì các hình đó không phải có không gian phân chia. Hàm ST_Disjoint() không sử dụng cơ chế đánh chỉ mục.

Cú pháp:

Boolean ST_Disjoint(geometry A, geometry B);

ST_Intersects()

Chức năng:

Hàm ST_Intersects() là trả về True nếu các hình gọi là "giao nhau trong không gian" trả về false nếu chúng không có bất cứ điểm nào giao nhau. Nếu các hàm ST_Overlaps(),ST_Touches(),ST_within() trả về true thì các hình đó là giao nhau.

Cú pháp:

Boolean ST_Intersects(geometry A, geometry B);

ST_Touches()

Chức năng:

Hàm ST_Touches() là trả về True nếu các hinh đó có ít nhất một điểm chung, nhƣng bên trong chúng lại không giao nhau, quan hệ ST_Touches() áp dụng cho vùng/vùng, đƣờng/đƣờng, đƣờng/vùng và điểm /đƣờng nhƣng không áp dụng cho cặp điểm /điểm.

Cú pháp: Boolean ST_Intersects(geometry g1, geometry g2);

ST_Overlaps()

Chức năng:

Hàm ST_Overlaps() trả về true nếu các hình có khoảng không gian chia sẻ, có cùng chiều, nhƣng chúng không hoàn toàn bị chứa bởi hình khác.

Cú pháp:

Boolean ST_Overlaps(geometry A, geometry B);

Chức năng:

Hàm ST_Crosses() là trả về true nếu đối tƣợng hình học thu đƣợc có chiều nhỏ hơn chiều lớn nhất của hai đối tƣợng hình học ban đầu. Đối tƣợng thu đƣợc phải chứa các điểm bên trong của hai đối tƣợng hình học ban đầu và đối tƣợng thu đƣợc phải không bằng một trong hai đối tƣợng đầu vào, trƣờng hợp còn lại trả về false.

Cú pháp:

Boolean ST_Crosses(geometry g1, geometry g2);

ST_within()

Chức năng:

Hàm ST_within() là trả về true nếu hình A nằm hoàn toàn bên trong hình B. Cú pháp:

Boolean ST_within(geometry A, geometry B);

ST_Contains()

Chức năng:

Hàm ST_Contains() là trả về true khi và chỉ khi không có điểm nào của B nằm bên ngoài A và ít nhất 1 điểm bên trong B nằm bên trong A.

Cú pháp:

Boolean ST_Contains(geometry A, geometry B);

ST_Distance().

Chức năng:

Hàm ST_Distance() trả về khoảng cách giữa hai điểm, giữa hai điểm và đƣờng trong không gian 2D. Đơn vị mặc định là meter.

Cú pháp:

Float ST_Distance(geometry g1, geometry g2).

ST_length().

Chức năng:

Hàm ST_length()trả về độ dài 2 d của hình nếu chúng là linestring hoặc multilinestring. Đơn vị mặc định là "meter".

Cú pháp:

Float ST_length(geometry linestring);

ST_Area().

Hàm .ST_Area() trả về diện tích của hình nếu nó mô tả Polygon hoặc multipolygon. Đơn vị mặc định là meter.

Cú pháp:

Float ST_Area(geometry g1);

ST_Perimeter().

Hàm ST_Perimeter trả về giá trị chu vi của hình nếu nó có dạng polygon hoặc multipolygon. Đơn vị mặc định là meter.

Cú pháp:

Float ST_Perimeter(geometry g1);

Nhóm hàm đƣa ra đối tƣợng hình mới. ST_Intersection().

Chức năng:

Hàm ST_Intersection() là trả về một hình , hiển thị phần chung giữa hình A và hình B. Nếu hình A và hình B không có bất kỳ điểm chung thì trả về đối tƣợng hình rỗng.

Cú pháp:

Geometry ST_Intersection(geometry A, geometry B) ;

Hình 2.10. A. Intersection(B)

ST_Difference()

Chức năng:

Hàm ST_Difference() trả về một hình hiển thị phần của hình A mà không giao với hình B. Chúng ta có thể hiểu theo công thức sau:

ST_Difference()=Geometry A- ST_Intersection(A,B).

Nếu A hoàn toàn nằm trong B, thì A và B không có điểm khác biệt, nghĩa là hàm ST_Difference() trả về giá trị rỗng.

Geometry ST_Difference(geometry geomA, geometry geomB) ;

Hình 2.11: A. Difference(B) và B. Difference(A)

ST_Union()

Chức năng:

Hàm ST_Union() trả về một hình hiển thị hợp của các hình. Kiểu trả về của hàm có thể là multi*, hình đơn lẻ hoặc tập hợp các hình.

Cú pháp:

Geometry ST_Union(geometry g1, geometry g2) ;

Hình 2.12. A. Union(B)

ST_SymDifference()

Chức năng:

Hàm ST_SymDifference() trả về hình hiển thị phần của hình A và hình B không giao nhau, nó đƣợc gọi là sự khác nhau đối xứng, theo công thức sau:

ST_SymDifference(A, B)= ST_Union(A,B)- ST_Intersection(A, B); Cú pháp:

Hình 2.13. A. SymDifference(B)

Nhóm hàm thay đổi hình học. ST_Buffer()

Chức năng:

Hàm ST_Buffer() trả về một hình hiển thị cho tất cả các điểm mà khoảng cách của chúng từ hình đến khoảng cách.

Option(tùy chọn)

quad_segs: Số đoạn được sử dụng để xấp xỉ 1/4 vòng tròn(mặc định là 8) endcap=round\flat\square: Kiểu kết thúc mặc định là round.

joint= round\mitre\bevel: Kiểu nối mặc định là round. mitre_limit: Tỉ lệ giới hạn cho mép.

Đơn vị đo của bán kính đƣợc đo bằng đơn vị của hệ thống tham chiếu không gian. Đầu ra của hàm có thể là Point, Multipoint, linestring, multipolygon, polygon, multipolygon và geometrycollection.

Cú pháp:

Geometry ST_Buffer(geometry g1, float R) ;

Geometry ST_Buffer(geometry g1, float R, integer

num_seg_quater_cricle) ;

Hình 2.14: Hàm Bssuffer

Nhóm hàm accessor. ST_geometry Type()

Chức năng:

Hàm ST_geometry Type() là trả về kiểu hình học dƣới dạng chuỗi Cú pháp:

Text ST_geometry Type(geometry g1);

ST_IsValid()

Chức năng:

Hàm ST_IsValid() là trả về true nếu hình đó là hợp lệ, khái niệm hợp lệ trong trƣờng hợp này có nghĩa là các kiểu hình học có dạng Point, polygon..., và đƣợc biểu diễn hợp lý nhƣ Point(0 0), Polygon(0 0, 1 1, 1 2, 0 0), ngƣợc lại nếu không hợp lệ thì PostgreSQL sẽ đƣa ra thông báo tại sao kiểu hình học đó không hợp lệ.

Cú pháp:

Boolean ST_IsValid(geometry g).

Phƣơng pháp load dữ liệu dạng shap file vào CSDL

Shapfile là định dạng sữ liệu không gian địa lý vectơ phổ biến cho các phần mềm GIS.

Đặc điểm của Shapfile.

Một shapfile đƣợc tổ chức thành các tập tin riêng rẽ, tối thiểu cần có 3 tập tin với phần mở rộng là ".shp",".shx",".dbf" và định dạng shapfile có phần mở rộng là ".shp". Tập tin có phần mở rộng dạng ".shp"chứa các thông tin về đặc điểm, hình dạng hình học của đối tƣợng. Tập tin có phần mở rộng ".shx", chứa các thông tin về thứ các đối tƣợng, còn tập tin có phần mở rộng là ".dbf" chứa thông tin về bảng dữ liệu thuộc tính của đối tƣợng.

Shapfile là một định dạng lƣu trữ vecto số để lƣu trữ vị trí hình học và thông tin thuộc tính liên quan. Một shapfile khi hiển thị trong phần mềm GIS đƣợc gọi là lớp dữ liệu. Mỗi lớp dữ liệu thể hiện cho một đặc tính hình học không gian của một lớp đối tƣợng cần biểu diễn gồm: Point,line, Polygon. Và các thuộc tính liên quan đến đối tƣợng đó.

Shapfile là dạng đơn giản vì chúng lƣu trữ các kiểu dữ liệu hình học ban đầu nhƣ: Line, Point, Polygon. Các kiểu hình học ban đầu này đƣợc sử dụng giới hạn mà không có bất kỳ thuộc tính nào để xác định những gì chúng hiển thị, vì vậy

một bảng trong bản ghi sẽ lƣu tính chất/ thuộc tính của mỗi hình dạng ban đầu trong shapfile. Các thuộc tính dữ liệu có thể tạo ra rất nhiều hiển thị với dữ liệu

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Một số mô hình cơ sở dữ liệu mở rộng Luận văn ThS. Công nghệ thông tin 60 48 05002 (Trang 40)

Tải bản đầy đủ (PDF)

(72 trang)