Daha çox

SQL istifadə edərək Oracle DB-dən həndəsə seçmək mümkün deyil


Oracle 11g verilənlər bazasında bir ArcSDE xüsusiyyət sinifindən həndəsə sahəsini seçməyə çalışıram (PyODBC vasitəsilə Python skriptinin içərisində). Bu mənim sorğum:

USR.FEAT_CLASS'DAN ŞƏKİL SEÇİN

Bu mənə səhv verirORA-24359: OCIDefineObject, bir obyekt növü və ya istinad üçün çağırılmayıbvə digər xüsusiyyət sinifləri üçün də eyni şeyi alıram. Başqa bir həndəsi olmayan sahə seçsəm, sorğu yaxşı işləyir, buna görə skript və ya əlaqə sətri ilə problem olmadığını bilirəm. Başqa kimsə bu problemlə qarşılaşdı?

YENİLƏNİB: ArcGIS 9.3.1-i yerli olaraq quraşdırmışam, amma burada istifadə etmirəm, buna görə bunun rol oynadığını düşünmürəm. Serverə müntəzəm girişim olmadığı üçün ArcSDE-nin hansı versiyasının quraşdırıldığından əmin deyiləm, amma 9.3.1-in də olduğuna inanıram. Python skript Oracle server ilə birbaşa əlaqə qurmaq üçün PyODBC istifadə edir.


Oracle verilənlər bazasında xüsusi obyektlərin yaradılmasını dəstəkləməsi bütün müştərilərin öz dəyərlərini oxuya biləcəyi demək deyil. Bu vəziyyətdə, PyODBC müştəriniz SDE.ST_GEOMETRY sütun növünün necə açılacağını bilmir, buna görə də həndəsəni necə idarə edəcəyini Oracle-a izah etməyib və Oracle, necə keçiləcəyi izah edilmədiyini söyləyərək səhv yaradır. PyODBC sürücüsünə ST_GEOMETRY.

Sizin üçün açıq bir sıra seçimlər var. Ən asan ODBC müştərisinin bir CLOB və ya BLOB sütunu kimi idarə edə biləcəyi bir şey istəməkdir:

Usr.feat_class-dan sde.ST_AsText (forma) SEÇİN

-Və-

Usr.feat_class-dan sde.ST_AsBinary (forma) SEÇİN

ArcGIS 9.3.1 artıq dəstəklənməyəcək qədər yaşlıdır ("Təqaüdçü" dəstək statusu, yanvar 2014-cü il tarixinə). SDE.ST_GEOMETRY tətbiqində quraşdırıldıqdan sonra düzəldilmiş səhvlərlə qarşılaşmağınız çox mümkündür. Ən azı, terminal xidmət paketi (SP2) və müxtəlif SP2 sonrası yamaqlarının yerli Masaüstü quraşdırılmasına, tətbiq serverinin ikili sənədlərinə (əgər varsa) və icazə verən dinləyici dəstəyi kitabxanalarına tətbiq olunduğundan əmin olmaq istəyirsiniz. SDE.ST_GEOMETRY istifadə edərək SQL * Plus məkan sorğuları.


ARCGIS - ST_GEOMETRY ORACLE-dan SQL Serverə

Oracle Sistemində saxlanılan bir ESRI Geodatabase var. Verilənlərin yaradıldığı və mənbə sistemi sayılan yerdir. Verilənləri SQL Server verilənlər bazasına çıxaran və idxal edən bir işi çalışdıra bilməliyəm (ESRI sde-dən yararlanaraq). ST_Geometry tipini SQL Server-ə gətirməklə bağlı bir problem yaşanacağını bilirəm, amma bu tapşırıqları uğurla hazırlamaq üçün hər şeyin lazım olduğu barədə heç bir sənəd tapa bilmədim. Məsələn, məlumatları oracle-dan hansı formada çıxarmalıyam? Və xüsusiyyəti idxal etmək üçün nə tələb olunur. Yeni satırın müxtəlif yollarla qeydiyyatdan keçirilməli olduğunu başa düşürəm.

Oracle Shape üçün məlumat növü: [SDE.ST_GEOMETRY]

SQL Server-də məlumat növü: [Həndəsə]

ST_Geometry'yi oracle'dan varchar yaxşı bilinən mətn formatına çevirə bildim. Bunu sde.ST_ASText () istifadə edərək etdim. Bunun üçün oracle üzərindəki xarici proseslərin konfiqurasiyası tələb olunurdu.

Seçim ifadəm aşağıdakı kimidir:

COL1, COL2, COL3, sde.ST_ASTEXT (SHAPE) şəklini masadan seçin

İndi yaşadığım problem, bunu SQL SERVER GEOMETRY tipinə çevirməkdir. Sütunların arasından keçmək, seçilmiş bir ifadəyə əlavə etmək və SQL SERVER-ə daxil olan STGeomFromText () funksiyasını tətbiq etmək istədiyim saxlanılan prosedurdan istifadə edirəm.


İstəkli düşüncə & # 8230

Oracle-da məkan məlumatlarını saxlama və işləmə qaydalarımızı asanlaşdırmağa çalışırıq. Normalda məkan cədvəllərimizi ArcCatalog-dan FeatureClasses kimi yaradacaq və bir SDE məkan görünüşü yaratmaq üçün paylaşılan bir açar sahə ilə FeatureClasses-dəki məkan məlumatları ilə birləşdiriləcək iş / atribut məlumatlarımız üçün düz köhnə Oracle cədvəlləri yaradırdıq. Bu çox yaxşı işləyir, amma bu yanaşmada bəzi çatışmazlıqlar var

  • SDE, Oracle-da FeatureClass cədvəlində yalnız orada olmaması lazım olan sahə kadr izahatları kimi lazımsız sahələr yaradır.
  • ArcCatalog-dan FeatureClasses-ı əl ilə yaratmaq, qurma prosesinin bir hissəsi kimi avtomatlaşdırıla bilməyən bir prosesdir. İdeal olaraq, bütün modelimizi verilənlər bazasından siləcək bir qurma skriptlərimizdən bir əmr yerinə yetirmək və hər quruluşumuzu sınamaq üçün təmiz bir şifrə ilə başlamaq üçün bütün modeli yenidən yaratmaq üçün başqa bir əmr çalıştırmaq istəyirik. Bu skriptlər verilənlər bazasının başqa bir mühitdə yenidən qurulması lazım olduqda yerləşdirmə prosesi zamanı da istifadə ediləcəkdir.
  • FeatureClasses, məkan məlumatlarını düzəltmək istəyən hər hansı bir müştəri maşınında ESRI lisenziyasına ehtiyac duyan ArcObjects (versiyalı / dəyişdirilməmiş) və ya ArcMap (versiyalı) vasitəsilə düzəldilməlidir. Veb mühitində, bu veb serverdə bir ESRI lisenziyası deməkdir.

Qurğumuzun yuxarıdakı bəzi çatışmazlıqları sınamasını və işləməsini istədik. Beləliklə, SQL skriptlərini yazdıq

  1. Məkan cədvəlini yaradın
  2. Məkan cədvəli haqqında metadata Oracle həndəsə metadata cədvəlinə USER_SDO_GEOM_METADATA əlavə edin
  3. Cədvəldə bir məkan indeksi yaradın
  4. Oracle məkan cədvəlini & # 8216sdelayer -0 register & # 8217 əmrindən istifadə edərək FeatureClass olaraq ArcSDE ilə qeyd edin.

Oracle ilə ilk üç addımı yerinə yetirmək üçün bəzi nümunə SQL skriptləri

Cədvəlin hüdudlarını təyin edən ArcSDE ilə bir çox poliqon FeatureClass kimi qeyd etmək üçün nümunə sde əmri.

sdelayer -o qeyd et -l MÜŞTƏRİLƏR, CUST_GEO_LOCATION -e a + M -C CUSTOMER_ID -i sde: oracle11g -s SERVER_NAME -u XXX -p YYY @ orcl -t SDO_GEOMETRY -P High -x -180, -90,11132000

Məkan cədvəlinin yuxarıdakı əmrlərindən də göründüyü kimi, WGS 84 Coğrafi Koordinat Sistemlərini göstərən 8307 SRID (məkan istinad id) olması üçün Oracle-da qeydiyyatdan keçmişdir. Oracle, özünün CS_SRS cədvəlini saxlayır, burada Oracle tərəfindən dəstəklənən məkan istinad sistemlərinin siyahısını saxlayır. Həndəsə meta məlumatlarını Oracle ilə əlavə edərkən göstərilən SRID-in CS_SRS cədvəlində olması gözlənilir, əks halda Oracle metadatanı cədvəllərinə əlavə edəcəkdir. Məkan cədvəlinin ArcSDE ilə FeatureClass kimi qeydiyyatı zamanı göstərilən sərhədlər də WGS 84 GCS-ni əks etdirir.

İndiyə qədər yaxşı. Yuxarıdakı həll cazibə kimi işləyir. ArcGIS Online baza xəritələri google və bing tərəfindən istifadə olunan Web Mercator proyeksiya sisteminə keçdikdən sonra, məlumatlarımızı Web Mercator-da qorumaq istəyirdik ki, GIS server xəritələr göstərərkən məlumatları yenidən işlətməsin və eyni zamanda məkan məlumatlarını GeoJSON / ArcJSON olaraq xüsusi veb xidmətlərimizdən veb müştərilərimiz üçün istifadə edə biləcəyimizi. Budur problemin başladığı yer. Oracle-da veb merkator proyeksiya sistemi üçün SRID yoxdur. Fərqli bir id altında saxlanıldığını yoxlamaq üçün CS_SRS cədvəlindən keçdik, amma heç bir şansımız olmadı. Oracle ilə yeni bir SRID qeydiyyatı prosesi, dediyim qədər heç bir yerdə sənədləşdirilməyib. Göründüyü kimi, uğursuz sınadığımız CS_SRS cədvəlinə giriş əlavə etmək qədər sadə deyil.

Beləliklə, bu məsələni həll etmək üçün məkan cədvəlimizi SRID olmadan Oracle həndəsə metadata cədvəli ilə qeyd etdik. Beləliklə, Oracle boşluq cədvəli üçün SRID-i NULL hesab edir. ESRI & # 8217s SRID 102113 ilə həndəsələri məkan cədvəlinə daxil etməyə çalışdığımızda bu problem olur. Oracle, həndəsə metadata cədvəllərindəki girişlə uyğunlaşmaq üçün NULL olmayan məkan cədvəlinə həndəsələr daxil etməyimizə icazə vermir. Beləliklə, cədvələ NULL SRID ilə həndəsələr qoymaq məcburiyyətindəyik. Lakin ArcSDE məkan cədvəlinin Web Mercator proyeksiya sistemində olduğunu bilməlidir. Bunu etmək üçün, məkan cədvəlini & # 8216sdelayer -o register & # 8217 istifadə edərək proyeksiya sənədini və # 8220WGS 1984 Web Mercator (Auxiliary Sphere) .prj & # 8221 istifadə edərək ESRI-dən qeyd etdik. Aşağıdakı nümunəyə baxın

sdelayer-qeydiyyatdan keç -l MÜŞTƏRİLƏR, CUST_GEO_LOCATION -e a + M -C CUSTOMER_ID -i sde: oracle11g -s SERVER_NAME -u XXX -p YYY @ orcl -t SDO_GEOMETRY -P High -G file = & # 8221C: TEMP WGS 1984 Web Mercator (Köməkçi Sahə) .prj & # 8221

Oracle həndəsə metadata cədvəlləri üçün əlavə bəyanatı belə görünür

USER_SDO_GEOM_METADATA'ya INSERT (TABLE_NAME, COLUMN_NAME, DIMINFO)

