Viac

Uzavreté podšívka


Linestring som vytvoril pomocou st_makeline (). Keď nakreslím túto čiaru pomocou QGIS, vždy sa zatvorí. Počiatočný a koncový bod nie sú rovnaké a overil som to pomocou st_startpoint () a st_endpoint (). Aby som si bol dvakrát istý, spustil som na linestring aj príkaz st_isclosed () a vrátil sa false.

Tu je SC bodov, ktoré sú súčasťou čiary. Jasne vidíte, že začína a končí vľavo hore.

Teraz, keď použijem funkciu st_makeline (), dostanem nasledujúci výsledok, kde uzavrie trajektóriu. Sú moje údaje nesprávne alebo mi pri kreslení vrstvy niečo v QGIS chýba?

Odkaz na súbor trajektórie WKT: WKT-for-linestring.txt


Mýlili ste sa v počiatočných a koncových bodoch. Prvý a posledný vrchol WKT nie sú vľavo hore, ale sú bližšie k pravému dolnému rohu, ako je vyznačené na tomto obrázku. Prvý a posledný vrchol nemajú rovnaké súradnice, a preto nie je podradený ani uzavretý, ani keby vyzeral. Vrcholy sú od seba vzdialené asi 0,000113 stupňa.


Uzavreté lineárne reťazce - geografické informačné systémy

MySQL 8.0 Reference Manual including MySQL NDB Cluster 8.0

12.17.7.3 Vlastnostné funkcie LineString a MultiLineString

LineString pozostáva z bodových hodnôt. Môžete extrahovať konkrétne body reťazca LineString, spočítať počet bodov, ktoré obsahuje, alebo získať jeho dĺžku.

Niektoré funkcie v tejto časti fungujú aj pre hodnoty MultiLineString.

Pokiaľ nie je uvedené inak, funkcie v tejto časti spracovávajú svoje argumenty geometrie nasledovne:

Ak je ktorýkoľvek argument NULL alebo ak je ktorýkoľvek argument geometrie prázdnou geometriou, návratová hodnota je NULL.

Ak niektorý z argumentov geometrie nie je syntakticky dobre tvarovanou geometriou, vyskytne sa chyba ER_GIS_INVALID_DATA.

Ak je akýmkoľvek argumentom geometrie syntakticky dobre tvarovaná geometria v nedefinovanom priestorovom referenčnom systéme (SRS), vyskytne sa chyba ER_SRS_NOT_FOUND.

V opačnom prípade návratová hodnota nie je NULL.

Na získanie vlastností linestringu sú k dispozícii tieto funkcie:

Vráti bod, ktorý je koncovým bodom hodnoty LineString ls .

ST_EndPoint () zaobchádza so svojimi argumentmi, ako je popísané v úvode tejto sekcie.

Pre hodnotu LineString ls , ST_IsClosed () vráti 1 if ls je zatvorený (to znamená, že jeho hodnoty ST_StartPoint () a ST_EndPoint () sú rovnaké).

Pre hodnotu MultiLineString ls , ST_IsClosed () vráti 1 if ls je uzavretý (to znamená, že hodnoty ST_StartPoint () a ST_EndPoint () sú rovnaké pre každý LineString v ls ).

ST_IsClosed () vráti 0, ak ls nie je zatvorené a NULL, ak ls je NULL.

ST_IsClosed () zaobchádza so svojimi argumentmi, ako je popísané v úvode tejto sekcie, s touto výnimkou:

Ak má geometria hodnotu SRID pre geografický priestorový referenčný systém (SRS), vyskytne sa chyba ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS.

Vráti číslo s dvojnásobnou presnosťou, ktoré označuje dĺžku hodnoty LineString alebo MultiLineString ls v jeho pridruženom priestorovom referenčnom systéme. Dĺžka hodnoty MultiLineString sa rovná súčtu dĺžok jej prvkov.

ST_Length () vypočíta výsledok nasledovne:

Ak je geometria platným LineStringom v karteziánskom SRS, návratová hodnota je karteziánska dĺžka geometrie.

Ak je geometria platným MultiLineString v karteziánskom SRS, návratová hodnota je súčtom karteziánskych dĺžok jej prvkov.

Ak je geometria platným LineStringom v geografickom SRS, návratová hodnota je geodetická dĺžka geometrie v tomto SRS v metroch.

Ak je geometria platným MultiLineString v geografickom SRS, návratová hodnota je súčtom geodetických dĺžok jej prvkov v tomto SRS v metroch.

ST_Length () zaobchádza so svojimi argumentmi tak, ako je popísané v úvode tejto sekcie, s týmito výnimkami:

Ak geometria nie je LineString alebo MultiLineString, návratová hodnota je NULL.

Ak je geometria geometricky neplatná, buď je výsledkom nedefinovaná dĺžka (to znamená, že to môže byť ľubovoľné číslo), alebo sa vyskytne chyba.

Ak je výsledok výpočtu dĺžky +inf, dôjde k chybe ER_DATA_OUT_OF_RANGE.

Ak má geometria geografický SRS s dĺžkou alebo šírkou, ktorá je mimo rozsah, zobrazí sa chyba:

Ak hodnota zemepisnej dĺžky nie je v rozsahu (−180, 180], vyskytne sa chyba ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE (ER_LONGITUDE_OUT_OF_RANGE pred MySQL 8.0.12).

Ak hodnota zemepisnej šírky nie je v rozsahu [−90, 90], vyskytne sa chyba ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE (ER_LATITUDE_OUT_OF_RANGE pred MySQL 8.0.12).

Uvedené rozsahy sú v stupňoch. Presné limity rozsahu sa mierne líšia v dôsledku aritmetiky s pohyblivou rádovou čiarkou.

Od MySQL 8.0.16 ST_Length () povoľuje voliteľné jednotka argument, ktorý určuje lineárnu jednotku pre vrátenú hodnotu dĺžky. Platia tieto pravidlá:

Ak je jednotka zadaná, ale nie je podporovaná systémom MySQL, dôjde k chybe ER_UNIT_NOT_FOUND.

Ak je zadaná podporovaná lineárna jednotka a SRID je 0, vyskytne sa chyba ER_GEOMETRY_IN_UNKNOWN_LENGTH_UNIT.

Ak je zadaná podporovaná lineárna jednotka a SRID nie je 0, výsledok je v tejto jednotke.

Ak nie je zadaná jednotka, výsledok je v jednotke SRS geometrií, či už karteziánskych alebo geografických. V súčasnosti sú všetky MySQL SRS vyjadrené v metroch.

Vráti počet objektov Point v hodnote LineString ls .

ST_NumPoints () zaobchádza so svojimi argumentmi, ako je popísané v úvode tejto sekcie.

Vráti N. -th bod v hodnote Linestring ls . Body sa číslujú od 1.

ST_PointN () zaobchádza so svojimi argumentmi, ako je popísané v úvode tejto sekcie.

Vráti bod, ktorý je počiatočným bodom hodnoty LineString ls .

ST_StartPoint () zaobchádza so svojimi argumentmi, ako je popísané v úvode tejto sekcie.


3 odpovede 3

Ak zmeníte tento posledný riadok na

Myslím, že nájdete požadovaný výsledok. Vaša podšívka má takzvaný problém s orientáciou prstenca. Poradie, v ktorom body určujete, je dôležité. Ako je definované, mnohouholník je celá zemeguľa mínus zamýšľaný mnohouholník. Zavolaním ReorientObject () na mnohouholník, to, ... preorientuje objekt.

Na túto otázku je ťažké odpovedať, pretože dosahujete očakávané výsledky. Otázkou však je, ako previesť LINESTRING na POLYGON. Táto odpoveď použije REPLACE, ale určite sa dá urobiť aj inými spôsobmi (napríklad metódou, ktorú ste vyskúšali). Okrem toho pridáme trochu „nepotrebného“ kódu, aby sme ukázali metodológiu. Toto je založené na predpoklade, že zdrojové hodnoty sú v uzavretom formáte LINESTRING.

Po deklarácii premenných som urobil jednoduchú VYMENU na reprezentácii reťazec/varchar reťazca LINESTRING, aby som z neho urobil POLYGON.

Potom, čo máme platnú hodnotu reťazca POLYGON so zreťazením + reťazca pre konečnú zátvorku, môžeme ju preniesť do funkcie STGeomFromText ako takej:

Nakoniec výberom typu geografie @údajová premenná dospejeme k priestorovému výsledku.

To je ten istý polygón, ktorý ste zobrazili. Mierka sa veľmi líši od stupnice hodnoty LINESTRING, pretože je umiestnená na úplnej reprezentácii SRID 4326 z geografickej roviny. Definícia takejto:

Pretože predpokladané limity SRID 4326 sú:

Plánované hranice: -180,0000, -90,0000, 180,0000, 90,0000

To znamená, že rozsah výsledkov je masívne v porovnaní s pôvodným LINESTRINGOM. Ak priblížite kvadranty 9 ° -18 ° x 140 ° -160 °, uvidíte polygón.


R sf: Body LinearRing netvoria uzavreté linestring

Pokúšam sa vypočítať centroidy množiny polygónov.

Moja množina údajov, geodáta, obsahuje päť stĺpcov vrátane jedného stĺpca geometrie triedy sfc_GEOMETRY so 45 759 riadkami.

Keď spustím sf :: st_centroid (geodata), zobrazí sa nasledujúca správa

Chyba v CPL_geos_op ("ťažisko", x, číselný (0), celé číslo (0), číselný (0),: Chyba vyhodnotenia: IllegalArgumentException: Body LinearRing netvoria uzavretý riadok).

Okrem toho: Varovné správy:

1: V st_centroid.sf (geodata): st_centroid predpokladá, že atribúty sú v geometriách x konštantné

2: V st_centroid.sfc (st_geometry (x), of_largest_polygon = of_largest_polygon): st_centroid neposkytuje správne centroidy pre údaje o zemepisnej dĺžke/šírke

  • Mám spustiť slučku, aby som zistil, ktorá geometria nie je uzavretá?
  • Je to problém s triedou mojej geometrie? Má to byť sfc_MULTIPOLYGON?

Obsah

WKT môže predstavovať nasledujúce odlišné geometrické objekty:

Súradnice pre geometrie môžu byť 2D (X, r), 3D (X, r, z), 4D (X, r, z, m) s m hodnota, ktorá je súčasťou lineárneho referenčného systému alebo 2D s príponou m hodnota (X, r, m). Trojrozmerné geometrie sú za typom geometrie označené „Z“ a geometrie s lineárnym referenčným systémom majú za typom geometrie „M“. Prázdne geometrie, ktoré neobsahujú žiadne súradnice, je možné zadať pomocou symbolu PRÁZDNY za názvom typu.

Geometrie WKT sa používajú v špecifikáciách OGC a sú prítomné v aplikáciách, ktoré tieto špecifikácie implementujú. Napríklad PostGIS obsahuje funkcie, ktoré môžu prevádzať geometrie na a z reprezentácie WKT, vďaka čomu sú čitateľné pre ľudí.

Štandardná definícia OGC vyžaduje, aby bol topologicky uzavretý polygón. Tiež sa v ňom uvádza, že ak je vonkajší lineárny prstenec mnohouholníka definovaný v smere proti smeru hodinových ručičiek, bude ho vidieť „zhora“. Akékoľvek vnútorné lineárne krúžky by mali byť definované opačným spôsobom v porovnaní s vonkajším krúžkom, v tomto prípade v smere hodinových ručičiek. [3]

Primitívy geometrie (2D)
Napíšte Príklady
Bod BOD (30 10)
LineString PODŠÍVKA (30 10, 10 30, 40 40)
Mnohouholník POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))
POLYGON ((35 10, 45 45, 15 40, 10 20, 35 10),
(20 30, 35 35, 30 20, 20 30))
Viacdielne geometrie (2D)
Napíšte Príklady
MultiPoint MULTIPOINT ((10 40), (40 30), (20 20), (30 10))
MULTIPOINT (10 40, 40 30, 20 20, 30 10)
MultiLineString MULTILINESTRING ((10 10, 20 20, 10 40),
(40 40, 30 30, 40 20, 30 10))
MultiPolygon MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)),
((15 5, 40 10, 10 20, 5 10, 15 5)))
MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)),
((20 35, 10 30, 10 10, 30 5, 45 20, 20 35),
(30 20, 20 15, 20 25, 30 20)))
Kolekcia geometrie GEOMETRYKOLEKCIA (BOD (40 10),
OBJEDNÁVKA (10 10, 20 20, 10 40),
POLYGON ((40 40, 20 45, 45 30, 40 40)))

Nasleduje niekoľko ďalších príkladov geometrických reťazcov WKT: (Poznámka: Každá položka nižšie je individuálnou geometriou.)

Známe binárne (WKB) reprezentácie sú typicky zobrazené v hexadecimálnych reťazcoch.

Prvý bajt označuje poradie bajtov pre údaje:

Nasledujúce 4 bajty sú 32-bitové celé číslo bez znamienka pre typ geometrie, ako je popísané nižšie:

Typy geometrie a celočíselné kódy WKB
Napíšte 2D Z M ZM
Geometria 0000 1000 2000 3000
Bod 0001 1001 2001 3001
LineString 0002 1002 2002 3002
Mnohouholník 0003 1003 2003 3003
MultiPoint 0004 1004 2004 3004
MultiLineString 0005 1005 2005 3005
MultiPolygon 0006 1006 2006 3006
Kolekcia geometrie 0007 1007 2007 3007
CircularString 0008 1008 2008 3008
CompoundCurve 0009 1009 2009 3009
CurvePolygon 0010 1010 2010 3010
MultiCurve 0011 1011 2011 3011
MultiSurface 0012 1012 2012 3012
Krivka 0013 1013 2013 3013
Povrch 0014 1014 2014 3014
Polyedrický povrch 0015 1015 2015 3015
DIČ 0016 1016 2016 3016
Trojuholník 0017 1017 2017 3017
Kruh 0018 1018 2018 3018
GeodesicString 0019 1019 2019 3019
Eliptická krivka 0020 1020 2020 3020
NurbsCurve 0021 1021 2021 3021
Klotoid 0022 1022 2022 3022
SpiralCurve 0023 1023 2023 3023
CompoundSurface 0024 1024 2024 3024
BrepSolid 1025
AffinePlacement 102 1102

Každý dátový typ má jedinečnú dátovú štruktúru, ako je počet bodov alebo lineárne prstence, za ktorými nasledujú súradnice v 64-bitových dvojčíslach.

Geometria POINT (2.0 4.0) je napríklad reprezentovaná ako: 00 00000001 4000000000000000 4010000000000000, kde:


16.4. Vytvorenie priestorovo povolenej databázy MySQL

Táto časť popisuje typy údajov, ktoré môžete použiť na reprezentáciu priestorových údajov v MySQL, a funkcie dostupné na vytváranie a získavanie priestorových hodnôt.

16.4.1. Priestorové dátové typy MySQL

MySQL má dátové typy, ktoré zodpovedajú triedam OpenGIS. Niektoré z týchto typov obsahujú hodnoty jednej geometrie:

GEOMETRIA môže ukladať hodnoty geometrie akéhokoľvek typu. Ostatné typy s jednou hodnotou, BOD a LINESTRING a POLYGON, obmedzujú svoje hodnoty na konkrétny typ geometrie.

Ostatné typy údajov obsahujú zbierky hodnôt:

GEOMETRYCOLLECTION môže ukladať zbierku predmetov akéhokoľvek typu. Ostatné typy kolekcií, MULTIPOINT a MULTILINESTRING a MULTIPOLYGON a GEOMETRYCOLLECTION, obmedzujú členy kolekcie na tie, ktoré majú konkrétny typ geometrie.

16.4.2. Vytváranie priestorových hodnôt

Táto časť popisuje, ako vytvárať priestorové hodnoty pomocou dobre známych textových a dobre známych binárnych funkcií, ktoré sú definované v štandarde OpenGIS, a pomocou funkcií špecifických pre MySQL.

16.4.2.1. Vytváranie hodnôt geometrie pomocou funkcií WKT

MySQL poskytuje množstvo funkcií, ktoré ako vstupné parametre berú reprezentáciu dobre známeho textu a voliteľne identifikátor priestorového referenčného systému (SRID). Vrátia zodpovedajúcu geometriu.

GeomFromText () prijíma ako prvý argument WKT akéhokoľvek typu geometrie. Implementácia tiež poskytuje konštrukčné funkcie špecifické pre typ na konštrukciu hodnôt geometrie každého typu geometrie.

GeomCollFromText ( wkt [, srid ]), GeometryCollectionFromText ( wkt [, srid ])

Vytvorí hodnotu GEOMETRYCOLLECTION pomocou svojej reprezentácie WKT a SRID.

GeomFromText ( wkt [, srid ]), GeometryFromText ( wkt [, srid ])

Vytvorí hodnotu geometrie akéhokoľvek typu pomocou reprezentácie WKT a SRID.

LineFromText ( wkt [, srid ]), LineStringFromText ( wkt [, srid ])

Vytvorí hodnotu LINESTRING pomocou svojej reprezentácie WKT a SRID.

MLineFromText ( wkt [, srid ]), MultiLineStringFromText ( wkt [, srid ])

Vytvorí hodnotu MULTILINESTRING pomocou svojej reprezentácie WKT a SRID.

MPointFromText ( wkt [, srid ]), MultiPointFromText ( wkt [, srid ])

Vytvorí hodnotu MULTIPOINT pomocou svojej reprezentácie WKT a SRID.

MPolyFromText ( wkt [, srid ]), MultiPolygonFromText ( wkt [, srid ])

Vytvorí hodnotu MULTIPOLYGON pomocou svojej reprezentácie WKT a SRID.

Vytvorí hodnotu POINT pomocou svojej reprezentácie WKT a SRID.

PolyFromText ( wkt [, srid ]), PolygonFromText ( wkt [, srid ])

Vytvorí hodnotu POLYGON pomocou svojej reprezentácie WKT a SRID.

Špecifikácia OpenGIS tiež popisuje voliteľné funkcie na konštrukciu hodnôt mnohouholníka alebo viacpolygónu na základe reprezentácie WKT zbierky krúžkov alebo uzavretých hodnôt LineString. Tieto hodnoty sa môžu pretínať. MySQL neimplementuje tieto funkcie:

BdMPolyFromText ( wkt , srid )

Vytvorí hodnotu MultiPolygon z hodnoty MultiLineString vo formáte WKT obsahujúcej ľubovoľnú zbierku uzavretých hodnôt LineString.

Vytvorí hodnotu mnohouholníka z hodnoty MultiLineString vo formáte WKT obsahujúcej ľubovoľnú zbierku uzavretých hodnôt LineString.

16.4.2.2. Vytváranie hodnôt geometrie pomocou funkcií WKB

MySQL poskytuje množstvo funkcií, ktoré ako vstupné parametre berú BLOB obsahujúci dobre známu binárnu reprezentáciu a voliteľne identifikátor priestorového referenčného systému (SRID). Vrátia zodpovedajúcu geometriu.

GeomFromWKB () prijíma ako prvý argument WKB akéhokoľvek typu geometrie. Implementácia tiež poskytuje konštrukčné funkcie špecifické pre typ na konštrukciu hodnôt geometrie každého typu geometrie.

GeomCollFromWKB ( wkb [, srid ]), GeometryCollectionFromWKB ( wkb [, srid ])

Vytvorí hodnotu GEOMETRYCOLLECTION pomocou reprezentácie WKB a SRID.

GeomFromWKB ( wkb [, srid ]), GeometryFromWKB ( wkb [, srid ])

Vytvorí hodnotu geometrie akéhokoľvek typu pomocou reprezentácie WKB a SRID.

LineFromWKB ( wkb [, srid ]), LineStringFromWKB ( wkb [, srid ])

Vytvorí hodnotu LINESTRING pomocou svojej reprezentácie WKB a SRID.

MLineFromWKB ( wkb [, srid ]), MultiLineStringFromWKB ( wkb [, srid ])

Vytvorí hodnotu MULTILINESTRING pomocou svojej reprezentácie WKB a SRID.

MPointFromWKB ( wkb [, srid ]), MultiPointFromWKB ( wkb [, srid ])

Vytvorí hodnotu MULTIPOINT pomocou svojej reprezentácie WKB a SRID.

MPolyFromWKB ( wkb [, srid ]), MultiPolygonFromWKB ( wkb [, srid ])

Vytvorí hodnotu MULTIPOLYGON pomocou svojej reprezentácie WKB a SRID.

Vytvorí hodnotu POINT pomocou svojej reprezentácie WKB a SRID.

PolyFromWKB ( wkb [, srid ]), PolygonFromWKB ( wkb [, srid ])

Vytvára hodnotu POLYGON pomocou svojej reprezentácie WKB a SRID.

Špecifikácia OpenGIS tiež popisuje voliteľné funkcie na konštrukciu hodnôt Polygon alebo MultiPolygon na základe reprezentácie WKB zbierky krúžkov alebo uzavretých hodnôt LineString. Tieto hodnoty sa môžu pretínať. MySQL neimplementuje tieto funkcie:

Skonštruuje hodnotu MultiPolygon z hodnoty MultiLineString vo formáte WKB obsahujúcej ľubovoľnú zbierku uzavretých hodnôt LineString.

Vytvorí hodnotu mnohouholníka z hodnoty MultiLineString vo formáte WKB obsahujúcej ľubovoľnú zbierku uzavretých hodnôt LineString.

16.4.2.3. Vytváranie hodnôt geometrie pomocou funkcií špecifických pre MySQL

Poznámka : MySQL neimplementuje funkcie uvedené v tejto časti.

MySQL poskytuje sadu užitočných funkcií na vytváranie reprezentácií geometrie WKB. Funkcie popísané v tejto časti sú rozšíreniami MySQL k špecifikáciám OpenGIS. Výsledkom týchto funkcií sú hodnoty BLOB obsahujúce reprezentácie geometrických hodnôt WKB bez SRID. Výsledky týchto funkcií je možné nahradiť ako prvý argument pre akúkoľvek funkciu z rodiny funkcií GeomFromWKB ().

Konštruuje zbierku geometrie WKB. Ak niektorý z argumentov nie je dobre vytvorenou WKB reprezentáciou geometrie, návratová hodnota je NULL.

Vytvorí hodnotu WKB LineString z množstva argumentov bodu WKB. Ak niektorý argument nie je bodom WKB, návratová hodnota je NULL. Ak je počet argumentov bodu menší ako dva, návratová hodnota je NULL.

Vytvorí hodnotu WKB MultiLineString pomocou argumentov WKB LineString. Ak niektorý argument nie je reťazcom WKB LineString, návratová hodnota je NULL.

Vytvorí hodnotu WKB MultiPoint pomocou argumentov bodu WKB. Ak niektorý argument nie je bodom WKB, návratová hodnota je NULL.

Vytvorí hodnotu WKB MultiPolygon zo sady argumentov polygónu WKB. Ak niektorý argument nie je mnohouholníkom WKB, návratová hodnota je NULL.

Zostavuje bod WKB pomocou svojich súradníc.

Vytvorí hodnotu mnohouholníka WKB z množstva argumentov WKB LineString. Ak niektorý z argumentov nereprezentuje WKB LinearRing (to znamená, že nie je uzavretým a jednoduchým LineStringom), návratová hodnota je NULL.

16.4.3. Vytváranie priestorových stĺpcov

MySQL poskytuje štandardný spôsob vytvárania priestorových stĺpcov pre typy geometrie, napríklad pomocou CREATE TABLE alebo ALTER TABLE. V súčasnosti sú priestorové stĺpce podporované iba pre tabuľky MyISAM.

Pomocou príkazu CREATE TABLE vytvorte tabuľku s priestorovým stĺpcom:

Na pridanie alebo zrušenie priestorového stĺpca do alebo z existujúcej tabuľky použite príkaz ALTER TABLE:

16.4.4. Plnenie priestorových stĺpcov

Keď vytvoríte priestorové stĺpce, môžete ich naplniť priestorovými údajmi.

Hodnoty by mali byť uložené vo formáte vnútornej geometrie, ale môžete ich do tohto formátu previesť buď z formátu dobre známeho textu (WKT) alebo dobre známeho binárneho formátu (WKB). Nasledujúce príklady ukazujú, ako vložiť hodnoty geometrie do tabuľky prevodom hodnôt WKT do formátu vnútornej geometrie.

Konverziu môžete vykonať priamo vo výkaze INSERT:

Alebo môžete previesť pred VLOŽENÍM:

Nasledujúce príklady vkladajú do tabuľky zložitejšie geometrie:

Všetky predchádzajúce príklady používajú na vytváranie hodnôt geometrie GeomFromText (). Môžete tiež použiť funkcie špecifické pre typ:

Upozorňujeme, že ak chce klientský aplikačný program používať reprezentácie geometrických hodnôt WKB, je zodpovedný za odosielanie správne vytvorených WKB v dotazoch na server. Existuje však niekoľko spôsobov, ako splniť túto požiadavku. Napríklad:

Vkladanie hodnoty POINT (1 1) so syntaxou doslovného hexadecimálu:

Aplikácia ODBC môže odosielať reprezentáciu WKB a viazať ju na zástupný symbol pomocou argumentu typu BLOB:

Ostatné programovacie rozhrania môžu podporovať podobný zástupný mechanizmus.

V programe C môžete uniknúť binárnej hodnote pomocou mysql_real_escape_string () a výsledok zahrnúť do reťazca dotazu, ktorý sa odošle na server. Pozrite si časť 22.2.3.52, „mysql_real_escape_string ()“.

16.4.5. Načítavanie priestorových údajov

Geometrické hodnoty uložené v tabuľke je možné načítať vo vnútornom formáte. Môžete ich tiež previesť do formátu WKT alebo WKB.

16.4.5.1. Načítavanie priestorových údajov vo vnútornom formáte

Načítanie hodnôt geometrie pomocou interného formátu môže byť užitočné pri prenosoch z tabuľky do tabuľky:

16.4.5.2. Načítavanie priestorových údajov vo formáte WKT

Funkcia AsText () prevádza geometriu z interného formátu na reťazec WKT.

16.4.5.3. Načítavajú sa priestorové údaje vo formáte WKB

Funkcia AsBinary () prevádza geometriu z interného formátu na BLOB obsahujúci hodnotu WKB.


Uzavreté lineárne reťazce - geografické informačné systémy

LineString pozostáva z bodových hodnôt. Môžete extrahovať konkrétne body reťazca LineString, spočítať počet bodov, ktoré obsahuje, alebo získať jeho dĺžku.

Niektoré funkcie v tejto časti fungujú aj pre hodnoty MultiLineString.

Pokiaľ nie je uvedené inak, funkcie v tejto časti spracovávajú svoje argumenty geometrie nasledovne:

Ak je ktorýkoľvek argument NULL alebo ak je ktorýkoľvek argument geometrie prázdnou geometriou, návratová hodnota je NULL.

Ak niektorý z argumentov geometrie nie je syntakticky dobre tvarovanou geometriou, vyskytne sa chyba ER_GIS_INVALID_DATA.

Ak je akýmkoľvek argumentom geometrie syntakticky dobre tvarovaná geometria v nedefinovanom priestorovom referenčnom systéme (SRS), dôjde k chybe ER_SRS_NOT_FOUND.

V opačnom prípade návratová hodnota nie je NULL.

Na získanie vlastností linestring sú k dispozícii tieto funkcie:

Vráti bod, ktorý je koncovým bodom hodnoty LineString ls .

ST_EndPoint () zaobchádza so svojimi argumentmi, ako je popísané v úvode tejto sekcie.

Pre hodnotu LineString ls , ST_IsClosed () vráti 1 if ls je uzavretý (to znamená, že jeho hodnoty ST_StartPoint () a ST_EndPoint () sú rovnaké).

Pre hodnotu MultiLineString ls , ST_IsClosed () vráti 1 if ls je uzavretý (to znamená, že hodnoty ST_StartPoint () a ST_EndPoint () sú rovnaké pre každý LineString v ls ).

ST_IsClosed () vráti 0, ak ls nie je zatvorené a NULL, ak ls je NULL.

ST_IsClosed () zaobchádza so svojimi argumentmi, ako je popísané v úvode tejto sekcie, s touto výnimkou:

Ak má geometria hodnotu SRID pre geografický priestorový referenčný systém (SRS), vyskytne sa chyba ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS.

Vráti číslo s dvojnásobnou presnosťou, ktoré označuje dĺžku hodnoty LineString alebo MultiLineString ls v jeho pridruženom priestorovom referenčnom systéme. Dĺžka hodnoty MultiLineString sa rovná súčtu dĺžok jej prvkov.

ST_Length () vypočíta výsledok nasledovne:

Ak je geometria platným LineStringom v karteziánskom SRS, návratová hodnota je karteziánska dĺžka geometrie.

Ak je geometria platným MultiLineString v karteziánskom SRS, návratová hodnota je súčtom karteziánskych dĺžok jej prvkov.

Ak je geometria platným LineStringom v geografickom SRS, návratová hodnota je geodetická dĺžka geometrie v tomto SRS v metroch.

Ak je geometria platným MultiLineString v geografickom SRS, návratová hodnota je súčtom geodetických dĺžok jej prvkov v tomto SRS v metroch.

ST_Length () zaobchádza so svojimi argumentmi tak, ako je popísané v úvode tejto sekcie, s týmito výnimkami:

Ak geometria nie je LineString alebo MultiLineString, návratová hodnota je NULL.

Ak je geometria geometricky neplatná, buď je výsledkom nedefinovaná dĺžka (to znamená, že to môže byť ľubovoľné číslo), alebo sa vyskytne chyba.

Ak je výsledok výpočtu dĺžky +inf, dôjde k chybe ER_DATA_OUT_OF_RANGE.

Ak má geometria geografický SRS s dĺžkou alebo šírkou, ktorá je mimo rozsah, zobrazí sa chyba:

Ak hodnota zemepisnej dĺžky nie je v rozsahu (−180, 180], vyskytne sa chyba ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE (ER_LONGITUDE_OUT_OF_RANGE pred MySQL 8.0.12).

Ak hodnota zemepisnej šírky nie je v rozsahu [−90, 90], vyskytne sa chyba ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE (ER_LATITUDE_OUT_OF_RANGE pred MySQL 8.0.12).

