Daha çox

Bir yol şəbəkəsindəki X uzunluğundan böyük olan xətt seqmentlərini ArcGIS istifadə edərək n kiçik xətt seqmentlərinə bölmək metodu?


ArcGIS Desktop 10.2 istifadə edirəm və müəyyən bir uzunluqdan böyük bir şəbəkədə yollar çəkib bərabər kiçik hissələrə ayırmaq istərdim. Yüzdə bölünmənin Redaktor Menyusu vasitəsilə əldə edilə biləcəyini gördüm; bunun göründüyü kimi, bu sətir-sətir əsasında edilməlidir.

Bütün yolları müəyyən bir uzunluqda orijinalın faizinə əsasən kiçik hissələrə bölmək üçün prosesi avtomatlaşdırma yollarını təklif edə bilərsinizmi?


Kiçik bir Python otomasyonu bu işi bitirir. Əsas addımlar:

  • Xüsusiyyət sinifinin vahidlərindəki maksimum məsafəni bir məkan istinad obyektinin köməyi ilə təyin edin (inanıram ki, proqnozlaşdırılan xüsusiyyət sinfi tələb olunur)
  • Giriş xətti xüsusiyyət sinfi şablonu olaraq yeni, boş bir xüsusiyyət sinfi yaradın
  • Giriş xüsusiyyət sinifini təkrarlayın və xətt uzunluqlarını yoxlayın
  • Uzunluq çox uzundursa, a işarəsini istifadə edərək xətti davamlı olaraq bölünisəilmə,xətt boyunca mövqenöqtədə split xətt.
  • Xətlər maksimum uzunluqdan qısaldıqdan sonra siyahıya satır obyekti əlavə edin
  • Bütün satır obyektlərini bir imleclə yeni xüsusiyyət sinfinə daxil edin

Girişlər:

daxili: giriş xətti xüsusiyyət sinfi

outfc: çıxış xüsusiyyət sinfi

dist: metrlə maksimum məsafə

Kod:

