<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] > [home](https://postgis.net/documentation/getting_started/) > [官方中文教程](https://postgis.net/workshops/zh_Hans/postgis-intro/) ## postgis PostGIS是一個開源的空間數據存儲和查詢庫,它可以與PostgreSQL數據庫一起使用。PostGIS允許你將地理空間數據存儲在數據庫中,并提供了一系列功能強大的函數和操作符,以便對這些數據進行查詢、分析和處理。 使用PostGIS,你可以存儲各種類型的地理空間數據,如點、線、面、多邊形等,并支持對這些數據進行距離計算、緩沖區分析、空間關系查詢等操作。同時,PostGIS還支持各種標準和格式,如OGC Simple Features for SQL,GeoJSON,KML等。 PostGIS已經成為了許多GIS應用程序和Web GIS系統的核心組件之一,它為地理空間數據的管理和分析提供了靈活而強大的工具。 目錄列表 ![](https://img.kancloud.cn/88/a1/88a12c64cdf2c382b2518df3e48f0d12_232x462.png) ## 下載 [下載地址](https://postgis.net/documentation/getting_started/) **win** https://download.osgeo.org/postgis/windows/ 或通過 ![](https://img.kancloud.cn/0b/04/0b043b29d5e39fe8c35676783e274062_617x424.png) RedHat 系列 ``` $ sudo yum install postgis33_15 ``` ## 快速入門 ### 安裝并確認 在需要用到 psotgis 的數據庫中執行 `create extension postgis` 才能使用.不同數據庫此sql需要重新執行 ``` > CREATE EXTENSION postgis; //不報錯就說明安裝成功 > SELECT PostGIS_Full_Version(); .// 查看版本 POSTGIS="3.3.2 3.3.2" [EXTENSION] PGSQL="150" GEOS="3.11.1-CAPI-1.17.1" PROJ="7.2.1" LIBXML="2.9.9" LIBJSON="0.12" LIBPROTOBUF="1.2.1" WAGYU="0.5.0 (Internal)" > SELECT * FROM pg_available_extensions WHERE name = 'postgis'; / 另一個查看版本 name | default_version | installed_version | comment ---------+-----------------+-------------------+------------------------------------------------------------ postgis | 3.3.2 | | PostGIS geometry and geography spatial types and functions ``` ## 空間數據庫的操作 1. 創建空間數據庫 ``` 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_GeometryType(geom), ST_NDims(geom), ST_SRID(geom) FROM geometries; name | st_geometrytype | st_ndims | st_srid -----------------+-----------------------+----------+--------- Point | ST_Point | 2 | 0 Polygon | ST_Polygon | 2 | 0 PolygonWithHole | ST_Polygon | 2 | 0 Collection | ST_GeometryCollection | 2 | 0 Linestring | ST_LineString | 2 | 0 ``` - ST_GeometryType 返回集合類型,如點,線,面等 - ST_NDims 返回維度,如點,線,對變形,返回2,球,立方體返回3,更高維度則返回相應的值 - ST_SRID(geometry) 函數用于獲得傳入幾何圖形對象的空間參考標識符 ``` > SELECT ST_AsText(geom) FROM geometries WHERE name = 'Point'; POINT(0 0) > SELECT ST_X(geom), ST_Y(geom) FROM geometries WHERE name = 'Point'; st_x | st_y ------+------ 0 | 0 ``` ### 查詢面空間 ``` > SELECT ST_AsText(geom) FROM geometries WHERE name = 'Linestring'; st_astext ----------------------------- LINESTRING(0 0,1 1,2 1,2 2) ``` ``` > SELECT ST_Length(geom) FROM geometries WHERE name = 'Linestring'; st_length ------------------- 3.414213562373095 ``` * **ST_Length(geometry)** 計算線長 * **ST_StartPoint(geometry)** 以點的形式返回第一個坐標 * **ST_EndPoint(geometry)** 以點的形式返回最后一個坐標 * **ST_NPoints(geometry)** 返回linestring中坐標的個數 ### 查詢多邊形 ``` > SELECT ST_AsText(geom) FROM geometries WHERE name LIKE 'Polygon%'; st_astext ---------------------------------------------------------- POLYGON((0 0,1 0,1 1,0 1,0 0)) POLYGON((0 0,10 0,10 10,0 10,0 0),(1 1,1 2,2 2,2 1,1 1)) ``` * **ST_Area(geometry)** 返回多邊形的面積 * **ST_NRings(geometry)** 返回環的數量(通常為1,如果有孔則更多) * **ST_ExteriorRing(geometry)** 用于提取多邊形(Polygon)的外環(Exterior Ring) * **ST_InteriorRingN(geometry,n)** 用于提取多邊形(Polygon)的內環(Interior Ring * **ST_Perimeter(geometry)** 用于計算給定幾何對象的周長 ### 查詢集合 ``` > SELECT name, ST_AsText(geom) FROM geometries WHERE name = 'Collection'; name | st_astext ------------+--------------------------------------------------------------- Collection | GEOMETRYCOLLECTION(POINT(2 0),POLYGON((0 0,1 0,1 1,0 1,0 0))) ``` * **ST_NumGeometries(geometry)** 返回幾何由幾個部門組成 * **ST_GeometryN(geometry,n)** 返回指定第n個對象的幾何 * **ST_Area(geometry)** 計算總面積 * **ST_Length(geometry)** 返回所有線的總長 ### 經緯度 **ST_Distance(geometry, geometry)** 計算兩個點的距離 **ST_DistanceSphere(geometry, geometry)** 計算兩個點的距離,但是是考慮地球曲率,性能較差,如果位置相近,則推薦使用 ST_Distance --- 例如,這里是洛杉磯和巴黎的坐標。 洛杉磯:POINT(-118.4079 33.9434) 巴黎:POINT(2.3490 48.8533) ``` > SELECT ST_Distance( 'SRID=4326;POINT(-118.4079 33.9434)'::geometry, -- 洛杉磯 'SRID=4326;POINT(2.5559 49.0083)'::geometry -- 巴黎 ); 121.898285970107 > SELECT ST_Distance( 'SRID=4326;POINT(-118.4079 33.9434)'::geography, -- 洛杉磯 'SRID=4326;POINT(2.5559 49.0083)'::geography -- 巴黎 ); 9124665.27317673 ``` > 如果對點使用 geometry時,計算的舉例是幾何點的舉例,沒有實際意義,應該使用 geography 指定點為地理坐標點 > 返回的 9124665.27317673 單位是米 **示例1: 離我最近的10家店鋪** ``` CREATE TABLE shop ( code VARCHAR(3), geog GEOGRAPHY(Point) --經緯度 ); INSERT INTO shop VALUES ('LAX', 'POINT(-118.4079 33.9434)'); INSERT INTO shop VALUES ('CDG', 'POINT(2.5559 49.0083)'); INSERT INTO shop VALUES ('KEF', 'POINT(-22.6056 63.9850)'); ``` 查看距離 `120.153576, 30.287459` 最近的10家店鋪 ``` > SELECT code, ST_Distance(geog, ST_MakePoint(120.153576, 30.287459)) AS distance FROM shop ORDER BY distance ASC // 可以直接根據 別名值進行排序 LIMIT 10; > SELECT code, ST_Distance(geog, ST_MakePoint(120.153576, 30.287459)) AS distance FROM shop ORDER BY geog <-> ST_SetSRID(ST_MakePoint(120.153576, 30.287459), 4326) -- 使用 "<->" 運算符按照幾何對象間的距離排序,性能更好 LIMIT 10; code | distance ------+------------------- SH | 164034.83554803 KEF | 9057126.39178544 CDG | 9272472.78234009 LAX | 10615294.90430514 ``` > 經過檢驗,上海到杭州的實際記錄為164.03 公里,與 SH的輸出結果相同 > `<->` 值距離排序 > 在處理距離排序時,使用 "<->" 運算符的性能往往更好。因為它利用了 PostgreSQL 的索引機制,可以通過 GiST 空間索引加速查詢。而直接使用別名進行排序則需要對整個結果集進行排序,性能相對較低。 **示例2: 離我最近的10家店鋪,字段采用小數點字段,二非地理字段** ``` CREATE TABLE shop ( code VARCHAR(3), longitude numeric, latitude numeric ); INSERT INTO shop1 VALUES ('SH', '121.472644', '31.231706'); INSERT INTO shop1 VALUES ('DD', '2.5559', '49.0083'); ``` 查看距離 `120.153576, 30.287459` 最近的10家店鋪 ``` > EXPLAIN SELECT code,longitude,latitude, ST_Distance(ST_MakePoint(longitude,latitude)::geography, ST_MakePoint(120.153576, 30.287459)) AS distance FROM shop1 ORDER BY ST_MakePoint(longitude,latitude)::geography <-> ST_SetSRID(ST_MakePoint(120.153576, 30.287459), 4326) LIMIT 10; code longitude latitude distance SH 121.472644 31.231706 164034.83554803 DD 2.5559 49.0083 9272472.78234009 ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看