Uvedené rozsahy sú v stupňoch. Presné limity rozsahu sa mierne líšia v dôsledku aritmetiky s pohyblivou rádovou čiarkou.

Od MySQL 8.0.16 ST_Length () povoľuje voliteľné jednotka argument, ktorý určuje lineárnu jednotku pre vrátenú hodnotu dĺžky. Platia tieto pravidlá:

Ak je jednotka zadaná, ale nie je podporovaná systémom MySQL, dôjde k chybe ER_UNIT_NOT_FOUND.

Ak je zadaná podporovaná lineárna jednotka a SRID je 0, vyskytne sa chyba ER_GEOMETRY_IN_UNKNOWN_LENGTH_UNIT.

Ak je zadaná podporovaná lineárna jednotka a SRID nie je 0, výsledok je v tejto jednotke.

Ak nie je zadaná jednotka, výsledok je v jednotke SRS geometrií, či už karteziánskych alebo geografických. V súčasnosti sú všetky MySQL SRS vyjadrené v metroch.

Vráti počet objektov Point v hodnote LineString ls .

ST_NumPoints () zaobchádza so svojimi argumentmi, ako je popísané v úvode tejto sekcie.

Vráti N. -th bod v hodnote Linestring ls . Body sa číslujú od 1.

ST_PointN () zaobchádza so svojimi argumentmi, ako je popísané v úvode tejto sekcie.

Vráti bod, ktorý je počiatočným bodom hodnoty LineString ls .

ST_StartPoint () zaobchádza so svojimi argumentmi, ako je popísané v úvode tejto sekcie.


4.7. Komplexné otázky

The raison d'etre funkcionality priestorovej databázy vykonáva dotazy v databáze, ktoré by spravidla vyžadovali funkciu GIS pre stolné počítače. Efektívne používanie PostGIS vyžaduje vedieť, aké priestorové funkcie sú k dispozícii, a zaistiť, aby boli k dispozícii vhodné indexy na zabezpečenie dobrého výkonu. SRID 312 použitý v týchto príkladoch slúži len na ukážku. Mali by ste používať REÁLNY SRID uvedený v tabuľke spatial_ref_sys, ktorý zodpovedá projekcii vašich údajov. Ak pre vaše údaje nie je určený žiadny priestorový referenčný systém, mali by ste veľmi premyslieť, prečo nie, a možno by aj malo.

Ak je vašim dôvodom to, že modelujete niečo, čo nemá definovaný geografický priestorový referenčný systém, ako sú vnútornosti molekuly alebo pôdorys ešte nevybudovaného zábavného parku, je to v poriadku. Ak je však umiestnenie zábavného parku naplánované, potom by malo zmysel použiť vhodný planárny súradnicový systém pre toto miesto, ak nič iné ako zaistenie toho, aby zábavná časť neprechádzala na už existujúce štruktúry.

Dokonca aj v prípade, že plánujete expedíciu na Mars na prepravu ľudskej rasy v prípade jadrového holokaustu a chcete zmapovať planétu Mars na rehabilitáciu, môžete použiť mimozemský súradnicový systém, akým je napríklad Mars 2000. hore a vložte ho do tabuľky spatial_ref_sys. Aj keď je tento súradnicový systém Marsu nerovinný (je v sférických stupňoch), môžete ho použiť s typom geografie, aby ste namiesto stupňov merali svoju dĺžku a vzdialenosť v metroch.

4.7.1. Využívanie indexov

Pri konštrukcii dotazu je dôležité mať na pamäti, že iba priestorové indexy GiST môžu využívať iba operátory založené na ohraničovacom boxe, ako sú & amp & amp. Funkcie ako ST_Distance () nemôžu používať index na optimalizáciu svojej činnosti. Nasledujúci dotaz by bol napríklad na veľkej tabuľke dosť pomalý:

Tento dotaz vyberá všetky geometrie v geom_table, ktoré sú v rámci 100 jednotiek bodu (100 000, 200 000). Bude to pomalé, pretože vypočítava vzdialenosť medzi každým bodom v tabuľke a naším zadaným bodom, tj. jeden výpočet ST_Distance () pre každý riadok v tabuľke. Tomu sa môžeme vyhnúť tým, že na skrátenie počtu požadovaných výpočtov vzdialenosti použijeme funkciu ST_DWithin zrýchlenú na jeden krok:

Tento dotaz vyberá rovnakú geometriu, ale robí to efektívnejšie. Za predpokladu, že v the_geom je index GiST, plánovač dotazov rozpozná, že môže index použiť na zníženie počtu riadkov pred výpočtom výsledku funkcie ST_Distance (). Všimnite si, že geometria ST_MakeEnvelope, ktorá sa používa pri operácii & amp & amp, je 200 jednotiek štvorcového poľa so stredom na pôvodnom bode - toto je naše „pole dotazu“. Operátor & amp & amp používa index na rýchle zníženie výsledku nastaveného iba na tie geometrie, ktoré majú ohraničujúce rámčeky, ktoré sa prekrývajú s „rámčekom dotazu“. Za predpokladu, že je naše pole dotazov oveľa menšie ako rozsahy celej tabuľky geometrie, drasticky sa zníži počet výpočtov vzdialenosti, ktoré je potrebné vykonať.