#FF = r "C:  Users  e1b8  Desktop  E1B8  Desktop  E1B8  Workspace  Workspace5.gdb  testLines_split" giriş sətri xüsusiyyət sinfi üçün tam yol outFc = r "C:  Users  e1b8  Desktop  E1B8  Workspace  Workspace5.gdb  testLines_split2 "#Distance (metr) dist = 15 # ----------- import arcpy import os # overwrite outputs (isteğe bağlı) arcpy.env.overwriteOutput = Doğru çap "məkan istinad məlumatını təyin etmək" # Məkan istinad obyektini əldə edin sr = arcpy.Describe (inFc) .spatialReference #meters dönüşüm meterPerUnit = sr.metersPerUnit # Xüsusiyyət sinif vahidlərində məsafədə checkDistance = dist / metrePerUnit çap "maksimum məsafə:", checkDistance print " çıxış xüsusiyyət sinfi yaradılması "# Xüsusiyyət sinfi yaratmaq outPath = os.path.dirname (outFc) outName = os.path.basename (outFc) arcpy.CreateFeatureclass_management (outPath, outName," POLYLINE ", inFc, spatial_reference = sr) #set iş sahəsi arcpy.env.workspace = həndəsə sahələri olan outPath # siyahısı = ["SHAPE @"] # Fiel siyahısına xüsusiyyət sinfi sahələrini əlavə edin ds + = [arcpy.ListFields (inFc) içərisində f üçün f.name] # Objectid sahə adı alın oidFld = arcpy.Describe (inFc). OIDFieldName # Sahələr siyahısı sahələrindən kənar sahəni silin .remove (oidFld) # boş siyahının olması satırlara əlavə edilmiş satırlar = [] print print "iterating", arcpy.GetCount_management (inFc) .getOutput (0), "rows" i = 0 #cursor, arcpy.da.SearchCursor (inFc, sahələr) ilə xüsusiyyət sinifini təkrarlamaq üçün : # imlecdəki sıra üçün satırları təkrarlayın: i + = 1 # həndəsə obyekt həndəsi = satır [0] #get length length = geometry.length # yoxlayın uzunluq limitdən çox olub olmadığını yoxlayın length> checkDistance: print "row", i print "xətt uzunluğu:", silinəcək aralıq tarix üçün uzunluq # boş siyahı zibil = [] # tək xüsusiyyət üçün boş sətir fc yaratmaq split = arcpy.CreateUniqueName ("split") outPath = os.path.dirname (split) outName = os.path.basename (split) arcpy.CreateFeatureclass_management (outPath, outName, "POLYLINE", inFc, spatial_reference = sr) # arcpy.da.InsertCursor (split, field) ilə yeni fc-də # insert xüsusiyyət r: cur.insertRow (sıra) del cur # zibil zibilinə yeni fc əlavə et + = [split] # tək xüsusiyyət üçün boş nöqtə fc yaratmaq midPnt = arcpy.CreateUniqueName ("point") outPath = os.path.dirname (midPnt) outName = os.path.basename (midPnt) arcpy.CreateFeatureclass_management (outPath, outName, "POINT", spatial_reference = sr) # Arcpy ilə yeni nöqtə pnt = geometry.positionAlongLine (.5, True) #insert nöqtəsini əldə edin. da.InsertCursor (midPnt, "SHAPE @") kimi cur: cur.insertRow ((pnt,)) del cur #add new fc to to axula axını + = [midPnt] #loop while uzunluq limitdən böyük isə uzunluq> checkDistance: #Split xətti (orta) nöqtədə newSplit = arcpy.CreateUniqueName ("split") zibil + = [newSplit] arcpy.SplitLineAtPoint_management (split, midPnt, newSplit) #Yeni orta nöqtələr yaradın midPnt = arcpy.CreateUniqueName " + = [midPnt] outPath = os.path.dirname (midPnt) outName = os.path.basename (midPnt) arcpy.CreateFeatureclass_management (outPath, outName, "POINT", spatial_reference = sr) yeni nöqtələr üçün # boş siyahı pnts = [] # bölünmüş xətti birləşdirin və arcpy.da.SearchCursor (newSplit, "SHAPE @") ilə orta nöqtələr əldə edin: geom üçün, cur: pnt = geom.positionAlongLine (.5 , True) pnts + = [pnt] del cur #add orta nöqtələri arcpy.da.InsertCursor (midPnt, "SHAPE @") ilə orta nöqtə xüsusiyyət sinfinə cur: pnt for pnts: cur.insertRow ((pnt,)) del cur #divide uzunluğunu iki uzunluğa bölün = uzunluq / 2 çap "sətir uzunluğu:", uzunluq bölüşdürmə = newSplit satırlar + = [arcpy.da.SearchCursor (bölmə, sahələr) içindəki sıra üçün sətir) # içindəki zibil üçün aralıq məlumatları təmizləyin zibil: arcpy.Delete_management (zibil) başqa: satırlar + = [sıra] #del imleci dəyişən del imleci çap çapı "satırları yeni xüsusiyyət sinfinə daxil etmək" # insert imleci arcpy.da.InsertCursor (outFc, field ) kursor kimi: satırdakı sıra üçün: cursor.insertRow (sıra) del kursor çap çapı "yaradıldı:", outFc çap çapı "bitdi"

Çıxış belə bir şeyə bənzəyir:

məkan istinad məlumatı maksimum məsafənin təyin edilməsi: 65.6166666667 11 sətir satır 4 satır uzunluğunu təkrarlayan çıxış xüsusiyyət sinfi yaratmaq: 90.6641581736 sətir uzunluğu: 45.3320790868 sıra 6 sətir uzunluğu: 81.7030489448 sətir uzunluğu: 40.8515244724 sıra 7 sətir uzunluğu: 82.7060163161 sətir uzunluğu: 41.353008151 97.005780961 sətir uzunluğu: 48.5028904805 sətir 10 sətir uzunluğu: 90.6565601113 sətir uzunluğu: 45.3282800557 yaradılan yeni xüsusiyyət sinfinə sətirlər əlavə etmək: C:  Users  e1b8  Desktop  E1B8  Workspace  Workspace5.gdb  testLines_split2 bitdi

Xüsusiyyət sinifində:

Xüsusiyyət sinfi xaricindədir:


Təsvir etdiyiniz prosesə tam bərabər deyil, ancaq ArcGIS-də var Zar avtomatik olaraq uzun sətirləri X təpələrinin hissələrinə ayırmaq üçün alət. Hərçənd bir faiz həddindən istifadə etmir, ancaq bir təpə həddindən istifadə edir. Yenə də tək niyyətiniz xətləri təxminən bərabər ölçülərdə bölməkdirsə, faydalı ola bilər:

http://resources.arcgis.com/EN/HELP/MAIN/10.2/index.html#//001700000037000000


Videoya baxın: Integrating Deep Learning with ArcGIS using Python (Sentyabr 2021).