Daha çox

Geodatabase əlaqəsini shapefile ixrac edin

Geodatabase əlaqəsini shapefile ixrac edin


Cədvəllə çoxdan əlaqəli bir çoxbucaqlı xüsusiyyət sinfi ilə şəxsi bir yer verilənlər bazam var.

Etmək istədiyim şey, hər çoxbucaqlıda əlaqəli bütün infloration ilə bir shapefile ixrac etməkdir.

ArcGis 10.2.1 istifadə edirəm


Keçmişdə bu ssenaridən istifadə etmişəm. Bu qeydləri seçdiyiniz ArcMap-da işləmək üçün nəzərdə tutulmuşdur və bütün əlaqəli qeydləri seçəcək və hər bir qeyd üçün təkrarlanan həndəsələr yaradaraq yeni bir xüsusiyyət sinifinə ixrac edəcəkdir.

import arcpy, os, sys arcpy.env.ovewriteOutput = True arcpy.env.qualifiedFieldNames = False def SelectRelatedRecords (in_ft, in_field, rel_table, rel_field, sql = ", export = False, out_fc ="): "Girişdən bütün xüsusiyyətləri seçir başqa bir cədvəldən seçilməyə əsaslanan qat. "Münasibət sinfi" kimi davranır. İki cədvəl arasında ortaq bir sahə olmalıdır. in_ft = giriş xüsusiyyətləri in_field = giriş xüsusiyyətlərindən əlaqəli rel_table = əlaqəli cədvəl rel_field = əlaqəli cədvəl sahəsi sql. = giriş xüsusiyyətləri üçün bənd (harada) ixrac = əlaqəli qeydləri ixrac etmək üçün boole seçimidir. Varsayılan səhvdir. out_fc = çıxış xüsusiyyət sinfi. Bu parametr yalnız ixrac doğru olduqda aktivdir. "# Sahə növlərinin uyğun olduğundan əmin olun səhv qaldırın və alətdən çıxın in_ft_desc = arcpy.Describe (in_ft) ftype1 = [f.type in in_ft_desc.fields əgər f.name == in_field] [0] ftype2 = [f.type for arcpy.Describe (rel_table) ) .fields əgər f.name == rel_field] [0] əgər ftype1! = ftype2: arcpy.AddError (' nField t "{1}" dəki "{0}" üçün "{3}" dəki "{2}" '' üçün sahə növü ilə uyğun gəlmir!  n'.format (in_field, in_ft, rel_field, rel_table)) arcpy .AddError ('Sahə növü "{0}", "{1}" olmalıdır.  N'.format (ftype1, ftype2)) sys.exit () # map doc mxd = arcpy.mapping.MapDocument (' CURRENT ') df = arcpy.mapping.ListDataFrames (mxd) [0] # imlec növü üçün versiyanı təyin et = arcpy.GetInstallInfo () [' Versiya '] əgər ver! = '10 .0': dataAccess = True başqa: dataAccess = False # sql əgər sql deyilsə (", '#') xüsusiyyət qatını düzəldin: arcpy.SelectLayerByAttribute_management (in_ft, 'NEW_SELECTION', sql) sel_count = int (arcpy.GetCount_management (in_ft) .getOutput (0)) arcpy.AddMage  n {0} "{1}"  n'.format-dan seçilmiş qeydlər (sel_count, in_ft)) # dataAccess: unikal id'ləri tutun: arcpy.da.SearchCursor ilə (in_ft, ['SHAPE @', in_field]) satır olaraq: geom_dict = dict ((r [1], r [0]) r üçün r) başqa: satır = arcpy.SearchCursor (in_ft) geom_dict = dict ((r.getValue (in_field), r.shape) üçün r in rows) del rows # get key if if ftype1 == 'String' : recs = tuple (filter (None, [k.encode ('utf-8') in k for geom_dict.keys ()])) else: recs = tuple (filter (None, geom_dict.keys ())) # Select əlaqəli cədvəldəki qeydlər rel_path = os.path.dirname (arcpy.Describe (rel_table) .catalogPath) burada = "{0} in {1}". format (arcpy.AddFieldDelimiters (rel_path, rel_field), recs) arcpy.SelectLayerByAttribute_management ( rel_table, 'NEW_SELECTION', burada) rel_count = int (arcpy.GetCount_management (rel_table) .getOutput (0)) arcpy.AddMessage ('"{1}"  n'.format (rel_count, rel_table' dan seçilmiş {0} əlaqəli qeydlər )) # ixrac doğrudursa, [True, 'true', 1] içərisinə ixrac edilərsə çıxış xüsusiyyətləri yaradın: if out_fc: # rel_count> sel_count olduqda birdən çox əlaqənin olub olmadığını görün: # dataAccess: ilə düymələrin sayını əldə edin arcpy.da.SearchCursor (rel_table, [rel_field]) sətirlər kimi: recs2 = [r [0] r in r inows] else: rows = arcpy.SearchCursor (rel_table) recs2 = [r.getValue (rel_field) for r in rows ] del rows # get count count features = [] recs in recs: i for range (recs2.count (rec)): fea tures.append ((geom_dict [rec], rec)) # yeni xüsusiyyət sinfi etmək tmp = r'in_memory  tmp_lyr_xyz123 'sType = in_ft_desc.shapeType.upper () path, name = os.path.split (tmp) arcpy.CreateFeatureclass_management (yol, ad, sType, ",", ", in_ft_desc.spatialReference) f_length = [f. in_ft_desc.fields əgər f üçün uzunluq, əgər f.name == in_field] [0] tmp_field = 'TMP_JN_XYZ' arcpy.AddField_management (tmp , tmp_field, ftype1, field_length = f_length) # dataAccess olduqda həndəsə daxil edin: arcpy.da.InsertCursor ilə (tmp, ['SHAPE @', tmp_field]) satırlar şəklində: xüsusiyyətlərdəki xüsusiyyətlər üçün: irows.insertRow (feats) else: irows = Xüsusiyyətlərdəki göstəricilər üçün arcpy.InsertCursor (tmp): irow = irows.newRow () irow.shape = feats [0] irow.setValue (tmp_field, feats [1]) irows.insertRow (irow) del irow, irows # Make xüsusiyyət təbəqəsinə qoşun və tmp_lyr = str (arcpy.MakeFeatureLayer_management (tmp, 'temp_for_join') əlavə edin. getOutput (0)) arcpy.AddJoin_management (tmp_lyr, tmp_field, rel_table, rel_field) arcpy.CopyFeatures_man in [tmp, tmp_lyr]: arcpy.Delete_management (t) arcpy.DeleteField_management (out_fc, [tmp_field]) # Nəticələri arcpy.AddMessage ('İxrac edilmiş {0} Seçilmiş xüsusiyyətlər' '': {1} '. format (int ( arcpy.GetCount_management (out_fc) .getOutput (0)), out_fc)) else: # Qeydləri birləşdirin və yeni xüsusiyyət sinifinə ixrac edin. (in_ft, rel_table) # Nəticələri arcpy.AddMessage ('İxrac edildi {0} Seçilmiş xüsusiyyətlər' ': {1}'. format (int (arcpy.GetCount_management (out_fc) .getOutput (0)), out_fc)) # Seçilmiş xüsusiyyətlərə yaxınlaşdırın df.zoomToSelectedFeatures () arcpy.RefreshActiveView () return if __name__ == '__main__': # SelectRelatedRecords (* sys.argv [1:])

