Daha çox

ArcPy istifadə edərək (Xüsusi bir lisenziyasız) işarə etmək xüsusiyyətini yerinə yetirirsiniz?


Centroid-lərini hesabladığım bir çox poliqon var, amma bu dəyərləri bir nöqtə shapefile çıxarmaq üçün bir yol tapmaqda çətinlik çəkirəm. Dabbledarcpy.MakeXYEvents_management, ancaq müvəqqəti bir qat faylı yaradır.


Budur arcpy salamı:

import os, sys, arcpy InFC = sys.argv [1] OutFC = sys.argv [2] # çıxışı qovluğa və ada bölün Qovluq = os.path.dirname (OutFC) Ad = os.path.basename (OutFC) # Desc = arcpy.Describe (InFC) SR = desc.spatialReference ilə uyğunlaşmaq üçün var olanların məkan istinadını əldə edin # arcpy deyilsə yaradın və ya əlavə edin. Var (OutFC): arcpy.CreateFeatureclass_management (Qovluq, Ad, "POINT", spatial_reference = SR) # arcpy.da.InsertCursor (OutFC, "SHAPE @ XY") ilə "yazıçı" nı iCur olaraq açın: # arcpy.da.SearchCursor (InFC, "SHAPE @") ilə "oxucunu" açın sCur: sCurdakı sRow for InFC-də hər çoxbucaqdan # döngü: cent = sRow [0] .centroid # centroid iCur.insertRow əldə edin ([(cent.X, cent.Y)]) # yeni xüsusiyyətə yazın sinif

Bu, yeni bir xüsusiyyət sinfi yaradır, bir imleci açır, InFC-də hər bir həndəsəyə baxır və centroid xüsusiyyətini nəticəyə yazır ... qeyd edək ki, çox hissəli həndəsələrin bir hissə üçün bir santroid olmayacaq, əksinə bütün həndəsə üçün tək bir santroid olacaq. ... hissələri nəzərdən keçirtmək çox çətin deyil - əsasları göstərmək üçün bu misalı kifayət qədər sadə saxlayaq.


Bu hiylə etməlidir:

import arcpy import os def polysToPoints (in_polys, out_points): "" "poligonları centroids-ə çevirir in_polys - giriş poliqonları out_points - çıxış nöqtələri" "" ws, name = os.path.split (out_points) sr = arcpy.Describe ( in_polys) .spatialReference arcpy.management.CreateFeatureclass (ws, ad, 'POINT', şablon = in_polys, spatial_reference = sr) # qeyd sahələrini doldurun = ['SHAPE @'] + [f.name for arcpy.ListFields (out_points ) arcpy.da.InsertCursor (out_points, field) ilə f.type ((OID ',' Geometry ')] içərisində sətir şəklində deyilsə: arcpy.da.SearchCursor (in_polys, field) ilə satır kimi: r in r üçün: irows.insertRow ((arcpy.PointGeometry (r [0] .centroid),) + r [1:]) __name__ == '__main__': polys = r'C:  path_to_your  polys.shp 'xal = olduqda r'C:  path_to_your  points.shp 'polysToPoints (çoxluqlar, nöqtələr)

shapelib kitabxanası bu tapşırıq üçün idealdır.
Depedecies yoxdur, sadəcə shapefiles yaratmaq üçün sadə bir modul:

idxal shapefile coord_list = ((20,40), (0,0),) w = shapefile.Writer (shapefile.POINT) w.field ('ID_FIELD', 'C', '40') id, (x, y) sadalamaq (coord_list): w.record (ID_FIELD = id) w.point (x, y) w.save ("file  to  save")

proyeksiya sənədini (əl ilə) sonra əlavə etmək istəyə bilərsiniz çox sadədir.

Əlavə məlumat üçün təlimatı yoxlayın


Mən hələ bir qədər arppy başlayan biriyəm, bəlkə də bu qədər inkişaf etmiş deyil, amma bunun üçün bir skript aləti yaratdım və mənim üçün işləyir. Alətlər qutunuza yeni bir skript aləti əlavə edin. Python skriptini mənbənin altından düzəldin. Alətləri 1-ci parametrini xüsusiyyət təbəqəsi girişi və 2-ci parametri xüsusiyyət qat çıxışı olaraq təyin edin (bir çıxış parametrinə qurduğunuzdan əmin olun). Diqqət yetirin, bu vasitə əsl centroiddən daha çox giriş qatının içindəki nöqtələri qaytaracaqdır.

import arcpy import os inputFC = arcpy.GetParameterAsText (0) outputPath = arcpy.GetParameterAsText (1) scratchPath = arcpy.env.scratchGDB inputFCSpatialReference = arcpy.Describe (inputFC) .spatialReference ##CopyFopy-də yeni kopyalamaq = arcpy.CopyFeatures_management (inputFC, os.path.join (scratchPath, "FCCopy")) FCLyr = arcpy.MakeFeatureLayer_management (FCCopy, "FCLyr") arcpy.AddMessage ("FC LAYER CREATED") ## əlavə edib X hesablayın və arcpy.AddField_management (FCLyr, "Xcoor", "DOUBLE") arcpy.CalculateField_management (FCLyr, "Xcoor", "! SHAPE! .centroid.X", "PYTHON") arcpy.AddField_management (FCLyr, "Ycoor" DOUBLE ") arcpy.CalculateField_management (FCLyr," Ycoor ","! SHAPE! .Centroid.Y "," PYTHON ") arcpy.AddMessage (" X, Y FIELDS CREATED ") ## XY sahələrindən nöqtə qatı yaradın FCTable = arcpy .MakeTableView_management (FCLyr, "FCTable") pointsLyr = arcpy.MakeXYEventLayer_management (FCTable, "Xcoor", "Ycoor", "pointsLyr", inputFCSpatialReference) arcpy.AddMessage ("TABLE LAYER CREATED") ) ## arcpy.CopyFeatures_management (pointsLyr, outputPath) arcpy.AddMessage ("POINT LAYER CREATED") sinifinə eksport etmə nöqtələri ## sıfırdan məlumatları silməkGBD arcpy.Delete_management (FCCopy)


Videoya baxın: How to create Point, Line u0026 Polygon from Excel .CSV Table in ArcGIS Pro Khmer GIS Academy (Oktyabr 2021).