Viac

VYBERTE geometriu Z PRIESTOROV, KDE SÚ Geometria V RÁMCI alebo PRESKÚPENÍ polygónov Z OSTATNEJ tabuľky


Mám dva stoly, jeden obsahuje LINESTRINGY a druhý POLYGONE.

Chcel by som vybrať všetky LINESTRINGY, ktoré obsahujú vo vonkajšej hranici všetkých POLYGONOV dohromady.

Používam PostgreSQL 9.3 a PostGIS 2.1.

Je to možné z vyhlásenia WHERE?


Iste, pomocou ST_Contains

SELECT lines. * FROM lines, polygons WHERE ST_Contains (polygons.geom, lines.geom)

Porovnávanie medzi pravidelnými polygónmi

V tomto experimente pridávam inradius (nazvime to $ A $) a circumradius (nazvime to $ B $) rôznych polygónov s rovnakými stranami, z ktorých každá sa rovná $ 1 $ (počnúc štvorcom a zakaždým pridaním jednej strany). Výsledkom je $ A + B = C $, keď strana mnohouholníka = 1.

Pri porovnaní $ C $ jedného polygónu s $ C $ polygónu s jednou ďalšou stranou sa zdá, že sa rozdiel zmenšuje, akoby sa blížil k verzii čísla $ pi $ s. $ Before (možno napríklad 0,314159265359. ).

Môže to niekto potvrdiť alebo rozpracovať?

Vo výpočtovej sile nemôžem prekonať polygón s 1000 stranami a chcel by som vedieť, čo môžem čakať, keď idem k polygónu s nekonečnými stranami.

Štvorstranný polygón: 0,5 + 0,707106781 = 1,207106781 $

Päťstranný polygón: 0,68819096 + 0,850650808 = 1,5388417680000002 $ (rozdiel o 0.33173498700000015 z predchádzajúceho výsledku)

Šesťstranný polygón: 0,866025404 +1 = 1,866025404 $ (rozdiel 0.3271836359999998 z predchádzajúceho výsledku)

Sedemstranný polygón: $ 1,0382607 + 1,15238244 = 2,1906431399999997 $ (rozdiel o 0.32461773599999977 z predchádzajúceho výsledku)

8stranný polygón: 1,20710678 USD + 1,30656296 = 2,51366974 $ (rozdiel o 0.3230266000000004 z predchádzajúceho výsledku)

9-stranný mnohouholník: 1,37373871 $ + 1,4619022 = 2,83564091 $ (rozdiel o 0.32197116999999986 z predchádzajúceho výsledku)

10-stranný mnohouholník: 1,53884177 $ + 1,61803399 = 3,15687576 $ (rozdiel o 0.3212348500000002 z predchádzajúceho výsledku)

Jednostranný polygón: 1,70284362 $ + 1,77473277 = 3,47757639 $ (rozdiel o 0.3207006299999997 z predchádzajúceho výsledku)

12-stranný mnohouholník: 1,8660254 $ + 1,93185165 = 3,79787705 $ (rozdiel o 0.32030066 z predchádzajúceho výsledku)

13-stranný polygón: 2,02857974 dolárov + 2,08929073 = 4,17787047 dolárov (rozdiel o 0.31999341999999986 z predchádzajúceho výsledku)

14-stranný mnohouholník: 2,19064313 $ + 2,2469796 = 4,43762273 $ (rozdiel o 0.31975226000000045 z predchádzajúceho výsledku)

15-stranný mnohouholník: 2,35231505 dolárov + 2,40486717 = 4,757182220000001 dolárov (rozdiel o 0.3195594899999996 z predchádzajúceho výsledku)

999 obojstranný polygón: 158,995264 dolárov + 158,99605 = 317,991314 dolárov

1 000 obojstranný polygón: 159,154419 dolárov + 159,155205 = 318,309624 dolárov (rozdiel o 0.31830999999999676 z predchádzajúceho výsledku)


Každá obrúska má plochu 100 $ text^ 2. $ Ak ich pri položení na stôl vôbec neprekrývajú, pokryli by $ 200 text^ 2 $ tabuľky. Ak by sa úplne prekrývali, pokryli by iba 100 $ text^ 2 $ tabuľky. Jediný spôsob, ako zmenšiť plochu tabuľky pokrytej obrúskami z 200 $ text^ 2 $ je za to, že sa obrúsky prekrývajú. Každý $ text^ 2 $ plochy pokryté obrúskami, čo je menej ako 200 $ text^ 2 $ je kvôli prekrývaniu. Ak chcete zistiť oblasť ich prekrytia, musíte vypočítať rozdiel medzi celkovou plochou (200 $ text^ 2 $) a oblasť tabuľky, ktorú pokrývajú (172 $ text^2$ ).

Povedzme, že $ A $ je množina bodov na prvom štvorci, $ B $ je množina bodov na druhom štvorci, potom

$ Area (A cup B) = Area (A) + Area (B) - Area (A cap B) iff $ $ Area (A cap B) = Area (A) + Area (B) - Area ( A pohár B) = 100 + 100 -172 = 28 $

Je to podobné ako so vzorcom $ | A cup B | = | A | + | B | - | A cap B | $, ale namiesto toho s oblasťami.


Atribúty vo výslednej vrstve

V dialógovom okne Pravidlá rozdelenia a zlúčenia môžete nastaviť atribúty pre prvky, ktoré sa rozdelia v dôsledku operácie prekrytia. Ak tieto pravidlá nenastavíte, budú sa tieto funkcie riadiť predvolenými pravidlami. Pravidlá zlúčenia sa neuplatňujú. Ak prekryjete dva zdroje objektov, ktoré ste predtým použili na inej mape, musíte resetovať pravidlá pre novú mapu.

V niektorých prípadoch sa na výstup zapisujú atribúty zo zdroja aj z prekrytia. Ak výsledkom budú atribúty s rovnakým názvom, každý z nich bude mať pôvodný názov atribútu a číselnú príponu. Môžete napríklad prekryť dve vrstvy nazývané Mestá a pozemky. Ak obe majú atribút Názov, výsledná vrstva bude mať atribúty nazvané „Názov_1“ a „Názov_2“.


