postgis操作


PostGIS導入導出shp的注意事項

1.數據導入之前需要給需要導入的數據庫增加空間擴展功能。

    CREATE EXTENSION postgis   // 啟用PostGIS

    CREATE EXTENSION postgis_topology // 啟用拓撲

    CREATE EXTENSION fuzzystrmatch // Tiger所需的模糊匹配

    CREATE EXTENSION postgis_tiger_geocoder // 啟用美國Tiger Geocoder

2.當往postgis導入shp文件的時候,忘記指定srid時,默認是0,此時可以通過這個函數更改數據的坐標系:

SELECT UpdateGeometrySRID(‘表名’,'geom’,26918);

3.查詢SRID

select st_srid(geom) from table;

 4.查詢geom字段信息

select ST_AsText(geom) from 'table_name'

5. 數據庫單個表的大小,單位(text);

--數據庫中單個表的大小(不包含索引) 把以字節計算的數值轉換成一個人類易讀的尺寸單位

select pg_size_pretty(pg_relation_size('"GA_P"'));

6.查詢pg庫所有的表和表所對應的schemaname

SELECT t.schemaname as schemaname,t.tablename tablename FROM pg_tables t

7.根據表名查詢表的schemaname

SELECT t.schemaname as schemaname,t.tablename tablename FROM pg_tables t where t.tablename = 'SX_MZSX_PG'

String sql = "SELECT t.schemaname as schemaname,t.tablename tablename FROM pg_tables t where t.tablename = ?";
PreparedStatement stmt = this.connection.prepareStatement(sql);
try {
  stmt.setString(1, pTN);
  ResultSet rs = stmt.executeQuery();
  try {
    if (rs.next()) {
      // 基本信息
      String owner = rs.getString("schemaname");
      String tableName = rs.getString("tablename");
      try {
        // 添加圖層
        return new SDO_Table(this.connection, owner, tableName);
      } catch (EzSqlSrvProxyException e) {
        // 出現錯誤的圖層不予考慮
      }
    }
  } finally {
    rs.close();
  }
  } finally {
    stmt.close();
}

8.根據表名和schemaname查詢表的字段

select * from "public"."SXGJX" where 1=0

 9.連接pg數據庫報錯:no pg_hba.conf entry for host

解決辦法:
修改pg_hba.conf,在第一行添加一行:
host all all 0.0.0.0/0 md5
表示允許任何用戶連接到任何數據庫,用一個加密的密碼

10.函數ST_MakeEnvelope

簡介

geometry ST_MakeEnvelope(float xmin, float ymin, float xmax, float ymax, integer srid=unknown);

描述

從X和Y的最小值和最大值創建矩形多邊形。輸入值必須位於SRID指定的空間參照系統中。如果未指定SRID,則使用未知空間參照系統(SRID 0)

 

11函數ST_AsMVTGeom

簡介

geometry ST_AsMVTGeom(geometry geom, box2d bounds, integer extent=4096, integer buffer=256, boolean clip_geom=true);

描述

將幾何圖形轉換為對應於圖層的一組行的Mapbox矢量圖塊的坐標空間。盡最大努力保持甚至糾正有效性,並可能在過程中將幾何體折疊為較低的維度

 

12.函數ST_AsBinary

簡介

bytea ST_AsBinary(geometry g1);

描述

返回表示幾何的二進制字符串

13.函數ST_Intersects

簡介

ST_Intersects( geometry geomA , geometry geomB );

描述

判斷兩個幾何體是否相交,相交返回1,否則返回0

14.函數ST_AsGeoJSON

text ST_AsGeoJSON(record feature, text geomcolumnname, integer maxdecimaldigits=9, boolean pretty_bool=false);

text ST_AsGeoJSON(geometry geom, integer maxdecimaldigits=9, integer options=8);

text ST_AsGeoJSON(geography geog, integer maxdecimaldigits=9, integer options=0);

描述

將幾何體作為GeoJSON“geometry”對象返回,或將行作為GeoJSON“feature”對象返回

maxdecimaldigits參數可用於減少輸出中使用的最大小數位數(默認為9)。如果您使用的是EPSG:4326並且輸出的幾何圖形僅用於顯示,那么maxdecimaldigits=6對於許多貼圖來說都是一個不錯的選擇

 

15.將postgis查詢結果轉換為geojson

WITH features AS ( SELECT st_asgeojson ( pipe_line.* ) :: json AS feature FROM pipe_line_wgs84 AS pipe_line ) SELECT
json_build_object ( 'type', 'FeatureCollection', 'features', json_agg ( features.feature ) )
FROM
features

16.查詢表字段

String tableName = "table_name"; 
String queryFildSql = "SELECT a.attnum," +
               "a.attname AS field" +
               " FROM pg_class c," +
               " pg_attribute a" +
               " LEFT OUTER JOIN pg_description b ON a.attrelid=b.objoid AND a.attnum = b.objsubid," +
               " pg_type t" +
               " WHERE c.relname = '" + tableName + "'" +
               " and a.attnum > 0" +
               " and a.attrelid = c.oid" +
               " and a.atttypid = t.oid" +
               " ORDER BY a.attnum";

 

17.創建表

DROP TABLE IF EXISTS "public"."road";
CREATE TABLE "public"."road" (
 "id" int4 NOT NULL,
 "geom" geometry(geometry, 4326),
 "FID" float8,
 "FNode" float8,
 "TNode" float8,
 "Length" float8,
 "Name" varchar COLLATE "pg_catalog"."default",
 "PopName" varchar COLLATE "pg_catalog"."default",
 "District" varchar COLLATE "pg_catalog"."default",
 "Attribute" varchar COLLATE "pg_catalog"."default",
 "RouteNum" varchar COLLATE "pg_catalog"."default",
 "Speed" varchar COLLATE "pg_catalog"."default",
 "Limit" varchar COLLATE "pg_catalog"."default",
 "Toll" int4,
 "Doorplate" varchar COLLATE "pg_catalog"."default",
 "CName" varchar COLLATE "pg_catalog"."default",
 "EName" varchar COLLATE "pg_catalog"."default",
 "InsiteType" varchar COLLATE "pg_catalog"."default",
 "Update" date,
 "Source" varchar COLLATE "pg_catalog"."default",
 "GUID" varchar COLLATE "pg_catalog"."default",
 "路面類型" varchar COLLATE "pg_catalog"."default"
);

18.查詢版本

show server_version; // 查詢PostGIS版本 POSTGIS="3.1.2 3.1.2" [EXTENSION] PGSQL="130" GEOS="3.9.1-CAPI-1.14.1" PROJ="7.1.1" LIBXML="2.9.9" LIBJSON="0.12" LIBPROTOBUF="1.2.1" WAGYU="0.5.0 (Internal)" TOPOLOGY 

select version(); // 查詢PostgreSQL版本

select postgis_full_version(); // 13.3 查詢PostgreSQL 版本

19. geometry轉wkt

SELECT st_astext('{"coordinates":[[106.49824956236046,29.56679821936578],[106.49844680963861,29.566098772209088]],"type":"LineString"}')
// LINESTRING(106.49824956236046 29.56679821936578,106.49844680963861 29.566098772209088)

20. wkt轉geometry

SELECT ST_GeomFromText('POLYGON((106.93679809570278 30.11215209960944,106.93817138671841 30.11215209960944,106.93817138671841 30.110778808593814,106.93679809570278 30.110778808593814,106.93679809570278 30.11215209960944))',4326)
// 0103000020E61000000100000005000000E8FFFF7FF4BB5A4012000000B61C3E40E8FFFFFF0ABC5A4012000000B61C3E40E8FFFFFF0ABC5A40120000005C1C3E40E8FFFF7FF4BB5A40120000005C1C3E40E8FFFF7FF4BB5A4012000000B61C3E40

21. 查詢表的空間類型

SELECT type FROM geometry_columns where f_table_name=''

表空間類型查詢結果和實際空間類型映射

Map dict = new HashMap(); // 建立SDO_GTYPE和  幾何類型 對應的字典
dict.put("2000", "unkonwn");
dict.put("2001", "point");
dict.put("2002", "Polyline");
dict.put("2003", "polygon");
dict.put("2004", "COLLECTION");
dict.put("2005", "MutliPoint");
dict.put("2006", "MutliPolyline");
dict.put("2007", "MutliPolygon");

 使用隨機查詢一條記錄確定表的幾何類型

 String sqlType = "select ST_GeometryType(geom) AS type from\"" +  layerName+"\" ORDER BY random() LIMIT 1";

22. 用於生成矢量切片的函數ST_AsMVT

 

ST_AsMVT聚合函數用於將基於MapBox VectorTile坐標空間的幾何圖形轉換為MapBox VectorTile二進制矢量切片。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM