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 địa lý.
Các bƣớc tiến hành
Trong hệ điều hành Window.
Sử dụng công cụ psql và công cụ shp2pgsql để load dữ liệu dạng shapfile (.shp).
Giả sử cần chuyển đổi file be_pusbs.shp sang dạng file bc_pubs.sql. Bƣớc 1: Start/ chon Accessories/ chọn Command Prompt
Bƣớc 2: Chọn đƣờng dẫn đến thƣ mục chứa các file định dạng .shp Sử dụng đƣờng dẫn:
C:\Program file\ PostgreSQL \8.4\bin bằng lệnh Cd\program\ postgresql \8.4\bin
Bƣớc 3: Sử dụng công cụ shp2pgsql
Bƣớc 4: Thực thi nội dung tập tin mới tạo đƣợc (bc_pubs.sql) bằng công cụ psql. '- U postgres': Tên ngƣời dùng là postgres
'- F bc_pubs': Tên file cần thực thi là bc_pubs.sql ' -d postgres ' tên CSDL PostGis
Bƣớc 5: Refresh pgadmin III, trong CSDL đã chọn và sẽ xuất hiện bảng bc_pubs Ví dụ: Kiểm tra việc tạo một bảng với một cột giá trị hình học, bổ xung thêm một vài đối tƣợng không gian, chạy một số hàm không gian.
CREAT table points (pt geometry, name varchar); INSERT into points values („POINT (0 0)‟,‟Origin‟); INSERT into points values („POINT (5 0)‟,‟X Axis‟); INSERT into points values ( 'POINT(0 5)', 'Y Axis' );
Hình 2.15: kết quả sử dụng hai hàm ST_Distance() và ST_AsText().