Výber podľa polohy

Myslíte si, že keď to urobíte tak dlho, ako budem mať, budem mať asi & # 8220 odpoveď & # 8221 asi na všetko. Minulý týždeň ma našiel ísť & # 8220well vybrať podľa miesta a skontrolovať & # 8230well & # 8230check & # 8230. čo chcete? Vyberieme križovatky & # 8230 nie & # 8230 do & # 8230no & # 8230 na kríž & # 8230well & # 8230 & # 8230 & amp * ^% & # 8221

Začal som teda malú cestu sebapoznávania na tému # 8220 Čo robí každé začiarkavacie políčko & # 8221. Prekvapivo som # 8211 nevedel, čo každé začiarkavacie políčko urobilo, a znova som to robil príliš dlho, aby som o tom nevedel. Áno, dokážem si prečítať pomoc, ale & # 8230 ..

Vytiahol som všetky kraje, ktoré ma obklopujú, a náhodne vygeneroval 5 000 bodov a uložil ich do medzipamäte. Potom som začal klikať a prechádzať cez & # 8220why & # 8221. Úprimne povedané, nikdy som nevytvoril iba testovacie dáta # 8211, čo bolo neuveriteľne rýchle a uľahčilo mi to život.

Takže & # 8211, ideme na to. Vyberiem si svoj kraj a naštartujem & # 8220Vyberte podľa umiestnenia & # 8221 v QGIS:

  • & # 8220Intersects & # 8221 robí presne to, čo si myslíte, že robí. Ak mnohouholník & # 8220intersects & # 8221 môj kraj, je vybratý. Mám 851 polygónov dotýkajúcich sa môjho kraja.
  • & # 8220Are within & # 8221 does what I expect as I have 651 polygons within my county.
  • & # 8220Overlap & # 8221 robí to, čo chcem & # 8211 Mám 166 polygónov, ktoré sa dotýkajú krajskej čiary. Nemajú bydlisko v žiadnom kraji
  • & # 8220Disjoint & # 8221 mi dáva všetko vonku. Mám 4149 polygónov, ktoré sa nedotýkajú môjho kraja. Čo dáva zmysel, pretože mám 851, ktoré sa pretínajú
  • & # 8220Obsah & # 8221 nerobí nič. Čo nemá zmysel, ako sa hovorí, obsahuje # 8220 a # 8221. Ak si vyberiem svoju župu a narazím na 5 000 polygónov, nič sa nedeje. Ak vyberiem polygón v rámci okresu a otočím môj výber: Dajte mi všetky okresy, ktoré obsahujú tento jeden polygón & # 8211, ktorý funguje.
  • & # 8220Touch & # 8221 nerobí nič, pretože očakávam, že to bude podobné, takže sa prekrývajú. Vyberte si môj kraj a bežte proti polygónom a nič. Vyberte môj kraj a požiadajte ho, aby identifikoval každý kraj, ktorý sa dotýka môjho vybraného a ktorý funguje. Môj kraj sa dotýka ďalších 10 krajov.
  • & # 8220Equal & # 8221 robí presne to, čo očakávam, pretože žiadny z mojich 5000 polygónov & # 8220Equals & # 8221 geometria môjho kraja.
  • Najdivnejší je & # 8220cross & # 8221. Musel som urobiť nejaké kopanie. Takže s krížikom môže mnohouholník prekonať ďalší mnohouholník, ale nie je nič iné ako viac polygónov. Povedzme, že hranica prechádza do okresu & # 8211, že križovatka je bod. Po vykonaní niektorých výskumov je kríženie určené hlavne na čiary prechádzajúce cez iné čiary alebo mnohouholníky. Čo ak urobím trochu triku s QGIS prevedením polygónov na čiary a spustením & # 8220Vyberať podľa polohy & # 8221. Máme 166 vybraných riadkov, ktoré zodpovedajú tomu, čo mám v prekrývaní.

Takže aj tak & # 8211 Vybrať podľa polohy. Robí všetko, čo chcete, a veci, ktoré neočakávate. Čo & # 8211 to bola zábava a mohol by som to urobiť s iným nástrojom na spracovanie, ktorému by som mal 100% rozumieť a nemal by som ho používať.


V nadväznosti na odpoveď Lovre Gazovej vyberte oba polygóny, ktoré chcete zlúčiť, pomocou klávesovej skratky Shift + kliknutie. Potom kliknite pravým tlačidlom myši a Akcie polygónu - & gt Kombinujte vybraté polygóny.

Chcem dodať, že som mal problém dostať tento príkaz do práce, pokiaľ som neurobil prekrývanie polygónov. Tento príkaz neurobil nič, aj keď boli ich okraje zarovnané k rovnakej mriežke.

Pred vykonaním tohto príkazu teda upravte svoje mnohouholníky tak, aby sa trochu prekrývali.

Ak vám dobre rozumiem, je to v skutočnosti veľmi jednoduché. Nalejte svoje mnohouholníky a umiestnite ich tam, kam chcete. Skontrolujte, či sú všetky nastavené na rovnakú sieť. Potom ich vyberte všetky (podržte kláves Shift + kliknutie), kliknite pravým tlačidlom myši a v časti Vybrané objekty vyberte položku Odbory - & gtVytvoriť úniu. Týmto sa k nim „pripojíte“, aby ste ich všetky mohli presunúť ako jeden kus. Pokiaľ ide o rovnakú sieť, bude s nimi (elektricky) zaobchádzané ako s rovnakým predmetom. Dúfam, že to pomôže!


Ako skontrolovať, či je bod vo vnútri mnohouholníka? ¶

Z výpočtového hľadiska je zisťovanie, či je bod vo vnútri mnohouholníka, komplikovaná záležitosť. Našťastie môžeme na vykonanie dotazu Bod v polygóne použiť hotovú funkciu. Môžeme využiť Shapelyho binárne predikáty, ktoré dokážu vyhodnotiť topolociálne vzťahy medzi geografickými objektmi, ako je napríklad PIP, o ktoré sa tu zaujímame.