Formalı deyilsə, onda nə olacaq.

Bir sıra mövzularda insanların məzəmmət edən fikirlər yazdıqlarını / məlumatların shapefiles-də saxlanmasına aşağı baxdıqlarını gördüm. Veritabanlarının istifadəsinin daha yaxşı olacağını düşündükləri barədə bir fikirim var, amma həqiqətən əmin deyiləm. FWIW, CİS təhsilimin% 80-i yalnız ESRI məhsullarına yönəldilmişdir.

Şeffayllardan istifadənin çatışmazlıqları nələrdir (üstünlük verdiyiniz formata qarşı)?

Ümumi CİS işi, xüsusən də nöqtə / xətt / poli həndəsələr üçün hansı saxlama formatını ən faydalı hesab edirsiniz?

Bu barədə daha çox məlumat əldə etmək üçün nəyə baxmalıyam?

Geodatabases gələcəyin yoludur. İnkişaf etmiş bir məlumat təşkilinə imkan verir və eyni zamanda birdən çox istifadəçi arasında asanlıqla paylaşıla və əldə edilə bilər. Onların içərisində bir çox fərqli məlumat növünü, hamısı cədvəllər, raster formatları və vektor formatları daxil olmaqla bir yerdə saxlaya bilərsiniz. Geodatabases haqqında daha çox oxumaq üçün yaxşı bir əsas qaynaq.

