Daha çox

ArcGIS for Desktop istifadə edərək bitişik çoxbucaqlar arasındakı sərhədin çıxarılması?

ArcGIS for Desktop istifadə edərək bitişik çoxbucaqlar arasındakı sərhədin çıxarılması?


Nadir populyasiyaları təmsil edən çoxbucaqlı şəkillərim var. Formalı sənədimdə bitişik çoxbucaqlıları təyin etmək və bitişik çoxbucaqlıları ayrı bir çoxsaylı fayl kimi ayıran sərhəd çıxarmaq istəyirəm. Vacibdir ki, yaradılan çox xəttli sənəddən ayırdığı iki çoxbucağı göstərməsini tələb edirəm.

Mən xəbərdaram Çoxbucaqlı Qonşu bütün bitişik cütlərin cədvəlini hazırlamaq üçün, lakin bu mənə sərhədləri polylines kimi çıxarmaqda kömək etmir.

Aşağıdakı nümunə xəritədə A qrupunu nəzərdən keçirin:

A qrupunun 8 bitişik cütü var: AB, AC, AD, AE, AF, AG, AH, AI. Çıxış sənədinin A qrupu üçün məcmu sərhədi 8 ayrı sətirə ayırmasını istərdim, hər sətir hər bitişik cüt arasında yalnız bölüşdürülmüş sərhəddən bəhs edir; məs., AH-nin qırmızı rəngli sərhədləri çıxış məlumatlarında tək sətir olacaqdır. Əvvəl qeyd edildiyi kimi, çıxış faylının hər sətirin ayırdığı iki qrupu da müəyyənləşdirməsi vacibdir.

Dəqiqləşdirmək üçün verilənlər bazamdakı bütün mümkün bitişik cütlər üçün ümumi bir həll tələb edirəm. Mənim maraqlandığım nümunə A qrupu kimi bir qrupum yoxdur.

Bu sual, R və ya GRASS istifadə edərək fərqli poliqonlar arasındakı sərhəd polilininin çıxarılmasına bənzəyir, istisna olmaqla Desktop üçün ArcGIS 10.2 istifadə edərək həll etmək istərdim. Bir ArcPy həllinin asandırsa, Python haqqında bir az məlumatım var.


Bu, çoxbucaqlılarınızı çox tez bir zamanda yaylara çevirəcəkdir. Məzmun cədvəlində 2 təbəqə lazımdır: 1-ci - çox xəttlər, 2 - çoxbucaqlılar

arcpy, traceback, os, sys, arcpy-dən idxal env.overwriteOutput = True çözülmüş = "in_memory / eritilmiş" cəhd edin: def showPyMessage (): arcpy.AddMessage (str (time.ctime ()) + "-" + mesaj) mxd = arcpy.mapping.MapDocument ("CURRENT") theLinksLayer = arcpy.mapping.ListLayers (mxd) [0] PGONS = arcpy.mapping.ListLayers (mxd) [1] arcpy.DeleteFeatures_management (theLinksLayer) da.InsertCursor (theLinksLayer, "SHAPE @") arcpy.da.SearchCursor (PGONS, "Shape @") ilə kursor kimi: kursorda sıra üçün: feat = sıra [0] .boundary () curT.insertRow ((feat, )) arcpy.Dissolve_management (theLinksLayer, ləğv edilmiş, "", "", "SINGLE_PART") arcpy.DeleteFeatures_management (theLinksLayer) m = 0 arcpy.AddMessage ("Çözüm ...") curT = arcpy.da.InsertCursor ( @ ") arcpy.da.SearchCursor ilə (həll edildi," SHAPE @ ") kursor kimi: kursorda sıra üçün: m + = 1 curT.insertRow ((sıra [0],)) arcpy.Delete_management (" in_memory ") arcpy. RefreshActiveView () arcpy.AddMessage (" nPoliqonlar% i sətirdə tikilməyib  n"% m) del curT xaricində: message = " n *** PYTHON ERRORS ***"; showPyMessage () message = "Python Traceback Məlumat:" + traceback.format_tb (sys.exc_info () [2]) [0]; showPyMessage () message = "Python Error Info:" + str (sys.exc_type) + ":" + str (sys.exc_value) + " n"; showPyMessage ()

Buradan sətirləri çoxbucaqlılara (birindən çoxlarına, SHARE_A_LINE_SEGMENT_WITH) məkan olaraq birləşdirmək və sətir adı və ilk, son poliqon kimliklərindən istifadə edərək nəticəni həll etmək kifayətdir: