postgis学习(二)之几何图形
postgis學習(二)之幾何圖形
一.介紹
//創建一個表 CREATE TABLE geometries (name varchar, geom geometry);//向表中插入數據 INSERT INTO geometries VALUES('Point', 'POINT(0 0)'),('Linestring', 'LINESTRING(0 0, 1 1, 2 1, 2 2)'),('Polygon', 'POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))'),('PolygonWithHole', 'POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(1 1, 1 2, 2 2, 2 1, 1 1))'),('Collection', 'GEOMETRYCOLLECTION(POINT(2 0),POLYGON((0 0, 1 0, 1 1, 0 1, 0 0)))');//查詢數據 SELECT name, ST_AsText(geom) FROM geometries;插入的數據分別是:點,線,面,空洞的多邊形,圖形集合
二.元數據表
分成一張表和一個視圖的表
為了符合Simple Features for SQL(SFSQL)規范,PostGIS提供了兩張表用于追蹤和報告數據庫中的幾何圖形(這兩張表中的內容相當于元數據)
- 第一張表spatial_ref_sys —— 定義了數據庫已知的所有空間參照系統,稍后將對其進行更詳細的說明。
- 第二張表(實際上是視圖-view)geometry_columns —— 提供了數據庫中所有空間數據表的描述信息。
查詢視圖:
SELECT * FROM geometry_columns;-
f_table_catalog,f_table_schema,和f_table_name提供各個幾何圖形(geometry)的要素表(feature table)—— 即空間數據表 —— 的完全限定名稱,分別是數據庫名、模式名、空間數據表名。
-
f_geometry_column包含對應空間數據表中用于記錄幾何信息的屬性列的列名**。**
-
coord_dimension定義幾何圖形的維度(2維、3維或4維)
-
srid定義引用自spatial_ref_sys表的空間參考標識符
-
type列定義了幾何圖形的類型。比如"點(Point)"和"線串(Linestring)"等類型。
通過查詢該表,GIS客戶端和數據庫可以確定檢索數據時的預期內容,并可以執行任何必要的投影、處理、渲染而無需檢查每個幾何圖形(geometry)—— 這些就是元數據所帶來的作用。
注意:如果nyc數據庫的表沒有指定26918的srid,那該怎么辦呢?通過更新表很容易修復:
SELECT UpdateGeometrySRID(‘nyc_neighborhoods’,’geom’,26918);三.表示真實世界的對象
示例的表包含不同幾何圖形類型的混合。我們可以使用讀取幾何圖形元數據的函數獲取每個對象的基本信息:
- ST_GeometryType(geometry) —— 返回幾何圖形的類型
- ST_NDims(geometry) —— 返回幾何圖形的維數
- ST_SRID(geometry) —— 返回幾何圖形的空間參考標識碼
點
//查詢點的經緯度 SELECT ST_AsText(geom) FROM geometries WHERE name = 'Point';SELECT ST_X(geom), ST_Y(geom) FROM geometries WHERE name = 'Point';線串
//查詢線 SELECT ST_AsText(geom)FROM geometriesWHERE name = 'Linestring';- ST_Length(geometry) —— 返回線串的長度
- ST_StartPoint(geometry) —— 將線串的第一個坐標作為點返回
- ST_EndPoint(geometry) —— 將線串的最后一個坐標作為點返回
- ST_NPoints(geometry) —— 返回線串的坐標數量
多邊形
//查詢多邊形SELECT ST_AsText(geom) FROM geometries WHERE name LIKE 'Polygon%';- ST_Area(geometry) —— 返回多邊形的面積
- ST_NRings(geometry) —— 返回多邊形中環的數量(通常為1個,其他是孔)
- ST_ExteriorRing(geometry) —— 以線串的形式返回多邊形最外面的環
- ST_InteriorRingN(geometry, n) —— 以線串形式返回指定的內部環
- ST_Perimeter(geometry) —— 返回所有環的長度
集合
MultiPoint —— 點集合
MultiLineString —— 線串集合
MultiPolygon —— 多邊形集合
GeometryCollection —— 由任意幾何圖形(包括其他GeometryCollection)組成的異構集合
- ST_NumGeometries(geometry) —— 返回集合中的組成部分的數量
- ST_GeometryN(geometry, n) —— 返回集合中指定的組成部分
- ST_Area(geometry) —— 返回集合中所有多邊形組成部分的總面積
- ST_Length(geometry) —— 返回所有線段組成部分的總長度
四、幾何圖形輸入和輸出
在數據庫中,幾何圖形(Geometry)以僅供PostGIS使用的格式存儲在磁盤上。為了讓外部程序插入和檢索有用的幾何圖形信息,需要將它們轉換為其他應用程序可以理解的格式。
幸運的是,PostGIS支持以多種格式進行幾何圖形的輸入和輸出。
①Well-known text(WKT)
-
ST_GeomFromText(text, srid) —— 返回geometry
-
ST_AsText(geometry) —— 返回text
-
ST_AsEWKT(geometry) —— 返回text
②Well-known binary(WKB)
-
ST_GeomFromWKB(bytea) —— 返回geometry
-
ST_AsBinary(geometry) —— 返回bytea
-
ST_AsEWKB(geometry) —— 返回bytea
③Geographic Mark-up Language(GML)
-
ST_GeomFromGML(text) —— 返回geometry
-
ST_ASGML(geometry) —— 返回text
④Keyhole Mark-up Language(KML)
-
ST_GeomFromKML(text) —— 返回geometry
-
ST_ASKML(geometry) —— 返回text
⑤GeoJson
-
ST_AsGeoJSON(geometry) —— 返回text
⑥Scalable Vector Graphics(SVG)
-
ST_AsSVG(geometry) —— 返回text
以上函數最常見的用法是將幾何圖形的文本(text)表示形式轉換為內部表示形式:
請注意,除了具有幾何圖形表示形式的文本參數外,還可以指定一個提供幾何圖形SRID的數字參數。
以下SQL查詢展示了一個WKB表示形式的示例(將二進制輸出轉換為ASCII格式以進行打印時,需要調用encode()):
使用GML輸入和輸出JSON的示例
SELECT ST_AsGeoJSON(ST_GeomFromGML('<gml:Point><gml:coordinates>1,1</gml:coordinates></gml:Point>'));五、從文本轉換
到目前為止,我們看到的WKT字符串都是’text’類型,我們使用PostGIS的函數ST_GeomFromText()將它們轉換為’gometry’類型。
PostgreSQL包含一個簡短形式的語法,允許數據從一種類型轉換到另一種類型,即類型轉換語法:
olddata::newtype例如,將double類型轉換為文本字符串類型:
SELECT 0.9::text;以下SQL語句將一個WKT字符串轉換成一個幾何圖形(geometry):
SELECT 'POINT(0 0)'::geometry;關于使用類型轉換語法創建幾何圖形,需要注意一點:除非指定SRID,否則將得到一個包含未知SRID的幾何圖形。
可以使用EWKT形式指定SRID,該形式在前面包含一個SRID:
SELECT 'SRID=4326;POINT(0 0)'::geometry;函數合集
sum(expression) aggregate to return a sum for a set of records
count(expression) aggregate to return the size of a set of records
ST_GeometryType(geometry) returns the type of the geometry
ST_NDims(geometry) returns the number of dimensions of the geometry
ST_SRID(geometry) returns the spatial reference identifier number of the geometry
ST_X(point) returns the X ordinate
ST_Y(point) returns the Y ordinate
ST_Length(linestring) returns the length of the linestring
ST_StartPoint(geometry) returns the first coordinate as a point
ST_EndPoint(geometry) returns the last coordinate as a point
ST_NPoints(geometry) returns the number of coordinates in the linestring
ST_Area(geometry) returns the area of the polygons
ST_NRings(geometry) returns the number of rings (usually 1, more if there are holes)
ST_ExteriorRing(polygon) returns the outer ring as a linestring
ST_InteriorRingN(polygon, integer) returns a specified interior ring as a linestring
ST_Perimeter(geometry) returns the length of all the rings
ST_NumGeometries(multi/geomcollection) returns the number of parts in the collection
ST_GeometryN(geometry, integer) returns the specified part of the collection
ST_GeomFromText(text) returns geometry
ST_AsText(geometry) returns WKT text
ST_AsEWKT(geometry) returns EWKT text
ST_GeomFromWKB(bytea) returns geometry
ST_AsBinary(geometry) returns WKB bytea
ST_AsEWKB(geometry) returns EWKB bytea
ST_GeomFromGML(text) returns geometry
ST_AsGML(geometry) returns GML text
ST_GeomFromKML(text) returns geometry
ST_AsKML(geometry) returns KML text
ST_AsGeoJSON(geometry) returns JSON text
ST_AsSVG(geometry) returns SVG text
總結
以上是生活随笔為你收集整理的postgis学习(二)之几何图形的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Centos7:mysql5.6安装,配
- 下一篇: 智能制造与MES系统的内在联系