日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

本文介紹了幾何模型的用途、基本構(gòu)成和快速入門等內(nèi)容。

模型用途

簡(jiǎn)介

幾何模型是開放地理空間聯(lián)盟(Open Geospatial Consortium,以下簡(jiǎn)稱為OGC)設(shè)計(jì)的簡(jiǎn)單要素訪問標(biāo)準(zhǔn)(Simple Features Access standard,以下簡(jiǎn)稱為SFA),用于描述地理空間數(shù)據(jù)。該標(biāo)準(zhǔn)定義了基本的空間模型Geometry模型及對(duì)該模型的操作、轉(zhuǎn)換等行為,以實(shí)現(xiàn)各種空間分析任務(wù)。

Ganos Geometry是對(duì)象關(guān)系型數(shù)據(jù)庫(kù)PostgreSQL兼容版本(PolarDB PostgreSQL版(兼容Oracle))的一個(gè)時(shí)空引擎擴(kuò)展,Ganos Geometry擴(kuò)展采用了OGC Simple Features規(guī)范,它包含了Geometry和Geography兩種類型,用于表示平面或曲面上的點(diǎn)、線、面等幾何對(duì)象。

功能概述

Ganos Geometry支持構(gòu)建、訪問、編輯、處理、聚合、導(dǎo)出空間對(duì)象的多種方法,支持空間對(duì)象關(guān)系查詢,支持空間對(duì)象線性參考設(shè)置等。

Ganos Geometry兼容多種外部格式的直接輸入,例如:WKT、WKB、EKWT、EWKB、KML、GML、GeoHash、Geojson等,也支持通過(guò)其他工具輸入Esri Shape File等格式。

主要業(yè)務(wù)場(chǎng)景

在實(shí)際應(yīng)用中,Geometry類型可以用于幾何對(duì)象存儲(chǔ)分析的場(chǎng)景:

  • 地圖制作和可視化

    地圖可視化可以直觀地展現(xiàn)地理空間中數(shù)據(jù)的分布、趨勢(shì)和關(guān)系,通過(guò)在地圖上標(biāo)記不同的數(shù)據(jù)點(diǎn)、線、面等元素,選擇合適的地圖投影、色彩、符號(hào)等元素,展示數(shù)據(jù)在地理空間中的分布情況,實(shí)現(xiàn)地圖的制作和可視化。Geometry類型可以用于表示地圖上的各種要素,例如道路、河流、建筑物等。

  • 位置服務(wù)

    對(duì)位置數(shù)據(jù)進(jìn)行空間查詢,聚合和分析,可以找到最佳位置、評(píng)估風(fēng)險(xiǎn)或計(jì)算兩點(diǎn)之間距離等。Geometry類型可以描述點(diǎn)狀地物同時(shí)對(duì)點(diǎn)狀地物進(jìn)行各種空間處理,可為位置服務(wù)提供支持。

  • 空間關(guān)系查詢

    空間關(guān)系查詢可以用于多種場(chǎng)景,例如空間數(shù)據(jù)挖掘、城市規(guī)劃等。通過(guò)空間關(guān)系查詢,可以快速地找到滿足特定條件的空間實(shí)體,為決策提供有力的支持。Geometry類型支持多個(gè)幾何對(duì)象之間空間關(guān)系的判斷,例如確定兩個(gè)物體是否相交或相切等。

  • 空間分析和計(jì)算

    空間分析和計(jì)算用于各種量測(cè)場(chǎng)景,例如計(jì)算建筑物的面積、計(jì)算兩個(gè)城市之間的距離等。Geometry類型支持各種空間分析和計(jì)算,例如計(jì)算面積、長(zhǎng)度、距離、質(zhì)心等。

基本構(gòu)成

幾何模型概述

Geometry模型在二維或三維笛卡爾坐標(biāo)系中進(jìn)行建模,其大小與位置由其坐標(biāo)決定。每一個(gè)坐標(biāo)都有一個(gè)X和Y坐標(biāo)值,同時(shí),可以包含可選的Z和M坐標(biāo)值。 Z坐標(biāo)通常用于表示高程。M坐標(biāo)表示測(cè)量值,可以表示時(shí)間或距離。 如果Geometry中存在Z或M值,則必須為其中的每個(gè)點(diǎn)定義它們。 若Geometry具有Z或M坐標(biāo),則其坐標(biāo)維度為3DZ或3DM,如果它同時(shí)具有Z和M,則為4D。

空間參考系

空間參考系(Spatial Reference System,以下簡(jiǎn)稱為 SRS )定義了如何將Geometry對(duì)象關(guān)聯(lián)到地球表面上某個(gè)具體位置。