Yaxşı sual və yaxşı cavablar!

Gələcək? İndi vaxtdır. Ciddi olaraq, CİS işlərini istəyən neçə dərəcədə bir Geodatabase-in nə olduğuna dair bir ipucu olmadığına şok oldum. Forma şəklini istədiyinizi düşünə biləcəyim yeganə vaxt xüsusiyyətləri AutoCad və ya torpaq data mart kimi başqa bir proqrama və ya sayta gətirdiyiniz zaman olacaq.

Burada əla cavablar var, amma ümumiləşdirmək üçün şəkillər:

göstərmə və geoprosessinq üçün çox yavaş (bunu tez-tez GIS siniflərimdəki tələbələrə nümayiş etdirirəm)

bu qədər faylları ilə daha çətin

zəif adlandırmağı təşviq edən sahə adlandırma məhdudiyyətləri var

Əgər həqiqətən bir platforma (belə demək mümkünsə) bir şey axtarırsınızsa, ArcGIS artıq Spatialite verilənlər bazalarını dəstəkləyir (baxmayaraq ki, bu mövzuda nisbətən sakit olsalar da, çox yaxşı işləyir və bəzi istehsal proqramlarında istifadə edirəm). Fayl geodatabases digər sistemlərdə də kifayət qədər yaxşı işləyir. Bunlardan birini məsləhət görürəm.

Spatialite, çox maraqlı, ArcGIS-də dəstəklənən bir ipucu yox idi. Qeyd etdiyiniz üçün təşəkkürlər.

QGIS-də bir Geodatabase-ə bənzər bir şey varmı? Yalnız məktəbdə ESRI məhsulları haqqında öyrəndim, lakin yeni işim yalnız QGIS-dən istifadə edir. Məhsuldar olduğum yerə yetərincə bənzəyir, amma GDB-lərə bənzər bir şeyin olmadığı görünür. Oxşar xüsusiyyətləri sınamaq və tətbiq etmək üçün PostGRESQL / PostGIS bacarıqlarımı araşdırmaq yaxşı olarmı?

QGIS istifadə edirəm və məlumatlarımın çoxunu Postgres / PostGIS verilənlər bazasında saxlayıram və məkan təhlili aparmaq üçün istifadə edirəm. Siyahıyaalma məlumatları ilə işləmək üçün əla & # x27; şəhərimə səpələnmiş 56 oyun meydançasından 200 metr məsafədə neçə & lt14 yaşlı uşaq yaşayır.

QGIS ayrıca Spatialite-i yerli olaraq dəstəkləyir, yeni Shapefiles-lərdə olduğu kimi yeni Spatialite qatları əlavə edə bilərsiniz. Spatialite bir qədər ESRI & # x27s Fayl Geodatabase məlumatlarına bərabərdir.

