Daugiau

„Oracle Spatial“ pateikia skirtingus sankirtos rezultatus, kai SRID yra apibrėžta

„Oracle Spatial“ pateikia skirtingus sankirtos rezultatus, kai SRID yra apibrėžta


Turiu taškų rinkinį ir daugiakampių aibę, iš kurių atlieku sankirtą, kad nustatyčiau, kuriame daugiakampyje yra kiekvienas taškas. Tai buvo atlikta anksčiau, projekcija neapibrėžta nei metaduomenų lentelėje, nei pačiose geometrijos ypatybėse.

Apibrėžus prognozes, pateikiami kitokie rezultatai nei anksčiau. Kaip bebūtų keista, kai rodoma „SQLDeveloper“ ir „ArcGIS“, akivaizdu, kad ankstesni rezultatai buvo teisingi. Išmesdamas projekcijos apibrėžimą, gaunu teisingą atsakymą. Aš bandžiau su skirtingomis projekcijų apibrėžtimis, visi duomenys yra NAD 1983 geodezinių koordinačių sistemoje.

Atrodo, kad „Oracle“ daro kažką daugiau, nei patikrina, ar projekcijos apibrėžimai sutampa. Kas nors žino, ką tai galėtų padaryti?

Susikirtimas buvo atliktas naudojant: sdo_geom.relate, SDO_TOUCH ir tt, visi grąžindami tą patį rezultatą. Be to, kai matuoju atstumą, atstumai yra atvirkštiniai, o atstumas yra nulis iki daugiakampio, kuriame jis nėra.

Aš bandžiau: - atstatyti indeksus - patikrinti geometrijos teisingumą - pakeisti projekcijos apibrėžtis

Žemiau yra situacija, atsižvelgiant į tašką su projekcijos apibrėžimu, aš gaunu vertę 03 ir 02 be. Akivaizdu, kad 02 yra teisingas, o 03 - ne.

Man atrodo, kad šios operacijos metu neatliekami jokie pakeitimai, o vertės iš pradžių yra toje pačioje koordinačių atskaitos sistemoje.

Idėjos?

Štai pavyzdys, kuriame nerasta ryšio:

SELECT sdo_geom.relate (t1.shape, 'nustatyti', mdsys.SDO_GEOMETRY (2001, 4269, mdsys.SDO_point_type (-163.14667,56.17, NULL), NULL, NULL), 0.005) NUO (pasirinkite MDSYS.SDO_GEOMETRY (2003) , NULL, MDSYS.SDO_ELEM_INFO_ARRAY (1,1003,1), MDSYS.SDO_ORDINATE_ARRAY (-162,56.1666999980807, -162,57, -164,57, -164,56.1666999980807, -162,56.16669999807)

Tas pats su apibrėžtu SRID ir nustatytas ryšys:

SELECT sdo_geom.relate (t1.shape, 'nustatyti', mdsys.SDO_GEOMETRY (2001,-taškų duomenys null, mdsys.SDO_point_type (-163.14667,56.17, NULL), NULL, NULL), 0.005) FROM (pasirinkite MDSYS.SDO_GEOMETR (2003, null, NULL, MDSYS.SDO_ELEM_INFO_ARRAY (1,1003,1), MDSYS.SDO_ORDINATE_ARRAY (-162,56.1666999980807, -162,57, -164,57, -164,56.1666999980807, -162,580.1699) dvigubas) t1;

Skirtumas tikriausiai yra dėl to, kad skiriasi geodeziniai ir dekartiniai skaičiavimai.

Kai jūsų geometrijoje nenurodytas SRID, skaičiavimas atliekamas paprastu dekartu.

Kai (teisingai) nurodote, kad geometrija yra geodezinėje koordinačių sistemoje, visos jūsų figūrų linijos yra dideli apskritimai. Visų pirma tai, kas atrodo kaip paprasta „horizontali“ linija jūsų paveiksle, iš tikrųjų eina toliau į šiaurę: ji atitinka ne paralelę, o didelį apskritimą. Jei jūsų taškas yra arti tos linijos, gausite skirtingus rezultatus.


6.9 Vartotojo apibrėžtos koordinačių sistemos sukūrimas

Jei „Oracle“ teikiamų koordinačių sistemų nepakanka jūsų poreikiams, galite sukurti vartotojo apibrėžtas koordinačių atskaitos sistemas.

Kaip minėta koordinačių sistemoje (erdvinė atskaitos sistema), terminai koordinačių sistema ir koordinačių atskaitos sistema (KRS) dažnai naudojami pakaitomis, nors koordinačių atskaitos sistemos turi būti pagrįstos žeme.

Tikslūs vartotojo nustatyto KRS kūrimo veiksmai priklauso nuo to, ar jis yra geodezinis, ar projektuojamas. Abiem atvejais pateikite informaciją apie koordinačių sistemą (koordinačių ašys, ašių pavadinimai, matavimo vienetas ir pan.). Jei naudojate geodezinį KRS, pateikite informaciją apie atskaitos tašką (elipsę, pagrindinį dienovidinį ir pan.), Kaip paaiškinta skyriuje „Geodezinio KRS kūrimas“. Jei numatomas KRS, pateikite informaciją apie šaltinį (geodezinį) KRS ir projekciją (veikimą ir parametrus), kaip paaiškinta skyriuje „Suprojektuoto KRS kūrimas“.

Bet kurios vartotojo apibrėžtos koordinačių sistemos SRID vertė turėtų būti 1000000 (1 mln.) Arba didesnė.


„Oracle“ erdvinių duomenų saugyklos apžvalga

„Oracle Spatial“ pateikia erdvinės geometrijos tipą (MDSYS.SDO_GEOMETRY), erdvinių metaduomenų schemą, indeksavimo metodus, funkcijas ir įgyvendinimo taisykles, kurios aprašytos toliau.

„Oracle Locator“ yra „Oracle Spatial“ pogrupis. „Oracle Locator“ apima SDO_GEOMETRY duomenų tipą ir kai kurias „Oracle Spatial“ teikiamas funkcijas. „Oracle Locator“ galima naudoti su „ArcSDE“. Norėdami sužinoti skirtumą tarp „Oracle Spatial“ ir „Oracle Locator“, skaitykite „Oracle“ dokumentacijoje. Visoje šioje temoje vietoj nuorodų į „Oracle Spatial“ galima naudoti „Oracle Locator“.

„Oracle“ erdvinės geometrijos tipas SDO_GEOMETRY įgyvendinamas naudojant išplėstinę „Oracle“ objektų santykių tipo sistemą. Tipas SDO_GEOMETRY saugo informaciją apie geometriją, įskaitant jos geometrijos tipą, erdvinės nuorodos ID, interpoliacijos tipą (tiesus ir išlenktas) ir koordinačių reikšmes. „ArcSDE“ geografinėse duomenų bazėse esantis SDO_GEOMETRY tipas palaiko vieno ir kelių dalių taškų, linijų ir plotų geometriją. Geometrijas galima apibūdinti kaip turinčias tiesinę interpoliaciją tarp koordinačių, kaip apibrėžta „OpenGIS“ paprastų funkcijų specifikacijoje. Geometrija taip pat gali būti sudaryta iš apskritimo kreivių arba abiejų interpoliacijos metodų derinio. Taikomosios programos yra atsakingos už tinkamą SDO_GEOMETRY tipo turinio įterpimą, atnaujinimą ir gavimą naudojant „Oracle“ objektų santykių SQL sąsają. Programos taip pat yra atsakingos už tai, kad kiekvienos geometrijos turinys atitiktų „Oracle Spatial“ dokumentuose nustatytas taisykles. „Oracle“ teikia geometrijos patvirtinimo procedūras, kurias galima atlikti įterpus geometriją. Be to, pradedant „Oracle 11.1.0.7“, geometrija patvirtinama indeksų intarpuose.

„Oracle“ geometrijos patvirtinimo tvarka neįgyvendina tiksliai tų pačių taisyklių, kaip „ArcSDE“ geometrijos patvirtinimas. Tačiau „ArcSDE“ skirta rašyti SDO_GEOMETRY, atitinkančią „Oracle“ patvirtinimo taisykles.

Informacija apie kiekvieną stulpelį SDO_GEOMETRY turėtų būti įrašyta į „Oracle Spatial“ metaduomenų schemą, nors „Oracle Spatial“ to nedaro automatiškai. („Oracle Spatial“ metaduomenų schema rodoma kiekvienoje schemoje kaip rodinys USER_SDO_GEOM_METADATA.) Programinė įranga, kurianti SDO_GEOMETRY stulpelius, turi įterpti tų stulpelių metaduomenis. „ArcSDE“ tai daro visoms sukurtoms SDO_GEOMETRY funkcijų klasėms. Metaduomenyse yra erdvinio stulpelio pavadinimas, lentelės, kurioje ji yra, pavadinimas ir jos savininkas, „Oracle Spatial Reference Identifier“ (SRID), matmenų skaičius, kiekvieno matmens diapazonas ir jo koordinačių nuokrypis.

Erdviniai indeksai suteikia greitą prieigą prie funkcijų, atsižvelgiant į jų geometrijos vietą. SDO_GEOMETRY atveju R medžio erdviniai indeksai paprastai yra efektyviausi ir lengviausiai kuriami, o „Oracle“ rekomenduoja juos naudoti daugeliu atvejų. „Oracle Spatial“ teikia „Spatial Index Advisor“ įrankį, padedantį nustatyti geriausią tam tikros lentelės erdvinio indekso tipą. Be to, išsamios informacijos apie palaikomus erdvinių indeksų tipus, kaip juos sukurti ir įvairių erdvinio indekso metodų kompromisus rasite „Oracle Spatial“ vartotojo vadove ir žinyne.


„Oracle“ erdvinių duomenų saugyklos apžvalga

„Oracle Spatial“ pateikia erdvinės geometrijos tipą (MDSYS.SDO_GEOMETRY), erdvinių metaduomenų schemą, indeksavimo metodus, funkcijas ir įgyvendinimo taisykles, kurios aprašytos toliau.

„Oracle Locator“ yra „Oracle Spatial“ pogrupis. „Oracle Locator“ apima SDO_GEOMETRY duomenų tipą ir kai kurias funkcijas, teikiamas su „Oracle Spatial“. „Oracle Locator“ galima naudoti su „ArcGIS“. Norėdami sužinoti skirtumą tarp „Oracle Spatial“ ir „Oracle Locator“, skaitykite „Oracle“ dokumentacijoje. Visoje šioje temoje vietoj nuorodų į „Oracle Spatial“ galima naudoti „Oracle Locator“.

„Oracle“ erdvinės geometrijos tipas SDO_GEOMETRY įgyvendinamas naudojant išplėstinę „Oracle“ objektų santykių tipo sistemą. Tipas SDO_GEOMETRY saugo informaciją apie geometriją, įskaitant jos geometrijos tipą, erdvinės nuorodos ID, interpoliacijos tipą (tiesus ir išlenktas) ir koordinačių reikšmes. Įmonės geografinių duomenų bazių tipas SDO_GEOMETRY palaiko vieno ir kelių dalių taškų, linijų ir plotų geometriją. Geometrijas galima apibūdinti kaip turinčias tiesinę interpoliaciją tarp koordinačių, kaip apibrėžta „OpenGIS“ paprastų funkcijų specifikacijoje. Geometrija taip pat gali būti sudaryta iš apskritimo kreivių arba abiejų interpoliacijos metodų derinio. Taikomosios programos yra atsakingos už tinkamą SDO_GEOMETRY tipo turinio įterpimą, atnaujinimą ir gavimą naudojant „Oracle“ objektų santykių SQL sąsają. Programos taip pat yra atsakingos už tai, kad kiekvienos geometrijos turinys atitiktų „Oracle Spatial“ dokumentuose nustatytas taisykles. „Oracle“ teikia geometrijos patvirtinimo procedūras, kurias galima atlikti įterpus geometriją. Be to, pradedant „Oracle 11.1.0.7“, geometrija patvirtinama indeksų intarpuose.

„Oracle“ geometrijos patvirtinimo tvarka neįgyvendina tiksliai tų pačių taisyklių, kaip „ArcGIS“ geometrijos patvirtinimas. Tačiau „ArcGIS“ skirta rašyti SDO_GEOMETRY, atitinkančią „Oracle“ patvirtinimo taisykles.

Informacija apie kiekvieną stulpelį SDO_GEOMETRY turėtų būti įrašyta į „Oracle Spatial“ metaduomenų schemą, nors „Oracle Spatial“ to nedaro automatiškai. („Oracle Spatial“ metaduomenų schema rodoma kiekvienoje schemoje kaip rodinys USER_SDO_GEOM_METADATA.) Programinė įranga, kurianti SDO_GEOMETRY stulpelius, turi įterpti tų stulpelių metaduomenis. „ArcGIS“ tai daro visoms sukurtoms SDO_GEOMETRY funkcijų klasėms. Metaduomenyse yra erdvinio stulpelio pavadinimas, lentelės, kurioje ji yra, pavadinimas ir jos savininkas, „Oracle Spatial Reference Identifier“ (SRID), matmenų skaičius, kiekvieno matmens diapazonas ir jo koordinačių nuokrypis.

Erdviniai indeksai suteikia greitą prieigą prie funkcijų, atsižvelgiant į jų geometrijos vietą. SDO_GEOMETRY atveju R medžio erdviniai indeksai paprastai yra efektyviausi ir lengviausiai kuriami, o „Oracle“ rekomenduoja juos naudoti daugeliu atvejų. „Oracle Spatial“ teikia „Spatial Index Advisor“ įrankį, padedantį nustatyti geriausią tam tikros lentelės erdvinio indekso tipą. Be to, išsamios informacijos apie palaikomus erdvinių indeksų tipus, kaip juos sukurti ir įvairių erdvinio indekso metodų kompromisus rasite „Oracle Spatial“ vartotojo vadove ir žinyne.


Kaip įkelti „Oracle“ SDO_GEOMETRY duomenis - WKB ir SRID

Norėdami įkelti WKB ir SRID duomenis iš „Oracle“ stulpelio SDO_GEOMETRY, turime pasirinkti duomenis dviejuose atskiruose stulpeliuose.

Mūsų pavyzdyje turime lentelę pavadinimu GEOTABLE su dviem stulpeliais: „ID“ int - kuris yra mūsų pagrindinis raktas, ir „GEO“ SDO_GEOMETRY.

Norėdami iš GEO stulpelio pasirinkti ID, taip pat WKB ir SRID duomenis, „Oracle“ galime įvesti šią užklausą:

Atkreipkite dėmesį į lentelės slapyvardį „t“. Norėdami pasiekti ypatybę SDO_SRID, turime turėti „Oracle“ nurodytą lentelės slapyvardį.

Štai užklausos rezultatas:

Pirmoje eilutėje naudojamas SRID 4326, kuris yra Pasaulio geodezinė sistema (WGS84), o antroje eilėje naudojamas SRID 4283, kuris yra Australijos geocentrinis atskaitos taškas (GDA94). Galimos daug kitų vertybių, priklausomai nuo geografinės padėties, pvz. SRID 25832 reiškia Europos sausumos atskaitos sistemos (ETRS89) UTM 32N zoną, plačiai naudojamą Danijos ir Vokietijos žemėlapiuose.


Sąveikos svarstymai

Dažna klaidinga nuomonė yra ta, kad programos gali sąveikauti vien todėl, kad palaiko tą patį pagrindinį geometrijos tipą. Tačiau geometrijos tipas yra tik vienas geografinės duomenų bazės ir kitų GIS duomenų bazių schemų aspektas. Taip pat reikalingas bendras taisyklių, apribojimų, schemos ir įgyvendinimo supratimas. Kai kurie dalykai, į kuriuos turėtumėte atsižvelgti naudodami „Oracle Spatial“ su „ArcSDE“ ir „ArcSDE“ klientais, yra šie:

„ArcSDE“ ir „ArcGIS“ nepalaiko kelių geometrijos stulpelių lentelėje.

Lentelės, kuriose yra keli SDO_GEOMETRY stulpeliai, turėtų būti pasiekiamos peržiūrose, kuriose yra tik vienas SDO_GEOMETRY stulpelis.

Jei norite naudoti duomenis „Oracle Spatial“ lentelėje, kurioje yra keli erdviniai stulpeliai, sukurkite erdvinį vaizdą naudodami SQL. Šiame rodinyje turėtų būti tik vienas erdvinis stulpelis. Tada užregistruokite erdvinį vaizdą naudodami „ArcSDE“ naudodami sdelayer –o registrą.

Norėdami sužinoti, kaip sukurti ir užregistruoti rodinį, kuriame yra tik vienas stulpelis SDO_GEOMETRY, žr. Žinių bazės straipsnyje „Oracle“ erdvinio sluoksnio (kuriame yra keli geometrijos stulpeliai) „Oracle“ rodinio sukūrimas ir registravimas „ArcSDE“.

„ArcSDE“ ir „ArcGIS“ palaiko tik vieną geometrijos tipą stulpelyje SDO_GEOMETRY.

Jei viename lentelės stulpelyje SDO_GEOMETRY yra keli geometrijos tipai (pvz., Kai kurie įrašai yra taškai, o kai kurie - daugiakampiai), lentelės negalima užregistruoti naudojant „ArcSDE“ arba geografinėje duomenų bazėje savybių klasė turi būti užregistruota kaip turinti vieną geometrijos tipą.

„Oracle Spatial“ nebūtinai taiko geometrijos tipo apribojimus stulpelyje SDO_GEOMETRY. Be šio vykdymo viena programa gali norėti taikyti vieną geometrijos tipo apribojimą, tačiau kita programa gali įterpti skirtingus geometrijos tipus. Pradedant nuo Oracle9i, jūs turite galimybę apriboti įterpimo geometrijos tipą į lentelę su erdvinio indekso kūrimo parametru. Ankstesnėse „Oracle“ versijose dar viena geometrijos tipo apribojimų vykdymo galimybė yra sukurti įterpimo atnaujinimo aktyviklį, kuris patikrina ypatybę SDO_GEOMETRY GTYPE, kad būtų galima taikyti geometrijos tipus.

„Oracle Spatial“ automatiškai neįpareigoja geometrijos patvirtinimo įterpiant ar atnaujinant SDO_GEOMETRY reikšmę.

ArcSDE patvirtina geometriją įterpiant ar atnaujinant geometriją. Tačiau pati „Oracle Spatial“ automatiškai neįpareigoja geometrijos patvirtinimo įterpiant ar atnaujinant SDO_GEOMETRY reikšmę, jei įterpiate ar atnaujinate geometriją naudodami ne „ArcSDE“ kliento, o kitų metodų, pvz., SQL.

Problemos kiltų, jei „ArcSDE“ kliento programoms būtų perduotos neteisėtos ar prastai suformuotos geometrijos vertės. Norėdami sumažinti šių galimų problemų atsiradimą, turėtumėte patvirtinti bet kokią geometriją, sukurtą ar pakeistą bet kuriuo kitu būdu, išskyrus „ArcSDE“ kliento programą.

PASTABA: pradedant „ArcSDE 9.1“, „ArcSDE“ nebegalioja SDO_GEOMETRY funkcijų, kai jos yra paimtos iš duomenų bazės. Šis pakeitimas buvo atliktas siekiant pagerinti nuskaitymo našumą.

Yra du geometrijos patvirtinimo įrankiai. „Oracle“ VALIDATE_GEOMETRY_WITH_CONTEXT patikrins geometriją naudodamas „Oracle“ formos patvirtinimo taisykles, o „sdelayer“ ir#8211o feature_info patikrins jas naudodamasi „ArcSDE“ taisyklėmis. Operacija „feature_info“ pasirinktinai į išvesties informaciją įtraukia informaciją apie tai, ar formos geometrija galioja „ArcSDE“. Išsamesnės informacijos apie šios operacijos naudojimą rasite administravimo komandų informacinėje dokumentacijoje, pridedamoje prie „ArcSDE“ diegimo.

„ArcSDE“ geometrijos patvirtinimas nėra tas pats, kas „Oracle Spatial“ geometrijos patvirtinimas. Nors svarbu, kad geometrija išlaikytų „Oracle Spatial“ patvirtinimą, sėkmingas geometrijos patvirtinimas naudojant „Oracle“ patvirtinimo procedūras negarantuoja, kad geometrija bus patvirtinta „ArcSDE“.

Galite sukurti įterpimo atnaujinimo aktyviklį, kad būtų paleista funkcija SDO_VALIDATE, kad būtų užtikrintas SDO_GEOMETRY tipų patvirtinimas.

„ArcSDE C“ API gali būti naudojama programai, kuri nuskaito funkcijas, parašyti, net jei jos nepavyksta patvirtinti „ArcSDE“ formos. Tačiau tada kliento programa turi nustatyti geometrijos tinkamumą arba kaip ją ištaisyti.

„ArcSDE“ nepalaiko nevienalyčių geometrijos rinkinių SDO_GEOMETRY objekte.

Dauguma programų, skaitančių SDO_GEOMETRY objektus, nežino, kaip interpretuoti kitų programų sukurtus SDO_ETYPE 0 duomenis.

„Oracle Spatial“ leidžia programoms įterpti konkrečios programos duomenis į SDO_GEOMETRY objektą. Programos tai daro įterpdamos savo duomenis naudodami SDO_ETYPE reikšmę 0. Tai leidžia programoms labai lanksčiai saugoti daugelio tipų netradicinę geometriją ir kitus duomenis. Tačiau konkrečios programos duomenų reikšmė žinoma tik programai, kuri sukūrė tą specialų SDO_GEOMETRY objektą. Tokie konkrečios programos duomenys negali būti patikimai palaikomi sąveikioje aplinkoje. Programos, skaitančios SDO_GEOMETRY objektus, tikriausiai nežino, kaip interpretuoti kitų programų sukurtus SDO_ETYPE 0 duomenis. Programos, atnaujinančios SDO_GEOMETRY objektus, nežino, kaip redaguoti ar išsaugoti SDO_ETYPE 0 duomenis.

Skaitydamas SDO_GEOMETRY objektus, kuriuose yra SDO_ETYPE 0 elementų, „ArcSDE“ nepaisys SDO_ETYPE 0 duomenų ir perduos programai tik tuos paprastus funkcijų geometrijos elementus, kuriuos ji palaiko.

Atnaujinant SDO_GEOMETRY objektus, kuriuose yra SDO_ETYPE 0 elementų, „ArcSDE“ neišsaugos SDO_ETYPE 0 duomenų. Todėl programos, kurios turi užtikrinti SDO_ETYPE 0 duomenų išsaugojimą, turėtų įsitikinti, kad vartotojai neturi UPDATE prieigos prie lentelės.

„ArcSDE“ reikalauja, kad visos stulpelio SDO_GEOMETRY vertės būtų toje pačioje koordinačių atskaitos sistemoje.

Jei koordinačių nuoroda neapibrėžta, SRID reikšmė turėtų būti NULL, kaip apibrėžta „Oracle Spatial User's Guide and Reference“.

Prieš „Oracle 9“aš, Įterpiant ar atnaujinant SDO_GEOMETRY reikšmę „Oracle Spatial“ automatiškai nesiima erdvinės nuorodos ID patvirtinimo. Jei norite, kad šiuose senesniuose „Oracle“ egzemplioriuose būtų patvirtintas SDO_GEOMETRY tipas, galite sukurti įterpimo atnaujinimo aktyviklį, kad būtų paleista funkcija SDO_VALIDATE. Pradedant nuo „Oracle9i“, „Oracle Spatial“ reikalauja, kad kiekvienos geometrijos SRID atitiktų vienas kitą ir SRID erdviniuose metaduomenyse, net jei jie yra NULL.

„Oracle Spatial“ ir „ArcSDE“ daro prielaidą, kad pirmasis ir antrasis SDO_GEOMETRY matmenys yra atitinkamai x ir y.

Jei SDO_GEOMETRY objektas turi tris matmenis, „ArcSDE“ daro prielaidą, kad trečiasis matmuo yra matas, jei matmens pavadinimas (erdviniuose metaduomenyse) prasideda raide M, o trečiasis matmuo laikomas pakilimu. Galite valdyti, kaip „ArcSDE“ interpretuoja trečiąjį aspektą, nustatydami funkcijų klasės objekto vėliavėlę su pakilimais arba matavimais.

„Oracle“ 9i 2 leidimas išplėtė SDO_GEOMETRY tipo SDO_GTYPE narį, kad būtų galima koduoti bet kurį matmenį, kuriame yra matavimo ordinacija. Antrasis keturių skaitmenų SDO_GTYPE skaitmuo gali būti 0, 3 arba 4. Jei jis yra 3 arba 4, tai rodo, kuriame matmenyje yra matavimo ordinacija. „ArcSDE 9.0“ ir naujesnės versijos atpažįsta šį kodavimą. Priešingu atveju, jei SDO_GEOMETRY objektas turi keturis matmenis, matas turėtų būti paskutinis ordinatas.

Šiame pavyzdyje „sdelayer“ nustato funkcijų klasės objekto tipą, kad būtų saugomi linijos ir pakilimai:

Šiame pavyzdyje „sdelayer“ nustato funkcijų klasės objekto tipą, kad būtų saugomi linijos ir matmenys:

„Oracle Spatial“ (bet ne „Oracle Locator“) teikia funkcijas linijinės atskaitos sistemos (LRS) skaičiavimams, naudojant matavimo vertes.

„Oracle Spatial LRS“ funkcijos reikalauja, kad visos geometrijos matavimo vertės būtų monotoniškai didėjančios arba mažėjančios be NaN reikšmių. „Oracle Spatial LRS“ taip pat apriboja matavimo vertes tik su linijomis.

„ArcSDE“ leidžia matuoti ir apskaičiuoti visus geometrinius tipus, palaikant savavališkai išdėstytas matavimo ir NaN reikšmes.

Jei ketinate naudoti „Oracle Spatial LRS“ funkcijas, būtinai suprojektuokite savo programą ir duomenų bazę, kad ji veiktų pagal „Oracle Spatial LRS“ apribojimus.

Norint atlikti erdvines užklausas, žurnalo failų užklausas, vienos eilutės operacijas ir daugiafunkcines duomenų bazės operacijas, „ArcSDE“ erdvinėje lentelėje reikalingas unikalus funkcijų identifikatorius.

Naudojant „ArcSDE“ suspaustą dvejetainę schemą, geometrijos stulpelis gali būti naudojamas šiam tikslui, nes jis yra svetimas raktas į funkcijų lentelę ir yra apibrėžtas kaip ne NULL, unikali sveikojo skaičiaus vertė. SDO_GEOMETRY neapima unikalios identifikavimo vertės, todėl kai „ArcSDE“ prie esamos lentelės prideda stulpelį SDO_GEOMETRY, ji taip pat gali pridėti unikalų identifikavimo stulpelį. Toks stulpelis vadinamas registruotos eilutės ID stulpeliu. Šis stulpelis dažnai vadinamas OBJECTID, tačiau jis gali turėti ir kitą pavadinimą. Arba esamas stulpelis gali būti naudojamas registruotam eilutės ID stulpeliui, jei jis indeksuojamas ir yra sveikasis skaičius, UNIKALUS ir NE NULL. „ArcSDE“ prižiūrimi registruoti eilutės ID stulpeliai turi būti NUMBER (38) UNIQUE NOT NULL.

Registruotą eilutės ID stulpelį galima pridėti naudojant komandą sdetable Administration arba „ArcCatalog“ programą. Daugeliui programų, pvz., „ArcGIS“, kiekvienoje lentelėje ar funkcijų klasėje reikalingas registruotas eilutės ID stulpelis. Kiekviena programa turi savo reikalavimus ir apribojimus.

SQL prieigai prie daugialypės terpės duomenų bazės yra įvairių versijų rodiniai.

„ArcGIS“ redagavimo operacijoms naudoja daugialypę duomenų bazę, įdiegtą per „ArcSDE“. Daugiafunkcinė duomenų bazė leidžia ilgai palaikyti kelias operacijas vienu metu.

SQL prieigai prie daugialypės terpės duomenų bazės yra įvairių versijų rodiniai, įskaitant „Oracle Spatial“ lenteles, užregistruotas kaip versijos. Daugiau informacijos rasite skyriuje Duomenų bazės rodinių naudojimas.

Tinkluose ar topologijose dalyvaujančių „Oracle“ erdvinių funkcijų klasių keitimas turėtų būti taikomas tik „ArcGIS“ programoms.

„ArcGIS“ gali kurti ir prižiūrėti tinklus ir integruotas topologinių savybių klases iš paprastų funkcijų klasių, naudojančių tipą SDO_GEOMETRY. „ArcGIS“ tvarko ryšius ir palaiko duomenų topologinį vientisumą, o šių funkcijų modifikacijos per „ArcGIS“ atsispindi šiuose integruotuose tinkluose.

Šiuose tinkluose ar topologijose dalyvaujančių „Oracle“ erdvinių funkcijų klasių keitimas turėtų būti taikomas tik „ArcGIS“ programoms. Kitos programos gali laisvai skaityti duomenis, tačiau bet kokie jų atlikti pakeitimai neatsispindi tinkluose ar topologijose.

„Oracle“ erdvinių funkcijų klasių, dalyvaujančių santykiuose ir apribojimuose, modifikavimas turėtų būti taikomas tik „ArcGIS“ programoms.

„ArcGIS“ užtikrina ryšius ir apribojimus įvairiuose duomenų šaltiniuose. Funkcijų klasės, kuriose yra SDO_GEOMETRY tipo, gali būti įtrauktos į ryšius ir jose gali būti nustatyti apribojimai.

„Oracle“ erdvinių funkcijų klasių, dalyvaujančių santykiuose ir apribojimuose, modifikavimas turėtų būti taikomas tik „ArcGIS“ programoms. Kitos programos gali laisvai skaityti duomenis, tačiau jų redagavimas netinkamai tvarkomas.


Rastriniai duomenų tipai

Galite naudoti BLOB, Long Raw, ST_Raster arba SDO_GeoRaster rastrinių duomenų rinkinių, rastrinių katalogų ar mozaikos duomenų rinkinių stulpeliams.

Informacijos apie „Oracle“ BLOB rasite šios temos skyriuje BLOB.

„Oracle“ nebenaudoja „Long Raw“ duomenų tipo, todėl turėtumėte vengti naudoti šį tipą, kai jis nebepalaikomas. Nors „Long Raw“ vis dar veikia, geriausia jo nenaudoti. Galiausiai turėsite perkelti jį į kitą saugojimo tipą, jei naudojate „Long Raw“.

Kiti du poskyriai apibūdina likusius rastrinių duomenų tipus.

ST_Rasteris

„ST_Raster“ yra vartotojo apibrėžtas duomenų tipas, kurį galite įdiegti įmonės geografinėse duomenų bazėse, kad suteiktumėte SQL prieigą prie rastrinių duomenų.

Norėdami naudoti ST_Raster, turite jį sukonfigūruoti duomenų bazėje. Žr. „ST_Raster“ diegimas „Oracle“.

Išsamesnės informacijos apie tai, kaip apibrėžiamas objekto tipas ST_Raster, žr. Duomenų tipas ST_Raster.

SDO_GeoRaster

„Oracle Spatial“ rastro duomenų tipas SDO_GeoRaster įgyvendinamas naudojant „Oracle“ išplečiamąją objekto santykių tipo sistemą. Tipas SDO_GeoRaster saugo informaciją apie rastrą, įskaitant jo pikselių tipą, erdvinės nuorodos ID ir pikselių vertes.

SDO_GeoRaster tipas palaiko visus Esri pikselių tipus: nuo 1 iki 64 bitų, pasirašytas, nepasirašytas ir slankiojo kablelio. „ArcGIS“ palaiko „Oracle Spatial“ SDO_GeoRaster duomenų tipą kaip parinktį saugoti rastrinius duomenis.

Programų programos yra atsakingos už tinkamą SDO_GeoRaster tipo turinio įterpimą, atnaujinimą ir gavimą naudojant „Oracle“ objektų santykių struktūrinės užklausos kalbos (SQL) sąsają. Programos taip pat yra atsakingos už tai, kad kiekvieno rastro turinys atitiktų „Oracle“ dokumentuose nustatytas taisykles.

Sukūrus lentelę su Oracle SDO_GeoRaster stulpeliu, ArcGIS užpildo reikiamą Oracle metaduomenų schemą. Tokios programos, kaip „ArcGIS“, yra atsakingos už šią užduotį, nes „Oracle“ jos neatlieka automatiškai. Jei užregistruosite lentelę, kurioje yra stulpelis „Oracle SDO_GEORASTER“, kurį sukūrė trečiosios šalies produktas, tas produktas yra atsakingas už tinkamą „Oracle“ metaduomenų schemos užpildymą stulpelyje SDO_GeoRaster.

Žinomos SDO_GeoRaster naudojimo su geografine baze ribos

Toliau pateikiamas apribojimų sąrašas, į kurį reikia atsižvelgti, kai įmonės geografinėje duomenų bazėje saugote rastrinius duomenis kaip SDO_GeoRaster.

  • „Oracle“ nepalaiko dalinių SDO_GeoRaster atnaujinimų. Todėl neįmanoma mozaikuoti vaizdo failų į esamą rastro duomenų rinkinį, kuris saugomas kaip SDO_GeoRaster.
  • Įvedant duomenis piramidės negali būti sukonstruotos. Įdėjus vaizdo duomenis į SDO_GeoRaster, piramidės konstravimui reikalingas atskiras atnaujinimo žingsnis. Dėl šios priežasties visada turėtumėte panaikinti žymės langelį „Sukurti piramidę“ bet kurio „ArcGIS“ geografinio apdorojimo įrankio, kuris sukuria rastrų duomenų rinkinius ar rastro katalogus, dialogo lange.
  • Vaizdo duomenų šiuo metu negalima saugoti suspausto formato SDO_GeoRaster, jei naudojate „Oracle 10“g 1 leidimas (R1). „Oracle“ pridėjo vaizdo glaudinimą prie „Oracle 10“ tipo SDO_GeoRasterg 2 leidimas (R2). Jei naudojate „Oracle 10“g R1, visuose „ArcGIS“ geografinio apdorojimo įrankių dialogo lange visuomet nustatykite suspaudimo tipą „NONE“, kai juos naudojate kurdami rastro duomenų rinkinius ar rastro katalogus.
  • Negalite naudoti SDO_GeoRaster saugyklos „Oracle 11“g R2 duomenų bazė dėl „Oracle“ klaidos 12537431. Jei norite naudoti SDO_GeoRaster saugyklą, naudokite „Oracle 11“g R1 arba naujesnė versija.
  • „Oracle“ diegia SDO_GeoRaster kaip juostos integruotą architektūrą. Todėl neįmanoma pridėti ir ištrinti atskirų rastro duomenų rinkinio juostų.
  • „ArcGIS“ nepalaiko kelių rastrinių stulpelių lentelėje. Lentelės su keliais SDO_GeoRaster stulpeliais turėtų būti pasiekiamos peržiūromis, kuriose yra tik vienas SDO_GeoRaster stulpelis. Sukurkite lentelės vaizdą ir į rodinio apibrėžimą įtraukite tik vieną stulpelį SDO_GeoRaster.
  • Naudojant SDO_GeoRaster saugyklą geografinėje duomenų bazėje, „nodata“ bitų kaukė nepalaikoma. Todėl neįmanoma sukurti piramidės pagal nonsquare kvadratinius duomenis.

Kaip patikrinti mano stalo SRID - ORACLE

„Littlefoot“ atsakymas yra teisingas, tačiau jis parodys tik vienos eilutės SRID. Nėra garantijos, kad visose eilutėse yra tas pats SRID (tai privalote užtikrinti).
Taigi, atsisakyčiau sąlygos „kur rownum = 1“ ir naudočiau grupę pagal:

Jei toje lentelėje yra stulpelis, kurio duomenų tipas yra SDO_GEOMETRY:

Atkreipkite dėmesį į stalo slapyvardį, jis neveiks be jo:


Grąžinti platus, ilgas su SQL užklausa („Oracle“)

pateikė BlakeTerhune

Mūsų „Oracle 11g SDE“ (10.0) yra taškų funkcijų klasė su ST_Geometry tipo formos lauku. Jame taip pat yra šiaurės ir rytų laukas, kurį užpildo GPS darbuotojai. Turiu sugebėti gauti GCS_WGS_1984 (SRID 0) platumą ir ilgumą (dešimtainiai laipsniai) iš taškų, esančių NAD_1983_HARN_StatePlane_Arizona_Central_FIPS_0202 (SRID 48). Aš tikiu, kad yra būdas tai padaryti naudojant „ST_Transform“ ir (arba) „ST_AsText“, bet man nepavyko išsiaiškinti, kad „ST_AsText“ visada pateikiamas kaip tik („DIDELIS CLOB“). Kokia yra tinkama „Oracle SQL“ sintaksė norint tai gauti?

pateikė BlakeTerhune

Doh! Taip, ST_X ir ST_Y veikia.

Pažiūrėsiu, kaip pataisyti mūsų sujaudintą erdvinių nuorodų lentelę. Ačiū Joshua!

pateikė BlakeTerhune

Po darbo su Esri palaikymo tarnyba (ačiū Jing!) Turiu daugiau informacijos.

  1. Pavyzdžiui, norimas SRID yra 4152, galite paleisti „select *“ iš ST_COORDINATE_SYSTEMS, kur yra „Oracle“. Grąžinto tipo laukas yra geografinis, taigi, kai pasirinksime mūsų naujos funkcijos klasės koordinačių sistemą, pereisite prie geografinių koordinačių sistemų. Aprašymas Colum suteiks mums informacijos, kur rasti šią koordinačių sistemą.
  2. „ArcCatalog“ dešiniuoju pelės mygtuku spustelėkite duomenų bazės ryšį & gt Nauja & gt Funkcijų klasė & gt Pateikite pavadinimą, tada spustelėkite Pirmyn & gt Išplėsti geografinių koordinačių sistemas, Tada Šiaurės Amerika, pasirinkite NAD 1983 HARN, tada spustelėkite Pirmyn & gt Kitas & gt Pasirinkite numatytąjį kaip konfigūracijos raktinį žodį, spustelėkite Kitas ir baigti
  3. Patikrinkite ST_SPATIAL_REFERENCE lentelę, ten pamatysite naują įrašą.
  4. Nesivaržykite ištrinti funkcijų klasės. Ištrynus funkcijų klasę, įrašas ST_SPATIAL_REFERENCE lentelėje nebus ištrintas

Tai veikė naudojant „ArcSDE 10.0“, bet nieko kito neišbandžiau. Aš darau prielaidą, kad peržiūrėjęs dokumentus, jis veikia taip pat. Svarbus dalykas, kurį reikia atsiminti, yra tai, kad SRID yra tik savavališkas šios eilutės ST_Spatial_References lentelės skaičius. Už to stalo nieko nereiškia. SRID neturi būti toks pat kaip CS_ID. Taigi, kai atnaujinsime į 10.2.2, turėsime nepamiršti patikrinti lentelėje pateiktų SRID, ar jie pasikeitė, ir atitinkamai pakeisti mūsų SQL rodinius.

Atlikau veiksmus, kad SDE sukurtų naują funkcijų klasę su norima koordinačių sistema (GCS_North_American_1983_HARN - 4152). Mūsų galutinis SQL, skirtas 10.0, SRID naudoja 57, o tai taikoma tik mūsų konkrečiai SDE duomenų bazei.


1 atsakymas 1

Atrodo, kad ieškote artimiausio kaimyno įgyvendinimo - „Oracle“ teikia erdvinį operatorių SDO_NN.

Tai nuves jus tik toli, nes ras artimiausią daugiakampio tašką, tačiau negarantuoja, kad tarp jūsų taško ir tikslinio daugiakampio nėra daugiakampių. Įtariu, kad jei norite tai užtikrinti, turėsite būti kūrybingi.

  1. naudokite SDO_NN, kad gautumėte artimiausią tašką ar taškus
  2. naudokite SDO_GEOM.SDO_CENTROID, kad surastumėte daugiakampio svorio centrą
  3. sukurti užklausos/atminties SDO_GEOMETRY eilutę, jungiančią du taškus
  4. naudokite tai kaip SĄLYGOS NĖRA, kad neįtrauktumėte taškų, kuriuose daugiakampis kerta tą tiesę

Galbūt kažkas panašaus į šį nepatikrintą / ne visai baigtą pavyzdį:

Priklausomai nuo jūsų duomenų rinkinio/našumo, galbūt norėsite tai padaryti naudodami PL/SQL naudodami kolekcijas ar kilpas.


Žiūrėti video įrašą: Oracle Spatial Studio demo