Ganos使用一個(gè)整數(shù)來(lái)表示SRS的定義引用,稱為SRID。Geometry對(duì)象通過(guò)其自身的SRID值與SRS關(guān)聯(lián)。

更多內(nèi)容請(qǐng)參見空間參考

OGC外部交換格式

SFA規(guī)范同時(shí)定義了兩種用于外部數(shù)據(jù)交換的格式:

  • 方便閱讀的文本形式:Well-Known Text (以下簡(jiǎn)稱為WKT)。

  • 可以保留數(shù)據(jù)精度且方便傳輸?shù)亩M(jìn)制形式:Well-Known Binary (以下簡(jiǎn)稱為WKB)。

WKT和WKB均包含對(duì)象的類型信息和定義它的坐標(biāo)信息,但不包含其關(guān)聯(lián)的SRID,也不支持非二維數(shù)據(jù)。

Ganos擴(kuò)展WKT/WKB為EKWT/EKWB,添加了對(duì)3DZ、3DM、4D數(shù)據(jù)的支持,同時(shí)支持嵌入SRID信息。

EKWT/EKWB為WKT/WKB的超集,當(dāng)前版本下,任意有效的WKT/WKB都是有效的EKWT/EKWB。

OGC幾何類型詳情

  • 原子類型

    模型名稱

    模型說(shuō)明

    模型WKT示例

    Point

    Point是一個(gè)零維幾何圖形,表示坐標(biāo)空間中的單個(gè)位置。

    • POINT (1 2) * POINT Z (1 2 3)

    • POINT ZM (1 2 3 4)

    LineString

    LineString是由連續(xù)的線段序列形成的一維線。每條線段由兩個(gè)點(diǎn)定義,一條線段的終點(diǎn)形成下一條線段的起點(diǎn)。 LineString可以自相交。

    LINESTRING (1 2, 3 4, 5 6)

    Polygon

    Polygon由外部邊界和零個(gè)或多個(gè)內(nèi)部邊界(孔)界定。每個(gè)邊界都是一個(gè)LinearRing 。

    POLYGON ((0 0 0,4 0 0,4 4 0,0 4 0,0 0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 1 0))

  • 參數(shù)化類型

    模型名稱

    模型說(shuō)明

    模型WKT示例

    EllipticalString

    橢圓弧。

    ELLIPTICALSTRING(-2 0,2 0,0 0,0,0,0,2,0.5)

    Bezier3Curve

    四個(gè)點(diǎn)確定的一條三階貝塞爾曲線。

    BEZIER3CURVE(1 1, 2 2, 3 2, 3 1) 

  • 集合類型

    模型名稱

    模型說(shuō)明

    模型WKT示例

    MultiPoint

    MultiPoint是Point的集合。

    MULTIPOINT ( (0 0), (1 2) )

    MultiLineString

    MultiLineString是LineString的集合。

    MULTILINESTRING ( (0 0,1 1,1 2), (2 3,3 2,5 4) )

    MultiPolygon

    MultiPolygon是不重疊、不相鄰的Polygon的集合。集合中的Polygon只能在有限點(diǎn)處相接。

    MULTIPOLYGON (((1 5, 5 5, 5 1, 1 1, 1 5)), ((6 5, 9 1, 6 1, 6 5)))

    GeometryCollection

    GeometryCollection是Geometry的集合,可以混合不同類型的Geometry對(duì)象。

    GEOMETRYCOLLECTION ( POINT(2 3), LINESTRING(2 3, 3 4))

    CompoundCurve

    含線、橢圓弧或貝塞爾曲線的復(fù)合線對(duì)象。 CompoundCurve中每個(gè)單元對(duì)象的幾何必須連續(xù)。

    • COMPOUNDCURVE((1 0,2 0),ELLIPTICALSTRING(2 0 ,4 0, 3 0 ,1,0,0,1,0.5))

    • COMPOUNDCURVE((1 2,2 0),BEZIER3CURVE(2 0,20 20 ,30 10,10 10))

    CurvePolygon

    含曲線的復(fù)合面對(duì)象。 CurvePolygon中的各個(gè)子對(duì)象必須是閉合的。

    • CURVEPOLYGON(ELLIPTICALSTRING(2 0,2 0,0 0,0,0,0,2,0.5),CIRCULARSTRING(-0.5 0,0.5 0,-0.5 0))

    • CURVEPOLYGON(BEZIER3CURVE(1 1, 2 2, 3 1, 1 1),CIRCULARSTRING(1.7 1.2,1.9 1.2,1.7 1.2))

空間數(shù)據(jù)列視圖

在Ganos中,geometry_columns是從數(shù)據(jù)庫(kù)系統(tǒng)目錄表中讀取全部幾何列的視圖。該視圖遵循了OGC的Simple Features Specification for SQL標(biāo)準(zhǔn)。

空間數(shù)據(jù)列視圖具有如下結(jié)構(gòu):

列名

類型

說(shuō)明

f_table_catalog

varchar(256)

一般為固定值postgres。

f_table_schema

varchar(256)

該表所在的schema。

f_table_name

varchar(256)

該表的表名。

f_geometry_column

varchar(256)

該表中某個(gè)Geometry列的列名。

coord_dimension

integer

Geometry列的維度(2,3或4)。

srid

integer

Geometry列SRID,是引用到spatial_ref_sys表的外鍵。

type

varchar(30)

Geometry對(duì)象的類型,應(yīng)為OGC標(biāo)準(zhǔn)類型之一。若為混合類型,則值為GEOMETRY。

可以通過(guò)如下語(yǔ)句查詢當(dāng)前數(shù)據(jù)庫(kù)中全部幾何數(shù)據(jù)列:

SELECT * FROM geometry_columns;

索引

空間索引使Ganos處理大型空間數(shù)據(jù)集時(shí)避免對(duì)數(shù)據(jù)庫(kù)進(jìn)行全局“順序掃描”。索引通過(guò)將數(shù)據(jù)組織到搜索樹中來(lái)加速搜索,可以快速遍歷該搜索樹以查找特定記錄。

Ganos為空間數(shù)據(jù)提供了三種空間索引:

索引名稱

索引簡(jiǎn)介

索引特點(diǎn)

GiST (Generalized Search Tree)

GiST索引是一種平衡搜索樹,是最常用、最通用的空間索引方法,提供非常好的查詢性能。 

GiST索引允許定義一些規(guī)則將任意類型的數(shù)據(jù)分布在一棵平衡樹上,同時(shí)也允許定義一些方法訪問這些數(shù)據(jù)。

BRIN (Block Range Index)

BRIN索引通過(guò)匯總空間表中一定數(shù)量記錄的空間范圍進(jìn)行處理。搜索是通過(guò)掃描空間范圍來(lái)完成的。 

  • 適合數(shù)據(jù)量較大且重疊很少或沒有重疊(例如點(diǎn))的表,這些表是靜態(tài)的或不經(jīng)常變化的。

  • 相比GiST索引,它提供了更快的索引創(chuàng)建時(shí)間和更小的索引大小,但查詢時(shí)間更慢。

  • BRIN需要手動(dòng)維護(hù)索引。

  • 對(duì)于返回相對(duì)大量數(shù)據(jù)記錄的查詢更有效。

SP-GiST (Space-Partitioned Generalized Search Tree)

SP-GiST是一種通用索引方法,支持四叉樹、kd樹和根基樹等分區(qū)搜索樹。

  • 相比GiST索引,SP-GiST支持更少的運(yùn)算符,也不支持KNN搜索。

  • 相比GiST索引,更適合不相互重疊的對(duì)象。

快速入門

簡(jiǎn)介

快速入門幫助用戶快速理解Ganos Geometry引擎的基本用法,包括擴(kuò)展創(chuàng)建、創(chuàng)建表、導(dǎo)入數(shù)據(jù)、創(chuàng)建索引、空間分析量測(cè)、空間關(guān)系判斷等內(nèi)容。

更多專業(yè)用法可參考Geometry最佳實(shí)踐文章:

語(yǔ)法說(shuō)明

  • 創(chuàng)建擴(kuò)展。

    --創(chuàng)建幾何擴(kuò)展
    CREATE extension ganos_geometry cascade;
    說(shuō)明

    建議將擴(kuò)展安裝在public模式下,避免權(quán)限問題。

    CREATE extension ganos_geometry WITH schema public cascade;
  • 創(chuàng)建幾何表。

    --方式一:直接創(chuàng)建帶geometry字段的表
    CREATE TABLE ROADS ( ID int4, ROAD_NAME varchar(25), geom geometry(LINESTRING,3857) );
    
    --方式二:先創(chuàng)建普通表,再附加幾何字段
    CREATE TABLE ROADS ( ID int4, ROAD_NAME varchar(25) );
    SELECT AddGeometryColumn( 'roads', 'geom', 3857, 'LINESTRING', 2);
  • 添加幾何約束。

    ALTER TABLE ROADS ADD CONSTRAINT geometry_valid_check CHECK (ST_IsValid(geom));
  • 導(dǎo)入幾何數(shù)據(jù)。

    INSERT INTO roads (id, geom, road_name)
      VALUES (1,ST_GeomFromText('LINESTRING(191232 243118,191108 243242)',3857),'北五環(huán)');
    INSERT INTO roads (id, geom, road_name)
      VALUES (2,ST_GeomFromText('LINESTRING(189141 244158,189265 244817)',3857),'東五環(huán)');
    INSERT INTO roads (id, geom, road_name)
      VALUES (3,ST_GeomFromText('LINESTRING(192783 228138,192612 229814)',3857),'南五環(huán)');
    INSERT INTO roads (id, geom, road_name)
      VALUES (4,ST_GeomFromText('LINESTRING(189412 252431,189631 259122)',3857),'西五環(huán)');
    INSERT INTO roads (id, geom, road_name)
      VALUES (5,ST_GeomFromText('LINESTRING(190131 224148,190871 228134)',3857),'東長(zhǎng)安街');
    INSERT INTO roads (id, geom, road_name)
      VALUES (6,ST_GeomFromText('LINESTRING(198231 263418,198213 268322)',3857),'西長(zhǎng)安街');
  • 查詢幾何對(duì)象信息。

    SELECT id, ST_AsText(geom) AS geom, road_name FROM roads;
    
    --------------------------------
     id | geom| road_name
    --------+-----------------------------------------+-----------
      1 | LINESTRING(191232 243118,191108 243242) | 北五環(huán)
      2 | LINESTRING(189141 244158,189265 244817) | 東五環(huán)
      3 | LINESTRING(192783 228138,192612 229814) | 南五環(huán)
      4 | LINESTRING(189412 252431,189631 259122) | 西五環(huán)
      5 | LINESTRING(190131 224148,190871 228134) | 東長(zhǎng)安街
      6 | LINESTRING(198231 263418,198213 268322) | 西長(zhǎng)安街
    (6 rows)
  • 創(chuàng)建索引。

    --GiST索引
    CREATE INDEX [indexname] ON [tablename] USING GIST ( [geometryfield] );
    CREATE INDEX [indexname] ON [tablename] USING GIST ([geometryfield] gist_geometry_ops_nd);
    VACUUM ANALYZE [table_name] [(column_name)];
    
    --舉例
    Create INDEX sp_geom_index ON ROADS USING GIST(geom);
    VACUUM ANALYZE ROADS (geom);
    
    --BRIN索引
    CREATE INDEX [indexname] ON [tablename] USING BRIN ( [geometryfield] );
    CREATE INDEX [indexname] ON [tablename] USING BRIN ([geometryfield] brin_geometry_inclusion_ops_3d);
    CREATE INDEX [indexname] ON [tablename] USING BRIN ([geometryfield] brin_geometry_inclusion_ops_4d);
      --指定塊大小的brin索引
    CREATE INDEX [indexname] ON [tablename] USING BRIN ( [geometryfield] ) WITH (pages_per_range = [number]);
  • 空間測(cè)量和空間分析。

    --Create Table bc_roads:
    Column  | Type  | Description
    ------------+-------------------+-------------------
    gid | integer   | Unique ID
    name| character varying | Road Name
    the_geom| geometry  | Location Geometry (Linestring)
    
    --Create table bc_municipality:
    Column | Type  | Description
    -----------+-------------------+-------------------
    gid| integer   | Unique ID
    code   | integer   | Unique ID
    name   | character varying | City / Town Name
    the_geom   | geometry  | Location Geometry (Polygon)
    
    --長(zhǎng)度計(jì)算
    SELECT sum(ST_Length(the_geom))/1000 AS km_roads FROM bc_roads;
    
    km_roads
    ------------------
    70842.1243039643
    (1 row)
    
    --面積計(jì)算
    SELECT ST_Area(the_geom)/10000 AS hectares FROM bc_municipality WHERE name = 'PRINCE GEORGE';
    
    hectares
    ------------------
    32657.9103824927
    (1 row)
  • 空間關(guān)系判斷。

    --ST_Contains
    SELECT  m.name, sum(ST_Length(r.the_geom))/1000 as roads_km
    FROM
      bc_roads AS r, bc_municipality AS m
    WHERE
      ST_Contains(m.the_geom,r.the_geom)
    GROUP BY m.name
    ORDER BY roads_km;
    
    name| roads_km
    ----------------------------+------------------
    SURREY  | 1539.47553551242
    VANCOUVER   | 1450.33093486576
    LANGLEY DISTRICT| 833.793392535662
    BURNABY | 773.769091404338
    PRINCE GEORGE   | 694.37554369147
    ...
    
    --ST_Covers,a circle covering a circle
    SELECT ST_Covers(smallc,smallc) As smallinsmall,
        ST_Covers(smallc, bigc) As smallcoversbig,
        ST_Covers(bigc, ST_ExteriorRing(bigc)) As bigcoversexterior,
        ST_Contains(bigc, ST_ExteriorRing(bigc)) As bigcontainsexterior
    FROM (SELECT ST_Buffer(ST_GeomFromText('POINT(1 2)'), 10) As smallc,
        ST_Buffer(ST_GeomFromText('POINT(1 2)'), 20) As bigc) As foo;
        --Result
     smallinsmall | smallcoversbig | bigcoversexterior | bigcontainsexterior
    --------------+----------------+-------------------+---------------------
     t| f  | t | f
    (1 row)
    
    --ST_Disjoint
    SELECT ST_Disjoint('POINT(0 0)'::geometry, 'LINESTRING ( 2 0, 0 2 )'::geometry);
     st_disjoint
    ---------------
     t
    (1 row)
    SELECT ST_Disjoint('POINT(0 0)'::geometry, 'LINESTRING ( 0 0, 0 2 )'::geometry);
     st_disjoint
    ---------------
     f
    (1 row)
    
    --ST_Overlaps
    SELECT ST_Overlaps(a,b) As a_overlap_b,
            ST_Crosses(a,b) As a_crosses_b,
            ST_Intersects(a, b) As a_intersects_b, ST_Contains(b,a) As b_contains_a
    FROM (SELECT ST_GeomFromText('POINT(1 0.5)') As a, ST_GeomFromText('LINESTRING(1 0, 1 1, 3 5)')  As b)
        As foo
    
    a_overlap_b | a_crosses_b | a_intersects_b | b_contains_a
    ------------+-------------+----------------+--------------
    f   | f   | t  | t
    
    --ST_Relate
    SELECT ST_Relate(ST_GeometryFromText('POINT(1 2)'), ST_Buffer(ST_GeometryFromText('POINT(1 2)'),2), '0FFFFF212');
    st_relate
    -----------
    t
    
    --ST_Touches
    SELECT ST_Touches('LINESTRING(0 0, 1 1, 0 2)'::geometry, 'POINT(1 1)'::geometry);
     st_touches
    ------------
     f
    (1 row)
    
    SELECT ST_Touches('LINESTRING(0 0, 1 1, 0 2)'::geometry, 'POINT(0 2)'::geometry);
     st_touches
    ------------
     t
    (1 row)
    
    --ST_Within
    SELECT ST_Within(smallc,smallc) As smallinsmall,
        ST_Within(smallc, bigc) As smallinbig,
        ST_Within(bigc,smallc) As biginsmall,
        ST_Within(ST_Union(smallc, bigc), bigc) as unioninbig,
        ST_Within(bigc, ST_Union(smallc, bigc)) as biginunion,
        ST_Equals(bigc, ST_Union(smallc, bigc)) as bigisunion
    FROM
    (
    SELECT ST_Buffer(ST_GeomFromText('POINT(50 50)'), 20) As smallc,
        ST_Buffer(ST_GeomFromText('POINT(50 50)'), 40) As bigc) As foo;
    --Result
     smallinsmall | smallinbig | biginsmall | unioninbig | biginunion | bigisunion
    --------------+------------+------------+------------+------------+------------
     t| t  | f  | t  | t  | t
    (1 row)
  • 幾何對(duì)象存取。

     SELECT ST_IsSimple(ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))'));
     st_issimple
    -------------
     t
    (1 row)
    
     SELECT ST_IsSimple(ST_GeomFromText('LINESTRING(1 1,2 2,2 3.5,1 3,1 2,2 1)'));
     st_issimple
    -------------
     f
    (1 row)
    
    
    --查詢地形中擁有環(huán)島且面積最大的城市
    SELECT gid, name, ST_Area(the_geom) AS area
    FROM bc_municipality
    WHERE ST_NRings(the_geom) > 1
    ORDER BY area DESC LIMIT 1;
    
    gid  | name | area
    -----+--------------+------------------
    12   | 安寧市        | 257374619.430216
    (1 row)
  • 刪除擴(kuò)展(可選)。

    --刪除幾何擴(kuò)展
    Drop extension ganos_geometry cascade;

SQL參考

詳細(xì)SQL手冊(cè)請(qǐng)參見Geometry SQL參考