4.7.2. Príklady priestorového jazyka SQL

Príklady v tejto časti použijú dve tabuľky, tabuľku lineárnych ciest a tabuľku polygonálnych hraníc obcí. Definície tabuliek pre tabuľku bc_roads sú:

Definícia tabuľky pre tabuľku bc_munity je:

Aká je celková dĺžka všetkých ciest vyjadrená v kilometroch?

Na túto otázku môžete odpovedať veľmi jednoduchým kúskom SQL:

Ako veľké je mesto Prince George v hektároch?

Tento dotaz kombinuje podmienku atribútu (v názve obce) s priestorovým výpočtom (oblasti):

Aká je najväčšia obec v provincii podľa oblasti?

Tento dotaz prináša priestorové meranie do podmienky dotazu. K tomuto problému existuje niekoľko spôsobov, ale ten najefektívnejší je uvedený nižšie:

Všimnite si toho, že aby sme mohli odpovedať na tento dotaz, musíme vypočítať plochu každého polygónu. Ak by sme to robili veľa, dávalo by zmysel pridať do tabuľky stĺpec oblasti, ktorý by sme mohli samostatne indexovať pre výkon. Usporiadaním výsledkov zostupne a ich použitím príkazu PostgreSQL „LIMIT“ môžeme ľahko vybrať najväčšiu hodnotu bez použitia agregačnej funkcie, ako je max ().

Aká je dĺžka ciest plne obsiahnutých v každej obci?

Toto je príklad „priestorového spojenia“, pretože spájame údaje z dvoch tabuliek (robíme spojenie), ale ako podmienku spojenia používame podmienku priestorovej interakcie („obsiahnuté“), a nie obvyklý vzťahový prístup spájania na spoločný kľúč:

Tento dotaz chvíľu trvá, pretože každá cesta v tabuľke je zhrnutá do konečného výsledku (asi 250 000 ciest pre našu konkrétnu príkladovú tabuľku). Pri menších prekrytiach (niekoľko tisíc záznamov na niekoľko stovkách) môže byť reakcia veľmi rýchla.

Vytvorte nový stôl so všetkými cestami v meste Prince George.

Je to príklad „prekrytia“, ktoré zaberá dve tabuľky a vydáva novú tabuľku, ktorá pozostáva z priestorovo orezaných alebo vystrihnutých výsledníkov. Na rozdiel od vyššie uvedeného „priestorového spojenia“ tento dotaz skutočne vytvára nové geometrie. Prekrytie je ako priestorovo prepojené turbodúchadlom a je užitočné pre presnejšie analytické práce:


WKT: Dátový formát & quot; Dobre známy text & quot; je praktická notácia čitateľná pre reprezentáciu priestorových objektov. Napríklad dvojrozmerný bodový objekt so súradnicami x a y je vo WKT reprezentovaný ako BOD (123 456). Tento formát definuje OGC. Ďalšie informácie nájdete v dokumentácii k dobre známym textom.

EWKT: Dátový formát „Rozšírený dobre známy text“ rozširuje WKT tak, že do popisu tvaru pridáva SRID. Ďalšie informácie nájdete v dokumentácii k dobre známym textom.

WKB: Dátový formát & quot; Dobre známy binárny & quot; je pohodlná strojovo čitateľná binárna reprezentácia pre priestorové objekty. Z dôvodu efektivity sa aplikácia môže rozhodnúť používať tento formát údajov, ale ľudia môžu radšej čítať WKT. Tento formát definuje OGC. Ďalšie informácie nájdete v časti Dobre známy binárny súbor.

EWKB: Dátový formát „Rozšírené dobre známe binárne“ rozširuje WKB prepísaním informácií SRID do popisu tvaru. Ďalšie informácie nájdete v časti Dobre známy binárny súbor.


Program GIS a geografické informačné systémy

GIS je rozšírená technológia, ktorá vám pomôže s každodennými úlohami, ako je napríklad nájsť si cestu, a zahŕňa širšiu vedu o správe, analýze a mapovaní geografických údajov. Vedľajší odbor v GIS poskytuje sadu výpočtových schopností, ktorá je doplnkom k mnohým hlavným študijným odborom. Pracovné miesta v rôznych oblastiach, ako je antropológia a morská veda, vyžadujú znalosti GIS a vedľajší odbor vás naučí, ako používať GIS vo svojom odbore. Pracovné miesta súvisiace s GIS ponúkajú konkurencieschopné platy (US Bureau of Labor Statistics, 2016) a boli adresované ako iniciatíva odborného vzdelávania USA na podporu rastu pracovných miest s vysokým rastom. Potreba zručností GIS narastá a maloletý vás naučí zručnosti GIS prostredníctvom aplikácií v reálnom svete v triede aj mimo nej. Ak chcete získať ďalšie informácie o učebných osnovách, navštívte stránku Menšie požiadavky a v prípade otázok kontaktujte riaditeľa programu GIS, Dr. Geoffa Fouada, na adrese [email protected]


Biotop kosatky v Salishskom mori na základe hĺbky k morskému dnu vytvorený študentom morskej a environmentálnej biológie a politiky


Pozri si video: Uzavreté multifunkčné ihrisko (Október 2021).