Daha çox

Müəyyən bir nöqtəyə qədər bir faiz nisbətində ölçüsünü azaldan mütənasib daxili tamponları necə yaradacağam


ArcGIS-də çalışıram və hər çoxbucaqda 75 hövzə çoxbucağı və bir nöqtə xüsusiyyəti (mənşə nöqtəsi deyilir) var. (Çoxbucaqlıların mərkəzində mütləq deyil). Hövzə çoxbucaqlarının içərisində mənşəyindən 1%, 2% və s. Hövzə çoxbucağının 100% -ə qədər olan məsafədə 100 poliqon yaratmaq istəyirəm. Beləliklə,% 1 çoxbucaqlı mənşə nöqtəsindən yolun% 1 sərhədinə sahib olardı. % 100 poliqon orijinal hövzə poliqonu olardı.

Bunun üçün bir funksiyanın olması lazım olduğunu hiss edirəm.

Daxili tamponlar yüzdə deyil, bir məsafəyə əsaslandığı üçün işləmir və çoxbucaqlıları yenidən başlanğıc nöqtəsinə 'azaltmaq' istədiyimi nəzərə almır.

İnsanların QGIS təklif etdiyini gördüm, amma çoxbucaqlıların müəyyən bir nöqtəyə 'mütənasib olaraq daralmasını' istəsəm, bu işləyərmi?

Mən çalışdım:

  1. hövzə çoxbucaqlarını zirvələrə çevirmək.
  2. zirvələrin mənşə nöqtəsinə qədər məsafəsini hesablamaq və X / Y koordinatlarına əlavə etmək üçün yaxın bir analiz aparmaq
  3. Nümunələr kimi ulduz yaradan hər təpəyə mənsub olan xy xətlərinin yaradılması.
  4. Daha sonra xətləri 100% böldüm və zirvələrə çevrilib yeni sətirlər yaratmaq üçün təpələrə qoşulacağam.

Məsələ burasındadır ki, hövzə poliqonları nizamlı deyildir, bəzən xətlər çoxbucaqdan çıxır və bu metodu işə yaramır.

Bunu kodlaşdırmadan edəcəyimi ümid edirəm.


Şəkildən göründüyü kimi

tapşırıqda öz qabarıq gövdəsinə bərabər olan formalar üçün bir həll var. Əgər belə deyilsə, nöqtənin mövqeyi və çoxbucaqlının 'qabarıq olmaması' əsərlər yarada bilər. Çıxış nöqtələrinin minimum genişlənmə ağacından istifadə etməklə bir qədər yaxşılaşdırıla bilər, amma bu günümüz üçün hiylə və çox şeydir.

arcpy, traceback, os, sys from arcpy import env.overwriteOutput = True try: def showPyMessage (): arcpy.AddMessage (str (time.ctime ()) + "-" + message) mxd = arcpy.mapping.MapDocument ("CURRENT") təbəqələr = arcpy.mapping.ListLayers (mxd) nöqtələri, tutulmalar = "mərkəzlər", "subcatchments" pointsLr = arcpy.mapping.ListLayers (mxd, points) [0] catchmLR = arcpy.mapping.ListLayers (mxd) , tutucular) [0] dDest = arcpy.Describe (pointsLr) SR = dDest.spatialReference g = arcpy.Geometry () pointsList = arcpy.CopyFeatures_management (pointsLr, g) pgonsList = arcpy.CopyFeatures_management (catchmLR, 10,100,10) gList = [] nPoints = len (pointsList) i üçün üçündür (nPoints): bigList = [] pCentre = pointsList [i] .firstPoint pGon = pgonsList [i] outLine = pGon.boundary () outPoints = outLine .getPart (0) p üçün outPoints: smalList = [] array = arcpy.Array ([pCentre, p]) ray = arcpy.Polyline (array, SR) crosses = ray.intersect (outLine, 1) lMax = ray. xaçlarda pnt üçün uzunluq: lCur = ray.measureOnLine (pnt) əgər lCur <= lMax: pNearest = pnt; lM ax = lCur array = arcpy.Array ([pCentre, pNearest]) short = arcpy.Polline (array) percent in faiz: theP = short.positionAlongLine (float (perc) / 100, True) theP = theP.firstPoint smalList. append (theP) bigList.append (smalList) m = 0 faizlərdəki faiz üçün: array = arcpy.Array () smalList üçün bigList: p = smalList [m] array.add (p) web = arcpy.Polyline (array) arcpy.AddMessage (web.length) gList.append (web) m + = 1 outp = r "d:  out.shp" arcpy.CopyFeatures_management (gList, outp) istisna olmaqla: 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 ()

Cəhənnəmdə çox vaxt qazandığınız üçün bunu yazmağı məsləhət görərdim ... ancaq bunu atribut sahəsinə sahələr əlavə etmək və nöqtədən hövzənin kənarına mütənasib məsafə dəyərini çıxarmaq üçün bir analiz aparmaq olar.

Nöqtədən hövzə kənarına və ya hövzə kənarından nöqtəyə qədər bufer məsafəsi axtarırsınız?

Bu məlumatlarla daha sonra hövzə kənarından nöqtəyə və ya nöqtədən hövzə kənarına qədər olan tampon məsafəsini hesablaya bilərsiniz.

Artıq Yaxın alətindən bəhs etdiyiniz üçün ArcGIS Ətraflı Lisenziyanız olduğunu düşünürəm

Budur nöqtədən hövzənin kənarına qədər bir nümunə. Tamponu hövzənin kənarına kəsməklə bitir ...

  1. Yaxınlıq alətindən istifadə edərək mərkəz nöqtəsinə ən yaxın hövzə kənarına qədər məsafəni hesablayın.
  2. Xətti məsafə dəyərini götürün (hesablamanı proqnozlaşdırılan bir CRS ilə apardığınıza əmin olun) bunu ballar bazasının atribut cədvəlinə əlavə edin.
  3. Sonra hər bir nöqtə üçün 1 artımla nöqtədən hövzə kənarına 100 dəfə sahə kalkulyatorundan istifadə edərək nisbət məsafəsini hesablayın. Hər nöqtə 100 sahə ilə başa çatacaq (yəni hər faiz üçün).
  4. Çox tamponlu halqa ilə analiz, əl ilə hər nöqtə üçün bufer alətinə 100 məsafə dəyərini əlavə edəcəksiniz.
  5. Sonra tamponu hövzə çoxbucağına çəkin (kəsmədən əvvəl hövzəni bir-bir seçərək).

Sadəcə kodlaşdırmanın vaxtınızı və siçan üzərindəki barmaqlarınızı necə verəcəyini ümumiləşdirmək üçün ... yalnız üç addımda 100 sahə əməliyyatı və hər sahə üçün faiz hesablamasını əl ilə əlavə etmək üçün daha 100 əməliyyat var.


Videoya baxın: TAMPON TAMİR NASIL YAPILIR PLASTİK TAMİR MİNİ ONARIM (Oktyabr 2021).