QGIS ayrıca Oracle Georaster və MS SQL və ESRI File GDB ilə əlaqələndirir.

tez-tez nəzərdən qaçırılan bir çatışmazlıq, sildikdən sonra redaktə rejimində olarkən bir shapefile düzəldə bilməyəcəksiniz. yenidən sıralamaq üçün redaktəni dayandırmalısınız.

Bəzi alətlər yalnız geodatabase xüsusiyyət dərsləri alacaq. & quotSorğu Cədvəli & quot; kimi bəzi vasitələr yalnız eyni coğrafi verilənlər bazasında mövcud olan cədvəlləri / xüsusiyyət siniflərini alacaq.

Formalı sənədlər, məkan məlumatları ilə məşğul olan insanlar tərəfindən sənayedə kifayət qədər köhnəlmişdir. Təəssüf ki, onların çox unudulmaz adları hələ də GIS şəxsləri ilə deyil, CİS ilə işləyən insanların kollektiv lüğətində möhkəm yerləşmişdir.

Təcrübəmə görə, yuxarı rəhbərlik sadəcə bir neçə shapefile qablaşdırıb müştəriyə göndərmək və & quot kimi şeyləri söyləməyə çox alışmışdır. & quotShapefile & quot sadəcə çox asan və qorxutmayan bir sözdür, şekiller dosyasıdır. Hesab edirəm ki, & quotgeodatabase & quot deyəndə çox mürəkkəb və açıq görünür, xüsusən də kompüterlərdən daha çox e-poçt yoxlamaq və söz sənədləri hazırlamaq üçün istifadə edənlərə.

TLDR: Məkan sütunu ilə SQL Server verilənlər bazası.

Düşünürəm ki, bir çox CİS təhsilində zəiflik nümayiş etdirdiniz. Mən də əsasən ESRI məhsulları ilə tanış oldum və geodatabazaları sinifdə müzakirə edərkən və onlar haqqında oxuduğumuz zaman onlarla çox az işləyirdik, bunların əslində nə olduğunu başa düşməyə kifayət etmirdik. Əsasən, kollecdə etdiyim hər şey məni coğrafi verilənlər bazasının mənasız və əsəbi olduğunu düşündürdü. Bu bir problemdir. Çox sayda atributu olan həqiqətən böyük, kompleks məlumat dəstləri ilə məşğul olmağa başladığınızda, həqiqətən bir verilənlər bazasının gücünə ehtiyacınız var.

Mənim üçün, bu anda & # x27s sürətlə SQL halına gəlir. SQL Server istifadə edirəm və idarəetmə stüdyosu vasitələrindən istifadə edərək ArcMap-ı öldürəcək və ya sadəcə interfeysi ilə etmək çətin olan hər cür dəyişiklikləri və birləşmələri edə bilərəm. Sonra birbaşa SQL verilənlər bazasına qoşuluram. ArcMap-da məlumatları görmək və ya bir xəritə düzəltmək istəsəm, SQL verilənlər bazasında məkan sütunu yaradaraq görüntüləmək üçün ona qoşuluram. 20 xüsusiyyət ilə bir milyon xal göstərmək üçün SQL Server-ə qoşulmaq bir shapefile istifadə etməyə çalışmaqdan daha sürətli.

ESRI funksiyalarını da əvəz etmək üçün istifadə etməyə başladığımız üçün SQL-də bir çox başqa məkan funksiyası var. Və bir veb xəritə qursam, verilənlər bazasına qoşulmaq üçün bir veb servis yaza bilərəm və onu göstərmək üçün lazım olan formatda yalnız lazım olan məkan məlumatlarını çıxara bilərəm. Bu cür təfərrüatlardan istifadə etmək üçün öz veb servislərinizi necə kodlayacağınızı bilməlisiniz, ancaq məlumatlarınıza və tətbiqinizə görə buna dəyər ola bilər.


Videoya baxın: Design a Geodatabase