V zásade existujú dva spôsoby vykonávania dotazov Point in Polygon v aplikácii Shapely:

pomocou funkcie s názvom .within (), ktorá kontroluje, či je bod v polygóne

pomocou funkcie s názvom .contains (), ktorá kontroluje, či mnohouholník obsahuje bod

Poznámka: aj keď tu hovoríme o Bod v prevádzke Polygon je tiež možné skontrolovať, či sa reťazec LineString alebo Polygon nachádza v inom polygóne.

Najskôr vytvorme mnohouholník pomocou zoznamu n-tiek súradníc a niekoľkých objektov Point

Poďme skontrolovať, či sú tieto body v polygóne

Dobre, takže vidíme, že prvý bod sa zdá byť v tomto polygóne a druhý nie.

Prvý bod je v skutočnosti blízko stredu mnohouholníka, ako vidíme:

PIP je možné vykonať aj opačne, teda skontrolovať, či mnohouholník obsahuje bod:

Výsledkom teda sú obidva spôsoby kontroly priestorového vzťahu rovnakým spôsobom.

Ktorý z nich by ste mali potom použiť? Závisí to:

ak máte veľa bodov a iba jeden mnohouholník a pokúsite sa zistiť, ktorý z nich je vo vnútri mnohouholníka:

musíte iterovať body a skontrolovať jeden po druhom, ak je v rámci () zadaný mnohouholník

ak máte veľa polygónov a iba jeden bod a chcete zistiť, ktorý mnohouholník obsahuje bod

musíte opakovať polygóny, kým nenájdete polygón, ktorý obsahuje () zadaný bod (za predpokladu, že neexistujú žiadne prekrývajúce sa polygóny)


3 odpovede 3

Príkaz, ktorý hľadám, je „rozdelený“ a môžete ho zvoliť pomocou Sieť> Vrcholy> Rozdeliť, menu alebo stlačením klávesovej skratky Y.

Znie to, akoby ste chceli trhať okraje okolo tváre.

Pomôže vám prejsť do režimu výberu okraja najskôr stlačením klávesovej skratky Ctrl + Tab> edge select, pretože v režime úprav vrcholov môžete nakoniec vybrať príliš veľa hrán. Potom vyberte okraje okolo tváre a stlačte kláves V, tým sa okraje roztrhnú.

Ak sa pokúsite presunúť tieto roztrhané hrany, v skutočnosti presuniete iba hrany (akýkoľvek vrchol umiestnený v strede zostane na svojom mieste pevný). Ak chcete presunúť celý roztrhnutý kus, musíte ihneď po roztrhnutí stlačiť Ctrl + L, aby ste vybrali geometriu spojenú s vybranými hranami, alebo zrušiť výber všetkých pomocou A a potom vybrať tváre, ktoré chcete vzdialiť.


R ako GIS pre ekonómov

1.1.1 Prehľad projektu

  • Čerpanie spodnej vody zavlažovacími studňami v okresoch Chase, Dundy a Perkins v juhozápadnom rohu Nebrasky
  • Hladiny podzemnej vody pozorované na monitorovacích studniach USGS nachádzajúcich sa v troch krajoch a získavané z Národného informačného systému o vode (NWIS) udržiavaného USGS pomocou balíka dataRetrieval.

Ekonometrický model

Na dosiahnutie cieľa projektu odhadneme nasledujúci model:

kde (y_) je hĺbka podzemnej vody 11 v 12. marca roku (t ) na monitorovacom vrte USGS (i ) a (gw_) je celkové množstvo odčerpania podzemnej vody, ku ktorému došlo v okruhu 2 míľ od monitorovacieho vrtu (i ).

  • načítať tvarový súbor ESRI ako sf (priestorový) objekt
    • použiť sf :: st_read ()
    • použiť dataRetrieval :: readNWISdata () a dataRetrieval :: readNWISsite ()
    • použiť sf :: st_buffer ()
    • použite sf :: st_as_sf () a sf :: st_set_crs ()
    • použiť sf :: st_transform ()
    • použiť sf :: st_join ()
    • použite balíček tmap

    Príprava na replikáciu

    Spustením nasledujúceho kódu nainštalujte alebo načítajte (ak je už nainštalovaný) balík pacman a potom nainštalujte alebo načítajte (ak je už nainštalovaný) uvedený balík vo vnútri funkcie pacman :: p_load ().

    1.1.2 Ukážka projektu

    Geografickým zameraním projektu je juhozápadný roh Nebrasky pozostávajúci z okresov Chase, Dundy a Perkins (ich umiestnenia v Nebraske pozri obrázok 1.1). Poďme si prečítať súbor tvarov troch krajov predstavovaných ako polygóny. Neskôr ho použijeme na priestorové filtrovanie údajov o hladinách podzemnej vody stiahnutých z NWIS.

    Obrázok 1.1: Umiestnenie okresu Chase, Dundy a Perkins v Nebraske

    Už sme zhromaždili údaje o čerpaní podzemnej vody, importujme ich.

    well_id je jedinečný identifikátor zavlažovacej studne a vol_af je množstvo podzemnej vody čerpanej v akr stôp. Tento súbor údajov je iba bežný údajový rámec so súradnicami. Tento súbor údajov musíme previesť na objekt triedy sf, aby sme mohli neskôr identifikovať zavlažovacie studne umiestnené v okruhu 2 míľ od monitorovacích studní USGS (priestorové rozloženie zavlažovacích studní nájdete na obrázku 1.2).

    Obrázok 1.2: Priestorové rozloženie zavlažovacích vrtov

    Tu sú ďalšie kroky, ktoré podnikneme na získanie súboru údajov pripraveného na regresiu pre našu analýzu.

    1. sťahovať údaje o hladine podzemnej vody pozorované na monitorovacích vrtoch USGS z Národného informačného systému o vode (NWIS) pomocou balíka dataRetrieval
    2. identifikujte zavlažovacie studne nachádzajúce sa v okruhu 2 míľ od studní USGS a vypočítajte celkové čerpanie podzemnej vody, ktoré sa vyskytlo okolo každej z studní USGS, z roku
    3. zlúčiť údaje čerpania podzemnej vody s údajmi o hladine podzemnej vody

    Najprv si stiahneme údaje o hladine podzemnej vody z NWIS. Nasledujúci kód sťahuje údaje o hladine podzemnej vody pre Nebrasku od 1. januára 1990 do 1. januára 2016.

    site_no je jedinečný identifikátor monitorovacej studne, date je dátum monitorovania hladiny podzemnej vody a dwt je hĺbka po hladinu.

    Priemernú hladinu podzemnej vody v marci vypočítame pomocou monitorovacieho systému USGS (tesne pred začiatkom zavlažovacej sezóny): 13

    Pretože v NE_gwl chýbajú geografické súradnice monitorovacích vrtov, stiahneme ich pomocou funkcie readNWISsite () a vyberieme iba monitorovacie jamky, ktoré sú vo vnútri týchto troch krajov.

    Teraz identifikujeme zavlažovacie studne, ktoré sa nachádzajú v okruhu 2 míle od monitorovacích studní 14. Najskôr okolo monitorovacích vrtov vytvoríme polygóny s polomerom 2 míle (pozri obrázok 1.3).

    Obrázok 1.3: 2 míľové nárazníky okolo monitorovacích vrtov USGS

    Teraz identifikujeme, ktoré zavlažovacie studne sú vo vnútri každého z nárazníkov, a získame príslušné hodnoty čerpania podzemnej vody. Funkcia st_join () z balíka sf to urobí.

    Pozrime sa na monitorovaciu studňu USGS (site_no = (400012101323401 )).

    Ako vidíte, tento vrt má v roku 2010 v okruhu 2 míle sedem zavlažovacích vrtov.

    Teraz dosiahneme celkové čerpanie v blízkosti monitorovaním dobre a ročne.

    Teraz zlúčime údaje čerpania v okolí do údajov o hladine podzemnej vody a tieto údaje transformujeme, aby sme získali súbor údajov pripravený na regresnú analýzu.

    Nakoniec model odhadneme pomocou felm () z balíka lfe (ako funguje) (pozri (Gaure 2013)).

    Tu je výsledok regresie.

    Závislá premenná:
    dwt_dif
    nearby_pumping 0.001 ***
    (0.0001)
    Postrehy 1,342
    R 2 0.409
    Upravené R 2 0.286
    Residual Std. Chyba 1,493 (df = 1111)
    Poznámka: p <0,1 p <0,05 p <0,01

    Referencie

    Gaure, Simen. 2013. „Lfe: Lineárne skupinové fixné efekty.“ The R Journal 5 (2): 104–17.

    vzdialenosť od povrchu po vrchol zvodnenej vrstvy↩︎

    Pre naše geografické zameranie juhozápadnej Nebrasky je kukurica dominantným typom plodiny. K zavlažovaniu kukurice obvykle dochádza od apríla do septembra. Napríklad to znamená, že zmeny hladiny podzemnej vody ( (y_ - y_)) zachytáva vplyv čerpania podzemnej vody, ku ktorému došlo od apríla do septembra v roku 2011.↩︎

    mesiac () a rok () sú z balenia mazadla. Extrahujú mesiac a rok z objektu Date.↩︎

    To je možné alternatívne vykonať pomocou funkcie st_is_within_distance () .↩︎


    1 Priestorové koncepcie

    Oracle8 i Spatial je integrovaná sada funkcií a postupov, ktorá umožňuje rýchle a efektívne ukladanie, prístup a analýzu priestorových údajov v databáze Oracle8 i.

    Priestorové údaje predstavujú základné lokalizačné charakteristiky skutočných alebo koncepčných objektov, pretože tieto objekty sa týkajú skutočného alebo koncepčného priestoru, v ktorom existujú.

    1.1 & # 32 Čo je to priestorový produkt?

    Oracle8 i Spatial, často označovaný ako Spatial, poskytuje štandardnú schému SQL a funkcie, ktoré uľahčujú ukladanie, načítanie, aktualizáciu a dopytovanie zbierok priestorových funkcií v databáze Oracle8 i. Skladá sa zo štyroch komponentov:

      Schéma, ktorá predpisuje ukladanie, syntax a sémantiku podporovaných typov geometrických údajov

    Priestorovým atribútom priestorového prvku je geometrický popis jeho tvaru v nejakom súradnicovom priestore. Toto sa označuje ako jeho geometria.

    Toto vydanie Spatial podporuje dva mechanizmy reprezentácie geometrie. Prvá, objektovo-relačná schéma, používa tabuľku s jedným stĺpcom typu MDSYS.SDO_GEOMETRY a jedným riadkom na jednu inštanciu geometrie. Druhá, relačná schéma, používa tabuľku s preddefinovanou sadou stĺpcov typu NUMBER a jedným alebo viacerými riadkami pre každú inštanciu geometrie. Tieto mechanizmy zhruba zodpovedajú dvom alternatívam opísaným v špecifikácii OpenGIS ODBC / SQL pre geopriestorové prvky. Prvý zodpovedá implementácii tabuliek priestorových funkcií „SQL with Geometry Types“ a druhý implementácii tabuliek priestorových funkcií pomocou numerických typov SQL na ukladanie geometrie.

    Podrobnosti špecifické pre implementáciu sú popísané v časti I „Objektovo-relačný model“ a časti II „Relačný model“ tejto príručky. Zvyšok tejto kapitoly popisuje priestorové koncepty a vlastnosti bez ohľadu na ich implementáciu, kedykoľvek je to možné.

    1.2 & # 32 Úvod do priestorových údajov

    Možnosť Priestorové je navrhnutá tak, aby uľahčila a uľahčila správu priestorových údajov používateľom alebo aplikáciám, ako je napríklad geografický informačný systém (GIS). Po uložení týchto údajov do databázy Oracle je možné s nimi ľahko manipulovať, načítať ich a súvisieť so všetkými ostatnými údajmi uloženými v databáze.

    Bežný príklad priestorových údajov možno vidieť v cestovnej mape. Cestná mapa je dvojrozmerný objekt, ktorý obsahuje body, čiary a polygóny, ktoré môžu predstavovať mestá, cesty a politické hranice, ako sú štáty alebo provincie. Cestná mapa je vizualizácia geografických informácií. Poloha miest, ciest a politických hraníc, ktoré existujú na povrchu Zeme, sa premieta na dvojrozmerný displej alebo kúsok papiera, pričom sa zachovajú relatívne polohy a relatívne vzdialenosti vykreslených objektov.

    Údaje, ktoré označujú polohu Zeme (zemepisnú šírku a dĺžku alebo výšku a hĺbku) týchto vykreslených objektov, sú priestorové údaje. Po vykreslení mapy sa tieto priestorové údaje použijú na premietnutie umiestnenia objektov na dvojrozmerný kúsok papiera. GIS sa často používa na ukladanie, načítanie a vykreslenie týchto priestorových údajov relatívnych k Zemi.

    Medzi ďalšie typy priestorových údajov, ktoré je možné uložiť pomocou voľby Priestor, patria okrem údajov GIS aj údaje zo systémov podporovaných počítačom (CAD) a počítačom podporovaných výrobných systémov (CAM). Namiesto pôsobenia na objekty v geografickom meradle pracujú systémy CAD / CAM v menšom meradle, napríklad pre automobilové motory alebo dosky s plošnými spojmi.

    Rozdiely medzi týmito tromi systémami sú iba v rozsahu údajov, nie v ich zložitosti. Všetky môžu skutočne zahŕňať rovnaký počet údajových bodov. V geografickom meradle sa umiestnenie mosta môže líšiť o niekoľko desatín palca bez toho, aby spôsobovalo staviteľom ciest nejaké viditeľné problémy. Zatiaľ čo ak je priemer piestov motora o niekoľko desatín palca menší, motor nebude bežať. Na doske s plošnými spojmi bude pravdepodobne na povrchu leptaných mnoho tisíc predmetov, ktoré nie sú väčšie ako najmenší detail uvedený na plánoch staviteľa cesty.

    Všetky tieto aplikácie ukladajú, načítajú, aktualizujú alebo dopytujú niektoré súbory funkcií, ktoré majú priestorové aj priestorové atribúty. Príklady priestorových atribútov sú meno, pôdny typ, klasifikácia krajiny a číslo_časti. Priestorový atribút je súradnicová geometria alebo vektorová reprezentácia tvaru prvku. Priestorový atribút, označovaný ako geometria, je usporiadaná postupnosť vrcholov, ktoré sú spojené úsečkami alebo kruhovými oblúkmi. Sémantika geometrie je určená jej typom, ktorým môže byť jeden z bodov, čiarových reťazcov alebo mnohouholníkov.

    1.3 & # 32 Geometrické typy pre relačné a objektovo-relačné modely

    Relačný model možnosti Priestor podporuje tri geometrické primitívne typy a geometrie zložené zo zbierok týchto typov. Tri primitívne typy sú nasledujúce:

      2-D bod a bodový zhluk

    Body 2-D sú prvky zložené z dvoch súradníc X a Y, ktoré často zodpovedajú zemepisnej dĺžke a šírke. Čiarové reťazce sa skladajú z jedného alebo viacerých párov bodov, ktoré definujú úsečky. Polygóny sú zložené z prepojených čiarových reťazcov, ktoré tvoria uzavretý krúžok a je naznačený vnútorný priestor mnohouholníka. Obrázok & # 321-1 zobrazuje podporované geometrické primitívne typy.

    Obrázok 1-1 & # 32Geometrické primitívne typy

    Samočinne sa krížiace polygóny nie sú podporované, hoci samočinné krížové čiary sú podporované. Ak sa riadok kríža sám so sebou, nestane sa mnohouholníkom. Reťazec samočinného kríženia nemá implikovaný interiér.

    Objektovo-relačná implementácia podporuje typy uvedené na obrázku & # 321-1, ako aj typy zobrazené na obrázku & # 321-2.

    Objektovo-relačný model pridáva k predtým uvedeným typom nasledujúce typy:

      Struny 2D oblúkovej čiary (Všetky oblúky sa generujú ako kruhové oblúky.)

    Obrázok 1-2 & # 32 Nové typy geometrie pomocou objektovo-relačného modelu

    Dátový model 1.4 a # 32

    Priestorový dátový model je hierarchická štruktúra pozostávajúca z prvkov, geometrií a vrstiev, ktoré zodpovedajú reprezentáciám priestorových údajov. Vrstvy sa skladajú z geometrií, ktoré sú zase tvorené prvkami.

    Napríklad bod môže predstavovať umiestnenie budovy, čiarový riadok môže byť cesta alebo letová dráha a mnohouholníkom môže byť štát, mesto, územný obvod alebo mestský blok.

    Prvok 1.4.1 & # 32

    Prvok je základným stavebným prvkom geometrie. Podporovanými typmi priestorových prvkov sú body, líniové reťazce a mnohouholníky. Napríklad prvky môžu modelovať hviezdne konštelácie (bodové zhluky), cesty (líniové reťazce) a hranice krajov (mnohouholníky). Každá súradnica v prvku je uložená ako pár X, Y. Vonkajší krúžok a vnútorný krúžok mnohouholníka s otvormi sa považujú za dva odlišné prvky, ktoré spolu tvoria zložitý mnohouholník.

    Bodové údaje 1 pozostávajú z jednej súradnice. Údaje o čiare pozostávajú z dvoch súradníc predstavujúcich úsečku prvku. Údaje mnohouholníka pozostávajú z hodnôt dvojice súradníc, jedného vrcholového páru pre každý úsečkový úsek mnohouholníka. Súradnice sú definované v smere alebo proti smeru hodinových ručičiek okolo mnohouholníka.

    1.4.2 & # 32 Geometria

    Geometria je znázornenie priestorového prvku používateľa, modelovaného ako usporiadaná sada primitívnych prvkov. V relačnom modeli sa vyžaduje, aby bola každá geometria jednoznačne identifikovaná identifikátorom geometrie (GID), ktorý ju spája s ostatnými atribútmi prvku. V objektovo-relačnom modeli sa to nevyžaduje.

    Geometria môže pozostávať z jedného prvku, ktorý je inštanciou jedného z podporovaných primitívnych typov, alebo z homogénnej alebo heterogénnej kolekcie prvkov. Multipolygón, napríklad ten, ktorý predstavuje skupinu ostrovov, je homogénnou zbierkou. Heterogénna kolekcia je taká, v ktorej sú prvky rôznych typov.

    V relačnom modeli by sa komplexná geometria, ako je mnohouholník s otvormi, uložila ako postupnosť mnohouholníkových prvkov. Všetky čiastkové prvky viacprvkového polygónu sú úplne obsiahnuté v najvzdialenejšom prvku. Toto sa nevyžaduje pomocou objektovo-relačného modelu.

    Príklad geometrie by mohol opísať staviteľnú pôdu v meste. Dalo by sa to predstaviť ako mnohouholník s otvormi, kde voda alebo zónovanie bráni výstavbe.

    1.4.3 & # 32 Layer

    Vrstva je heterogénna kolekcia geometrií, ktoré majú rovnakú sadu atribútov. Napríklad jedna vrstva v GIS môže obsahovať topografické prvky, zatiaľ čo iná popisuje hustotu obyvateľstva a tretia popisuje sieť ciest a mostov v oblasti (čiary a body). Geometrie každej vrstvy a s nimi spojený priestorový index sú uložené v databáze v štandardných tabuľkách.

    1.5 & # 32 Dotazový model

    Spoločnosť Spatial používa na riešenie priestorových dotazov a priestorových spojení dvojstupňový model dotazu. Termín sa používa na označenie toho, že sa vykonávajú dve odlišné operácie s cieľom vyriešiť dotazy. Výsledkom oboch operácií je presný výsledok.

    Tieto dve operácie sa označujú ako operácie primárneho a sekundárneho filtra.

      Primárny filter umožňuje rýchly výber záznamov kandidátov na prechod do sekundárneho filtra. Primárny filter porovnáva aproximácie geometrie, aby sa znížila zložitosť výpočtu, a považuje sa za lacnejší filter. Pretože primárny filter porovnáva geometrické aproximácie, vracia nadmnožinu množiny výsledkov.

    Obrázok & # 321-3 zobrazuje vzťah medzi primárnym a sekundárnym filtrom.

    Obrázok 1-3 & # 32 Dotazový model

    Na implementáciu primárneho filtra používa Spatial lineárny priestorový index založený na štvorstrome. Toto je podrobne popísané v nasledujúcich častiach.

    Ako sekundárny filter sa používa funkcia SDO_GEOM.RELATE (). Vyhodnocuje topologický vzťah - napríklad to, či sa dve dané geometrie dotýkajú, navzájom sa prekrývajú alebo majú inú interakciu.

    Priestorový nevyžaduje použitie primárneho aj sekundárneho filtra. V niektorých prípadoch stačí iba použitie primárneho filtra. Napríklad funkcia zväčšenia v mapovacej aplikácii žiada o údaje, ktoré prekrývajú obdĺžnik predstavujúci viditeľné hranice. Primárny filter veľmi rýchlo vráti nadmnožinu dotazu. Mapová aplikácia potom môže použiť orezávacie rutiny na zobrazenie cieľovej oblasti.

    Účelom primárneho filtra je rýchle vytvorenie podmnožiny údajov a zníženie záťaže spracovania sekundárneho filtra. Primárny filter by preto mal byť čo najefektívnejší, teda selektívny, ale rýchly. Toto je určené charakteristikami priestorového indexu na dátach.

    1.6 & # 32 Metódy indexovania

    Kľúčovým rysom produktu Spatial je zavedenie funkcií priestorového indexovania do databázového stroja Oracle. Priestorový index, rovnako ako akýkoľvek iný index, poskytuje mechanizmus na obmedzenie vyhľadávania v tabuľkách (alebo údajových priestoroch) na základe priestorových kritérií, ako sú priesečník a obmedzenie. Priestorový index sa vyžaduje na:

      Nájdite objekty v indexovanom dátovom priestore, ktoré sa prekrývajú s daným bodom alebo záujmovou oblasťou (dotaz na okno)

    Priestorový index sa považuje za logický index. Položky v priestorovom indexe závisia od umiestnenia geometrií v súradnicovom priestore, ale hodnoty indexu sú v inej doméne. Položky indexu nadobúdajú hodnoty z lineárne usporiadanej celočíselnej domény, zatiaľ čo súradnice pre geometriu môžu byť dvojice čísel typu integer, s pohyblivou rádovou čiarkou alebo s dvojnásobnou presnosťou. Priestor používa lineárnu schému indexovania založenú na štvorstrome, ktorá je tiež známa ako z-objednávanie a ktorá funguje tak, ako je opísané v nasledujúcich odsekoch.

    Súradnicový priestor (pre vrstvu, kde sa nachádzajú všetky geometrické objekty) je podrobený procesu nazývanému teselacia, ktorý definuje exkluzívne a vyčerpávajúce krycie dlaždice pre každú uloženú geometriu. Teselacia sa uskutočňuje pravidelným hierarchickým rozkladom súradnicového priestoru. Rozsah súradníc, priestor súradníc, sa považuje za obdĺžnik. Na prvej úrovni rozkladu je obdĺžnik rozdelený na polovice pozdĺž každej súradnicovej dimenzie, čím vzniknú štyri dlaždice. Každá dlaždica, ktorá interaguje s mozaikovou geometriou, sa ďalej rozkladá na štyri dlaždice. Tento proces pokračuje, kým nie sú splnené niektoré ukončovacie kritériá, ako napríklad veľkosť dlaždíc alebo maximálny počet dlaždíc na pokrytie geometrie.

    Spoločnosť Spatial môže na zakrytie geometrie použiť dlaždice s pevnou alebo variabilnou veľkosťou. Dlaždice pevnej veľkosti sa ovládajú rozlíšením dlaždíc. Obklady variabilnej veľkosti sa riadia hodnotou dodanou pre maximálny počet dlaždíc. Ak je jediným kontrolným faktorom rozlíšenie, potom teselacia končí, keď sa koordinačný priestor rozloží konkrétnym počtom prípadov. Preto má každá dlaždica pevnú veľkosť a tvar. Ak je jediným riadiacim faktorom počet dlaždíc na geometriu, N, mozaikovanie sa ukončí, keď sa na zakrytie danej geometrie použije N dlaždíc.

    Rozlíšenie dlaždíc pevnej veľkosti a počet dlaždíc variabilnej veľkosti použitých na zakrytie geometrie sú používateľom voliteľné parametre nazývané SDO_LEVEL a SDO_NUMTILES. Menšie dlaždice s pevnou veľkosťou alebo dlaždice s premenlivou veľkosťou poskytujú lepšiu aproximáciu geometrie. Čím menší je počet dlaždíc alebo čím väčšie sú dlaždice, tým sú hrubšie približné hodnoty.

    Priestorové podporuje dve platné kombinácie SDO_LEVEL a SDO_NUMTILES. Prvá s nenulovou hodnotou SDO_LEVEL a nulovou hodnotou SDO_NUMTILES má za následok dlaždice s pevnou veľkosťou (v tejto príručke sa nazýva pevné indexovanie). Druhá, ktorá má nenulovú hodnotu SDO_LEVEL a nenulovú hodnotu SDO_NUMTILES, vedie k hybridnému indexovaniu . Hybridné indexovanie generuje dve sady dlaždíc na geometriu. Jedna sada obsahuje dlaždice s pevnou veľkosťou a druhá sada obsahuje dlaždice s premenlivou veľkosťou.

    1.6.1 & # 32 Teselacia vrstvy počas indexovania

    Proces určovania, ktoré dlaždice pokrývajú danú geometriu, sa nazýva mozaikovanie. Proces teselace je štvorstranný rozklad, pri ktorom je dvojrozmerný súradnicový priestor rozdelený na štyri rovnako veľké krycie dlaždice. Postupné mozaikovanie rozdelí tie dlaždice, ktoré interagujú s geometriou, na menšie dlaždice a tento proces pokračuje, kým sa nedosiahne požadovaná úroveň alebo počet dlaždíc. Výsledky procesu mozaiky na geometrii sú uložené v tabuľke, ktorá sa označuje ako tabuľka SDOINDEX.

    Dlaždice na konkrétnej úrovni je možné lineárne triediť systematickým navštevovaním dlaždíc v poradí určenom krivkou vyplňovania priestoru, ako je to znázornené na obrázku & # 321-4. Dlaždiciam možno tiež priradiť jedinečné číselné identifikátory, známe ako Morton kódy alebo hodnoty z. Pojmy dlaždica a kód dlaždice sa v tejto a ďalších častiach týkajúcich sa priestorového indexovania budú používať vzájomne zameniteľné.

    Obrázok 1-4 & # 32Quadtree kódy rozkladu a Mortona

    1.6.2 & # 32 Fixné indexovanie

    Priestorové indexovanie dlaždíc pevnej veľkosti je preferovanou metódou indexovania pre relačný model. Táto metóda používa krycie dlaždice rovnakej veľkosti na zakrytie geometrie. Pretože majú všetky dlaždice rovnakú veľkosť, všetky majú kódy rovnakej dĺžky a na porovnanie dlaždíc počas operácie spojenia je možné použiť štandardný operátor rovnosti SQL (=). Výsledkom sú vynikajúce výkonové charakteristiky.

    Je pravdepodobné, že budú vzájomne pôsobiť dve geometrie, a teda prejdú fázou primárneho filtra, ak zdieľajú jednu alebo viac dlaždíc. Príkaz SQL pre fázu primárneho filtra je:

    Účinnosť a účinnosť tejto indexovacej metódy závisí od úrovne obkladu a zmeny veľkosti geometrií vo vrstve. If you select a small fixed-size tile to cover small geometries and then try to use the same size tile to cover a very large geometry, a large number of tiles would be required. However, if the chosen tile size is large, so that fewer tiles are generated in the case of a large geometry, then the index selectivity suffers because the large tiles do not approximate the small geometries very well. Figure Ł-5 and Figure Ł-6 illustrate the relationships between tile size, selectivity, and the number of cover tiles.

    Using a small fixed-size tile as shown in Figure Ł-5, selectivity is good, but a large number of tiles is needed to cover large geometries. A window query would easily identify geometries A and B, but would reject C.

    Figure 1-5 Fixed-Size Tiling with Many Small Tiles

    Using a large fixed-size tile as shown in Figure Ł-6, fewer tiles are needed to cover the geometries, but the selectivity is not as good. A window query would likely pick up all three geometries. Any object that shares tile T1 or T2 would identify object C as a candidate, even though the objects may be far apart, such as objects B and C are in this figure.

    The SDO_TUNE package has an ESTIMATE_TILING_LEVEL() function that helps determine an appropriate tiling level for your data set.

    Figure 1-6 Fixed-Size Tiling with Fewer Large Tiles

    Figure Ł-7 illustrates geometry 1013 tessellated to three fixed-sized tiles at level 1. The codes for these cover tiles are then stored in an SDOINDEX table.

    Figure 1-7 Tessellated Figure

    Only three of the four tiles generated by the first tessellation interact with the geometry. Only those tiles that interact with the geometry are stored in the SDOINDEX table, as shown in Table Ł-1. In this example, three fixed-size tiles are used. The table structure is shown for illustrative purposes only. The column names of this table differ depending on which implementation method, relational or object-relational, is in use. In the relational model, you have to directly access the index tables. In the object-relational model, this is both unnecessary and not recommended.

    Table 1-1 SDOINDEX Table Using Fixed-Size Tiles

    All elements in a geometry are tessellated. In a multielement geometry like 1013, Element 1 is already covered by tile T2 from the tessellation of Element 0. If, however, the specified tiling resolution were such that tile T2 were further subdivided and one of these smaller tiles were completely contained in Element 1 then that tile would be excluded because it would not interact with the geometry.

    1.6.3 Hybrid Indexing

    Hybrid indexing is the preferred method for indexing the object-relational model. Hybrid indexing uses a combination of fixed- and variable-sized tiles for spatially indexing a layer. Variable-sized tile spatial indexing uses tiles of different sizes to approximate a geometry. For each geometry, you will have a set of fixed-size tiles that fully cover the geometry, and a set of variable-sized tiles that fully cover the geometry.

    In Figure Ł-8, the variable-sized cover tiles closely approximate each geometry. This results in good selectivity. The number of variable tiles needed to cover a geometry is controlled using the SDO_NUMTILES parameter.

    Figure 1-8 Variable-Sized Tile Spatial Indexing

    A variable tile is subdivided if it interacts with the geometry, and subdivision will not result in tiles that are smaller than a predetermined size. This size, or tiling resolution, is determined by a default SDO_MAXLEVEL parameter. A user may modify this parameter, but it is not recommended.

    Figure Ł-9 illustrates how geometry OBJ_1, represented using the object-relational implementation, is approximated with hybrid indexing (SDO_LEVEL = 1 and SDO_NUMTILES = 4). These are not recommended values for SDO_LEVEL and SDO_NUMTILES they were chosen to simplify this example. The cover tiles are stored in the SDOINDEX table as shown in Table Ł-2. Note that the tiles have been numbered for simplicity and do not reflect the format used in Spatial.

    Figure 1-9 Decomposition of the Geometry

    In Figure Ł-9, note which fixed-size tiles are associated with geometry OBJ_1. Only three (T0, T2, T3) of the four large tiles (T0, T1, T2, T3) generated by the tessellation actually interact with the geometry. Only those are stored in the SDOINDEX table. In examining which variable sized tiles are used, tile T0 shows a further tessellation to four smaller tiles, two of which (T02, T03) are used to cover a portion of the geometry. The variable-sized tiles are stored in the SDO_CODE column in the Spatial index table. The fixed-size tiles are stored in the SDO_GROUPCODE column. The spatial index structure is discussed in Section ł.4.

    Table 1-2 Section of the SDOINDEX Table

    As with the fixed-size tile model, all elements in a geometry are tessellated in one step. In a multielement geometry like OBJ_1, Element 1 is covered by a redundant tile from the tessellation of Element 0 but the tile, T2, is stored only once.

    The SDO_TUNE package has some functions that help determine appropriate SDO_LEVEL and SDO_NUMTILES values. Appendix A contains suggestions on when hybrid indexing may be beneficial, and how to select values for the two required parameters.

    1.7 Spatial Relations and Filtering

    Spatial uses filter methods to determine the spatial relationship between entities in the database. The spatial relation is based on geometry locations. The most common spatial relations are based on topology and distance. For example, the boundary of an area consists of a set of curves that separate the area from the rest of the coordinate space. The interior of an area consists of all points in the area that are not on its boundary. Given this, two areas are said to be adjacent if they share part of a boundary but no points in their interior. Next, the distance between two spatial objects is the minimum distance between any points in them. Two objects are said to be within a given distance of one another if their distance is less than the given distance.

    Spatial has two secondary filter methods. One method evaluates topological criteria and a second method determines if two spatial objects are within a Euclidean distance of each other. The secondary filter that evaluates topological criteria is called RELATE. The syntax is given in subsequent chapters that describe geometry functions and operators. RELATE implements a 9-intersection model for categorizing binary topological relations between points, lines, and polygons.

    Each spatial object has an interior, a boundary, and an exterior. The boundary consists of points or lines that separate the interior from the exterior. The boundary of a line consists of its end-points. The boundary of a polygon is the line that describes its perimeter. The interior consists of points that are in the object but not on its boundary and the exterior consists of those points that are not in the object.

    Given that an object A has three components -- a boundary Ab, an interior Ai, and an exterior Ae, any pair of objects will have nine possible interactions between their components. Pairs of components will have an empty (0), or a non-empty (1) set intersection. The set of interactions between two geometries is represented by a 9-intersection matrix that specifies which pairs of components intersect and which do not. Figure Ł-10 shows the 9-intersection matrix for two polygons that are adjacent to one another. This matrix yields the following bit mask, generated in row-major form: "101001111".

    Figure 1-10 The 9-Intersection Model

    Some of the topological relationships identified in the seminal work by Dr. Egenhofer 2 and colleagues have names associated with them. Spatial uses the following names:

      DISJOINT -- The boundaries and interiors do not intersect.

    The other secondary filter, WITHIN_DISTANCE, determines if two spatial objects, A and B, are within a Euclidean distance of one another. First it constructs a distance buffer, Db, around the reference object B. It then checks that A and Db are non-disjoint.The distance buffer of an object consists of all points within the given distance from that object. Figure Ł-11 shows the distance buffers for point, line, and area objects. Notice how the buffer is rounded near the corners of the objects.

    Figure 1-11 Distance Buffers for Points, Lines, and Polygons

    1.8 Partitioned Point Data

    Point data, unlike line and polygon data, has the unique characteristic of always using only one tile per point. There are cases where this difference can be exploited.

    Spatial has an enhanced spatial indexing mechanism capable of handling very large data sets consisting of complex geometries. For applications handling point data sets that are several tens of gigabytes or larger, further performance gains can be achieved by using Oracle8 i table partitioning features.

    Table partitioning is available only with the Partitioning Option of Oracle8 i Enterprise Edition. If the Partitioning Option is available to you, the preferred method is to use Oracle8 i table partitioning in conjunction with spatial indexing (using the relational model). See the Oracle8i Concepts guide for a description of Oracle8 i Partitioning. See Section A.2.6.3 for a description of a sample script that uses table partitioning with point data.

    A previous release of Spatial Data Option (from which the current Spatial product has evolved) utilized its own version of table partitioning instead of spatial indexing. Appendix C briefly describes the deprecated partitioning scheme for those customers with legacy point data sets. While this feature is still enabled in the current release, it may be removed in the future.

    1 Point data can also be stored in a partitioned table. See Appendix C, "Partitioning Legacy Point Data" for details.

    2 Dr. Max Egenhofer, University of Maine, Orono.