DƏYƏRLƏR (& # 8216MÜŞTƏRİLƏR & # 8217, & # 8216CUST_GEO_LOCATION & # 8217,

SDO_DIM_ARRAY

(SDO_DIM_ELEMENT (& # 8216X & # 8217, -20037700, 20037700, 0.1),

SDO_DIM_ELEMENT (& # 8216Y & # 8217, -20037700, 20037700, 0.1)))

Bu çirkin, amma işləyir. ArcMap-dakı məlumatları çox yaxşı görüntüləyə və düzəldə bildik.

Budur yolda kəşf olunan daha bir neçə şey

  • SQL ifadələrində kiçik hərflərlə adlar göstərsəniz də, Oracle, bütün masa adlarını və sahə adlarını hər halda böyük hərf halına gətirir. Oracle'ı cədvəl / sahə adlarında kiçik hərflərdən istifadə etmək üçün SQL ifadələrindəki cədvəl / sahə adlarını tırnak içərisinə əlavə edərək istifadə edə bilərik.
  • Məkan cədvəlləri üçün cədvəl / sahə adlarını kiçik hərflərlə istifadə etmək üçün yuxarıdakı texnikadan istifadə edirsinizsə, cədvəl üçün həndəsə metaməlumatlarını Oracle ilə qeyd edə bilməyəcəksiniz. Bunun səbəbi, Oracle-ın həndəsə metadata cədvəlinə əlavə etmək üçün məkan cədvəlinin / sahə adının bütün böyük hərflərdə olmasını gözləməsidir. Bu sadəcə dəli bir şeydir və bu tələbin qəsdən olduğunu təsəvvür edə bilmirəm.
  • Oracle məkan SQL sintaksisi çirkindir. Çox çirkin. MS SQL SERVER 2008-də şirin SQL sintaksisindən mütləq öyrənə bilərlər.
  • Oracle-ın Oracle XE adlı pulsuz versiyası, məkan məlumat növlərini dəstəkləyir. Yəni Oracle XE-də məlumat növü MDSYS.SDO_GEOMETRY olan sütunları saxlaya bilərik. Oracle XE, bu məkan sütunlarında bəzi məkan əməliyyatları həyata keçirməyimizə imkan verir, lakin Oracle-ın müəssisə buraxılışında mövcud olan bütün məkan əməliyyatları deyil. XE buraxılışında mövcud olan məkan xüsusiyyətləri, deyə biləcəyim qədər heç bir yerdə sənədləşdirilməyib. Oracle məkan uzantıları, raster dəstəyi və s.Kimi Oracle Enterprise nəşrinə daha çox məkan xüsusiyyətləri gətirir.
  • MDSYS.Oracle ST_GEOMETRY, ESRI ST_GEOMETRY-dən fərqlənir və MDSYS.SDO_GEOMETRY ətrafındakı bir sarğıdır.

Veb merkator proyeksiyası üçün Oracle və SDE ilə iş görməyin daha yaxşı bir yolundan xəbərdarsanız, xahiş edirəm mənə bildirin, hamısı qulaqlarım. Ümid edirəm bu yazı bəzi kasıb ruhları bir az ağrı və əzabdan qurtaracaq.


Bu işləməlidir. Verilənlər bazanızda Oracle Spatial və ya Oracle Locator quraşdırılmış olduğundan əminsiniz.

AWS-də verilən verilənlər bazası ümumiyyətlə yoxdur.

Xahiş edirəm verilənlər bazanızın versiyasını yoxlayın. Oracle 12c üçün SDO_GEOM paketinin hamısı, oracle axtarış istifadəçiləri üçün mövcuddur. Beləliklə, çalışmalısınız. Bununla birlikdə, 12c-də burada deyildiyi kimi məkan hissəsini silmək lazım ola bilər: https://docs.oracle.com/database/121/SPATL/sdo_locator.htm#SPATL1433

Bu, oracle məkan və ya axtarış yeri olan və ya MDSYS-də düzgün quraşdırılmış bir şeyə sahib olan hər kəslə baş verərsə və bu hələ də işə yaramırsa, oxuduğum müddətdə istifadəçinizə MDSYS-dən EXECUTE imtiyazları verməyə cəhd edə bilərsiniz.


Geodata Master

Aşağıda oxucuya qısa bir baxış vermək və faydalı oxu mənbələrinə keçid vermək üçün Oracle Spatial haqqında bir & # 8220general & # 8221 məlumat verilir:

1. Oracle Locator və Oracle Spatial arasındakı fərq:

Oracle Bulucu: Oracle Database-in (Standard və Enterprise Editions) bir xüsusiyyəti, əksər müştəri tətbiqləri və tərəfdaş həlləri üçün lazım olan əsas yer funksionallığını təmin edir. (Locator kompleks CİS tətbiqləri üçün bir həll yolu deyil.) Geliştiricilər mövcud Oracle əsaslı tətbiqetmələri genişləndirə bilər, çünki Locator ilə yer məlumatlarını birbaşa tətbiq və xidmətlərinə asanlıqla daxil edə bilərlər. Bu mümkündür, çünki yer məlumatları Oracle serverinin özünə tam inteqrasiya olunmuşdur. Coğrafi və yer məlumatları, bütün SQL istifadəçilərinə tanış olan CHAR, DATE və ya INTEGER tiplərinə tətbiq olunan eyni semantikadan istifadə edərək idarə olunur.

Oracle Məkan: Oracle Database Enterprise Edition üçün bir seçim, Locator'u artırır və Oracle Database-də daha çox məkan təhlili və işləmə tələb edən kompleks CİS tətbiqləri üçün möhkəm bir təməl təmin edir. Buraya məkan funksiyaları (sahə, tampon, mərkəz hesablamaları daxil olmaqla), inkişaf etmiş koordinat sistemləri dəstəyi, xətti istinad sistemi və məcmu funksiyalar daxildir. Bu buraxılışda nəzərə çarpan yeni imkanlar dövlət sektoru, müdafiə, lojistik, enerji axtarışı və iş coğrafiyası sahələrindən gələn iş üçün vacib olan kritik tələbləri həll edir.

2. oracle məkan komponentinin & # 8220installed & # 8221 və & # 8220valid & # 8221 olduğunu verilənlər bazanızda aşağıdakı sorğudan istifadə edin: DBA_REGISTRY'DƏN COMP_NAME, VERSION, DURUMU SEÇİN


2.4 Həndəsə Metadata Görünüşləri

Hər bir ölçüdə ölçüləri, alt və yuxarı hüdudları və tolerantlığı təsvir edən həndəsə metaməlumatı MDSYS-ə məxsus bir qlobal cədvəldə saxlanılır (istifadəçilər heç vaxt birbaşa yeniləməməlidirlər). Hər bir Məkan istifadəçisi həmin istifadəçi ilə əlaqəli sxemdə mövcud olan aşağıdakı baxışlara malikdir:

USER_SDO_GEOM_METADATA, istifadəçiyə məxsus olan bütün məkan cədvəlləri üçün metadata məlumatlarını (şemasını) ehtiva edir. Yeniləyə biləcəyiniz yeganə baxış budur və məkan istifadəçilərinin məkan cədvəlləri ilə əlaqəli metadata daxil etmələri lazımdır.

ALL_SDO_GEOM_METADATA, istifadəçinin SEÇMƏ icazəsinə sahib olduğu bütün məkan cədvəlləri üçün metadata məlumatlarını ehtiva edir.

Məkan istifadəçiləri bu fikirləri doldurmaqdan məsuldurlar. Hər bir məkan sütunu üçün USER_SDO_GEOM_METADATA görünüşünə uyğun bir sətir əlavə etməlisiniz. Oracle Spatial, ALL_SDO_GEOM_METADATA görünüşünün USER_SDO_GEOM_METADATA daxil etdiyiniz satırları əks etdirmək üçün yenilənməsini təmin edir.

Hər bir metadata görünüşü aşağıdakı tərifə malikdir:

Əlavə olaraq, ALL_SDO_GEOM_METADATA görünüşündə TABLE_NAME-da göstərilən cədvələ sahib olan şemanı təyin edən bir SAHİB sütunu var.

2.4.1 TABLE_NAME

TABLE_NAME sütunu, SDO_GEOMETRY tipli bir sütuna sahib olan COLA_MARKETS kimi bir xüsusiyyət cədvəlinin adını ehtiva edir.

Cədvəl adı bütün böyük simvollarda məkan metadata görünüşlərində saxlanılır.

Cədvəlin adı USER_SDO_GEOM_METADATA görünüşünə daxil edildikdə sitat sətirində boşluqlar və ya qarışıq hərfləri ehtiva edə bilməz və sorğuda istifadə edildikdə sitat sətirində ola bilməz (bütün böyük hərflərdə olmadıqda).

Məkan sütununda bir məkan indeksini yaratmağı planlaşdırırsınızsa, məkan xüsusiyyət cədvəli indeks tərəfindən təşkil edilmiş bir cədvəl ola bilməz.

2.4.2 COLUMN_NAME

COLUMN_NAME sütunu SDO_GEOMETRY tipli sütunun adını ehtiva edir. COLA_MARKETS cədvəli üçün bu sütuna SHAPE deyilir.

Sütun adı bütün böyük simvollarda məkan metadata görünüşlərində saxlanılır.

Sütun adı, USER_SDO_GEOM_METADATA görünüşünə daxil edildikdə sitat sətirində boşluq və ya qarışıq hərfləri ehtiva edə bilməz və sorğuda istifadə edildikdə sitat sətirində ola bilməz (bütün böyük hərflərdə olmadıqda).

2.4.3 DİMİNFO

DIMINFO sütunu, ölçüyə görə sıralanan bir obyekt növünün uzunluğu dəyişən bir sıradır və hər ölçü üçün bir giriş var. SDO_DIM_ARRAY növü aşağıdakı kimi müəyyən edilir:

SDO_DIM_ELEMENT növü aşağıdakı kimi müəyyən edilir:

SDO_DIM_ARRAY nümunəsi ölçülüdür n varsa n ölçüləri. Yəni DIMINFO, iki ölçülü həndəsələr üçün 2 SDO_DIM_ELEMENT nümunəsini, üç ölçülü həndəsələr üçün 3 nümunəni və dörd ölçülü həndəsələr üçün 4 nümunəni ehtiva edir. Dizidəki hər bir SDO_DIM_ELEMENT nümunəsinin SDO_LB, SDO_UB və SDO_TOLERANCE atributları üçün etibarlı (sıfır deyil) dəyərləri olmalıdır.

Dözümlülüyün izahı və uyğun SDO_TOLERANCE dəyərinin necə müəyyənləşdirilməsi üçün Bölmə 1.5.5-ə baxın, xüsusilə Bölmə 1.5.5.1.

Mekansal dəyişən uzunluq massivinin ölçüyə görə sifariş edildiyini qəbul edir. DIMINFO dəyişən uzunluq massivi, ölçü uzunluğuna görə dəyişən SDO_ORDINATES nöqtələrindəki ordinatların əmri ilə eyni şəkildə ölçüyə görə sıralanmalıdır. Məsələn, SDO_ORDINATES dəyişən uzunluq massivini ehtiva edirsə n, Yn> sonra ilk DIMINFO girişi X ölçüsünü və ikinci DIMINFO girişi Y ölçüsünü təyin etməlidir.

Bölmə 2.1-də nümunə 2-1, SDO_GEOMETRY və SDO_DIM_ARRAY tiplərinin istifadəsini göstərir. Bu nümunə həndəsə obyektlərinin (kolalar üçün hipotetik bazar sahələri) necə təmsil olunduğunu və COLA_MARKETS xüsusiyyət cədvəlinin və USER_SDO_GEOM_METADATA görünüşünün bu obyektlərin məlumatları ilə necə doldurulduğunu göstərir.

2.4.4 SRID

SRID sütunu aşağıdakılardan birini içərməlidir: sütundakı bütün həndəsələr üçün koordinat sistemi üçün SRID dəyəri və ya həndəsələrlə əlaqəli bir xüsusi koordinat sistemi olmadıqda NULL. (Koordinat sistemləri haqqında məlumat üçün Fəsil 6-ya baxın.)


SQL funksiyalarının siyahısı

Oracle, PostgreSQL və SQLite-də ST_Geometry növü ilə istifadə edə biləcəyiniz funksiyalara getmək üçün aşağıdakı linklərə vurun.

Oracle-da ST_Geometry funksiyalarından istifadə edərkən sde ilə funksiyaları və operatorları seçməlisiniz. Məsələn, ST_Buffer sde.ST_Buffer olardı. Sde əlavə olunur. proqrama funksiyanın sde istifadəçi şemasında saxlanıldığını göstərir. PostgreSQL üçün kvalifikasiya isteğe bağlıdır, lakin seçicini daxil etmək yaxşı bir təcrübədir. SQLite verilənlər bazalarında sde şeması olmadığı üçün funksiyaları SQLite ilə istifadə edərkən kvalifikasiyanı daxil etməyin.

PostGIS həndəsə növü və ya Oracle SDO_Geometry tipi kimi ST_Geometry xaricindəki məkan növləri üçün bunların hər birinin istifadə etdiyi funksiyalar barədə məlumat üçün sırasıyla PostGIS və ya Oracle Spatial sənədlərinə müraciət edin. PostGIS sənədlərinə www.postgis.org saytında baxmaq olar. Oracle sənədləri Oracle Yardım Mərkəzində tapıla bilər.

ST_Geometry SQL funksiyaları istifadəsinə görə qruplaşdırıla bilər.

Konstruktor funksiyaları

Konstruktor funksiyaları bir həndəsə növünü və ya həndəsənin mətn təsvirini alır və həndəsə yaradır. Aşağıdakı cədvəldə konstruktor funksiyaları sadalanır və ST_Geometry tətbiqlərinin hər birini dəstəklədiyi göstərilir.


2.1 Sadə Nümunə: Məkan Məlumatlarının daxil edilməsi, İndeksləşdirilməsi və sorğusu

Bu bölmə məkan cədvəli yaratmaq, məlumatlar əlavə etmək, məkan indeksini yaratmaq və məkan sorğularını yerinə yetirmək üçün sadə bir nümunə təqdim edir. Fəsil 1-də izah edilmiş və bu fəslin digər hissələrində izah ediləcək anlayışlara aiddir.

Ssenari, bir neçə məhsulun (kola) marketinq marağının coğrafi sahələrini müəyyənləşdirən alkoqolsuz içki istehsalçısıdır. Colas, şirkət tərəfindən və ya rəqibləri tərəfindən istehsal edilən və ya birləşdirilmiş ola bilər. Hər bir maraq sahəsi istifadəçinin müəyyənləşdirdiyi hər hansı bir meyarı təmsil edə bilər: məsələn, həmin kolanın bazar payının çox olduğu və ya kolanın rəqabət təzyiqi altında olduğu və ya kolanın əhəmiyyətli dərəcədə böyümə potensialına sahib olduğu düşünülən bir sahə. Hər sahə bir şəhərdəki bir qonşuluq və ya bir əyalətin, vilayətin və ya ölkənin bir hissəsi ola bilər.

Şəkil 2-1 dörd kola üçün maraq sahələrini göstərir.

Şəkil 2-1 Sadə nümunə üçün maraq dairələri

Nümunə 2-1 aşağıdakı əməliyyatları yerinə yetirir:

Məkan məlumatlarını saxlamaq üçün bir cədvəl (COLA_MARKETS) yaradır

Dörd maraq dairəsi üçün sıra əlavə edir (cola_a, cola_b, cola_c, cola_d)

Bölgələr üçün ölçülü məlumatları əks etdirmək üçün USER_SDO_GEOM_METADATA görünüşünü yeniləyir

Məkan indeksini yaradır (COLA_SPATIAL_IDX)

Bəzi məkan sorğularını yerinə yetirir

Nümunə 2-1-dəki bir çox konsepsiya və texnika bu fəslin digər hissələrində ətraflı izah olunur.

Nümunə 2-1 Sadə Nümunə: Məkan Verilərinin daxil edilməsi, İndeksləşdirilməsi və Sorgulanması


ST_Geometry saxlama ilə Oracle-da xüsusiyyət sinifləri yaratmaq

ArcGIS 9.3-dən başlayaraq ArcSDE komponentini ilk dəfə quraşdırdığınız zaman ST_Geometry şeması standart yaddaş növüdür. ArcSDE saxlama üçün standart parametrlər DBTUNE cədvəlində GEOMETRY_STORAGE parametrləri ilə müəyyən edilir.

Xüsusiyyət sinfi məlumatlarınızın çoxunu ST_Geometry formatında saxlamaq istəyirsinizsə, DEFAULTS açar sözünün GEOMETRY_STORAGE parametrini ST_GEOMETRY olaraq qoyun.

Əvvəlcə ArcGIS 9.3-dən əvvəl coğrafi verilənlər bazanızı yaratmısınızsa, DEFAULTS açar sözünün altındakı GEOMETRY_STORAGE parametrini ST_GEOMETRY olaraq təyin edərək standart olaraq ST_GEOMETRY sütunları ilə xüsusiyyət sinifləri yaratmaq üçün DBTUNE cədvəlinizin parametrlərini dəyişdirməlisiniz.

DEFAULTS açar sözlər siyahısı altında ST_GEOM_LOB_STORAGE parametrini də dəyişdirməlisiniz. DEFAULTS açar sözünə əlavə edildikdə, LOB seqment adı bu parametrin tərifinə daxil edilməməlidir. Daxildirsə, adın dəyərini dəyişdirməsəniz, ikinci bir sinif sinfi yaradıldıqda xüsusiyyət sinfi yaradılması uğursuz olacaq, çünki hər bir LOB seqment adı verilmiş bir sxem üçün unikal olmalıdır. Aşağıdakı ST_GEOM_LOB_STORAGE parametr nümunəsində heç bir obyekt adı yoxdur və bununla da eyni sxem daxilində ad toqquşmalarının qarşısını alır:

Qeyd: DBTUNE parametrlərini dəyişdirmək üçün sdedbtune idarəetmə əmrindən istifadə edin. Sdedbtune əmrindən istifadə ilə bağlı ətraflı məlumat üçün ArcSDE İdarəetmə Komandanlığına müraciət edin.

ArcSDE for Oracle bir sıra fərqli həndəsə saxlama şemalarını dəstəkləyir və bunların hamısı eyni verilənlər bazasında birlikdə istifadə edilə bilər. Yalnız bir standart həndəsə şeması ola bilsə də, fərqli həndəsə sxemlərindən istifadə edərək fərdi cədvəllər yaradıla bilər.

Xüsusiyyət siniflərinizin yalnız bir hissəsini məkan tipli saxlama ilə saxlamaq istəyirsinizsə, xüsusiyyət sinfini yaratdığınız zaman ST_GEOMETRY açar sözünü təyin edə bilərsiniz. Bunu etsəniz, həmin xüsusiyyət sinfi bir ST_Geometry sütunu ilə yaradılacaqdır. Dbtune faylında ST_GEOMETRY açar sözü aşağıdakı kimi görünür:

ST_GEOM_LOB_STORAGE parametri üçün etibarlı dəyərlərə aşağıdakılar daxildir:

Qeyd: Bu bölmədə əvvəllər qeyd edildiyi kimi, LOB və LOB indeks cədvəl boşluğu adlarını təyin etsəniz, hər bir xüsusiyyət sinfi yaradılmasından əvvəl bu dəyərləri dəyişdirməlisiniz. Bunu etməsəniz, sonrakı xüsusiyyət sinfi yaradıcılığı uğursuz olacaq, çünki hər seqment adı unikal olmalıdır.

Oracle LOB seqmentlərinin yaradılması və saxlanılması barədə daha çox nümunə və əlavə məlumat üçün ESRI dəstək saytında "LOB seqmenti" axtarın. Bu mövzuda bir neçə məlumat bazası məqaləsi mövcuddur.


İstəkli düşüncə & # 8230

Oracle-da məkan məlumatlarını saxlama və işləmə qaydalarımızı düzəltməyə çalışırıq. Normalda məkan cədvəllərimizi ArcCatalog-dan FeatureClasses kimi yaradacaq və bir SDE məkan görünüşü yaratmaq üçün paylaşılan bir açar sahə ilə FeatureClasses-dəki məkan məlumatları ilə birləşdiriləcək iş / atribut məlumatlarımız üçün düz köhnə Oracle cədvəlləri yaradırdıq. Bu çox yaxşı işləyir, amma bu yanaşmada bəzi çatışmazlıqlar var

  • SDE, Oracle-da FeatureClass cədvəlində yalnız orada olmaması lazım olan sahə kadr izahatları kimi lazımsız sahələr yaradır.
  • ArcCatalog-dan FeatureClasses-ı əl ilə yaratmaq, qurma prosesinin bir hissəsi kimi avtomatlaşdırıla bilməyən bir prosesdir. İdeal olaraq, bütün modelimizi verilənlər bazasından siləcək bir qurma skriptlərimizdən bir əmr yerinə yetirmək və hər quruluşumuzu sınamaq üçün təmiz bir şifrə ilə başlamaq üçün bütün modeli yenidən yaratmaq üçün başqa bir əmr çalıştırmaq istəyirik. Bu skriptlər verilənlər bazasının başqa bir mühitdə yenidən qurulması lazım olduqda yerləşdirmə prosesi zamanı da istifadə ediləcəkdir.
  • FeatureClasses, məkan məlumatlarını düzəltmək istəyən hər hansı bir müştəri maşınında ESRI lisenziyasına ehtiyac duyan ArcObjects (versiyalı / dəyişdirilməmiş) və ya ArcMap (versiyalı) vasitəsilə düzəldilməlidir. Veb mühitində, bu veb serverdə bir ESRI lisenziyası deməkdir.

Qurğumuzun yuxarıdakı bəzi çatışmazlıqları sınamasını və işləməsini istədik. Beləliklə, SQL skriptlərini yazdıq

  1. Məkan cədvəlini yaradın
  2. Məkan cədvəli haqqında metadata Oracle həndəsə metadata cədvəlinə USER_SDO_GEOM_METADATA əlavə edin
  3. Cədvəldə bir məkan indeksi yaradın
  4. Oracle məkan cədvəlini & # 8216sdelayer -0 register & # 8217 əmrindən istifadə edərək bir FeatureClass olaraq ArcSDE ilə qeyd edin.

Oracle ilə ilk üç addımı yerinə yetirmək üçün bəzi nümunə SQL skriptləri

Cədvəlin hüdudlarını təyin edən ArcSDE ilə bir çox poliqon FeatureClass kimi qeyd etmək üçün nümunə sde əmri.

sdelayer -o qeyd et -l MÜŞTƏRİLƏR, CUST_GEO_LOCATION -e a + M -C CUSTOMER_ID -i sde: oracle11g -s SERVER_NAME -u XXX -p YYY @ orcl -t SDO_GEOMETRY -P High -x -180, -90,11132000

Məkan cədvəlinin yuxarıdakı əmrlərindən də göründüyü kimi, WGS 84 Coğrafi Koordinat Sistemlərini göstərən 8307 SRID (məkan istinad id) olması üçün Oracle-da qeydiyyatdan keçmişdir. Oracle, özünün CS_SRS cədvəlini saxlayır, burada Oracle tərəfindən dəstəklənən məkan istinad sistemlərinin siyahısını saxlayır. Həndəsə meta məlumatlarını Oracle ilə əlavə edərkən göstərilən SRID-in CS_SRS cədvəlində olması gözlənilir, əks halda Oracle metadatanı cədvəllərinə əlavə edəcəkdir. Məkan cədvəlinin ArcSDE ilə FeatureClass kimi qeydiyyatı zamanı göstərilən sərhədlər də WGS 84 GCS-ni əks etdirir.

İndiyə qədər yaxşı. Yuxarıdakı həll cazibə kimi işləyir. ArcGIS Online baza xəritələri google və bing tərəfindən istifadə olunan Web Mercator proyeksiya sisteminə keçdikdən sonra, məlumatlarımızı Web Mercator-da qorumaq istəyirdik ki, GIS server xəritələr göstərərkən məlumatları yenidən işlətməsin və eyni zamanda məkan məlumatlarını GeoJSON / ArcJSON olaraq xüsusi veb xidmətlərimizdən veb müştərilərimiz üçün istifadə edə biləcəyimizi. Budur problemin başladığı yer. Oracle-da veb merkator proyeksiya sistemi üçün SRID yoxdur. CS_SRS cədvəlindən fərqli bir id altında saxlanıldığını yoxlamaq üçün keçdik, lakin heç bir uğur qazanmadıq. Oracle ilə yeni bir SRID qeydiyyatı prosesi, dediyim qədər heç bir yerdə sənədləşdirilməyib. Göründüyü kimi, uğursuz sınadığımız CS_SRS cədvəlinə giriş əlavə etmək qədər sadə deyil.

Beləliklə, bu məsələni həll etmək üçün məkan cədvəlimizi SRID olmadan Oracle həndəsə metadata cədvəli ilə qeyd etdik. Beləliklə, Oracle NULL-də məkan cədvəli üçün SRID düşünür. ESRI & # 8217s SRID 102113 ilə həndəsələri məkan cədvəlinə daxil etməyə çalışdığımızda bu problem olur. Oracle, həndəsə metadata cədvəllərindəki girişlə uyğunlaşmaq üçün NULL olmayan məkan cədvəlinə həndəsələr daxil etməyimizə icazə vermir. Beləliklə, cədvələ NULL SRID ilə həndəsələr qoymaq məcburiyyətindəyik. Ancaq ArcSDE məkan cədvəlinin Web Mercator proyeksiya sistemində olduğunu bilməlidir. Bunu etmək üçün, məkan cədvəlini & # 8216sdelayer -o register & # 8217 istifadə edərək proyeksiya sənədini və # 8220WGS 1984 Web Mercator (Auxiliary Sphere) .prj & # 8221 istifadə edərək ESRI-dən qeyd etdik. Aşağıdakı nümunəyə baxın

sdelayer-qeydiyyatdan keç -l MÜŞTƏRİLƏR, CUST_GEO_LOCATION -e a + M -C CUSTOMER_ID -i sde: oracle11g -s SERVER_NAME -u XXX -p YYY @ orcl -t SDO_GEOMETRY -P High -G file = & # 8221C: TEMP WGS 1984 Web Mercator (Köməkçi Sahə) .prj & # 8221

Oracle həndəsə metadata cədvəlləri üçün əlavə bəyanatı buna bənzəyir

USER_SDO_GEOM_METADATA'ya INSERT (TABLE_NAME, COLUMN_NAME, DIMINFO)

DƏYƏRLƏR (& # 8216MÜŞTƏRİLƏR & # 8217, & # 8216CUST_GEO_LOCATION & # 8217,

SDO_DIM_ARRAY

(SDO_DIM_ELEMENT (& # 8216X & # 8217, -20037700, 20037700, 0.1),

SDO_DIM_ELEMENT (& # 8216Y & # 8217, -20037700, 20037700, 0.1)))

Bu çirkin, amma işləyir. ArcMap-dakı məlumatları çox yaxşı görüntüləyə və düzəldə bildik.

Budur yolda kəşf olunan daha bir neçə şey

  • SQL ifadələrində kiçik hərflərlə adlar göstərsəniz də, Oracle, bütün masa adlarını və sahə adlarını hər halda böyük hərf halına gətirir. Oracle'ı cədvəl / sahə adlarında kiçik hərflərdən istifadə etmək üçün SQL ifadələrindəki cədvəl / sahə adlarını tırnak içərisinə əlavə edərək istifadə edə bilərik.
  • Məkan cədvəlləri üçün cədvəl / sahə adlarını kiçik hərflərlə istifadə etmək üçün yuxarıdakı texnikanı istifadə edirsinizsə, cədvəl üçün həndəsə metaməlumatlarını Oracle ilə qeyd edə bilməyəcəksiniz. Bunun səbəbi, Oracle-ın həndəsə metadata cədvəlinə əlavə etmək üçün məkan cədvəlinin / sahə adının bütün böyük hərflərdə olmasını gözləməsidir. Bu sadəcə dəli bir şeydir və bu tələbin qəsdən olduğunu təsəvvür edə bilmirəm.
  • Oracle məkan SQL sintaksisi çirkindir. Çox çirkin. MS SQL SERVER 2008-də şirin SQL sintaksisindən mütləq öyrənə bilərlər.
  • Oracle-ın Oracle XE adlı pulsuz versiyası, məkan məlumat növlərini dəstəkləyir. Yəni Oracle XE-də məlumat növü MDSYS.SDO_GEOMETRY olan sütunları saxlaya bilərik. Oracle XE, bu məkan sütunlarında bəzi məkan əməliyyatları həyata keçirməyimizə imkan verir, lakin Oracle-ın müəssisə buraxılışında mövcud olan bütün məkan əməliyyatları deyil. XE buraxılışında mövcud olan məkan xüsusiyyətləri, dediyim qədər heç bir yerdə sənədləşdirilməyib. Oracle məkan uzantıları, raster dəstəyi və s.Kimi Oracle Enterprise nəşrinə daha çox məkan xüsusiyyətləri gətirir.
  • MDSYS.Oracle ST_GEOMETRY, ESRI ST_GEOMETRY-dən fərqlənir və MDSYS.SDO_GEOMETRY ətrafındakı bir sarğıdır.

Veb merkator proyeksiyası üçün Oracle və SDE ilə iş görməyin daha yaxşı bir yolundan xəbərdarsanız, xahiş edirəm mənə bildirin, hamısı qulaqlarım. Ümid edirəm bu yazı bəzi kasıb ruhları bir az ağrı və əzabdan qurtaracaq.