Vairāk

Izvēlieties punktu (-us) no norādītās koordinātas un pārejiet uz jauno koordinātu, izmantojot arcpy

Izvēlieties punktu (-us) no norādītās koordinātas un pārejiet uz jauno koordinātu, izmantojot arcpy


Mērķis: pārvietojiet adreses punktus uz pareizo atrašanās vietu.

Plāns: Man ir slānis AddressPoints, no kuriem daži jāpārceļ uz jaunu vietu. Es vēlos paņemt līnijas slāni (sauktu AddressPoints_AdjustLocation, kas parādīts kā purpursarkana punktēta līnija zemāk) un novilkt līniju no adreses punktu pašreizējās atrašanās vietas (kas parasti ir tuvu ceļam) līdz vajadzīgajai vietai (kas ir ēka)

Līdzšinējais kods:

| rindas: rindām rindās: feat = row.getValue ("SHAPE") vertex_list = [] virsotnei feat.getPart (0): ja virsotne: vertex_list.append ([vertex.X, vertex.Y]) vertexStart = vertex_list [0] # TODO: Atlasiet visus adreses punktus lyr_AddressPoints, kas krustojas vertexStart atrašanās vieta vertexEnd = vertex_list [-1] # TODO: katram iepriekš atlasītajam adreses punktam pārvietojiet to uz vertexEnd atrašanās vietu

Divi elementi, kuriem man nepieciešama palīdzība, ir tas, kā atlasīt adreses punktus, kas krustojas ar vertexStart pozīciju, un pēc tam pārvietot šos adrešu punktus uz vertexEnd vietu (izmantojot, pieņemu, izmantojot UpdateCursor).


Tāpēc es atrisināju savu problēmu, izmantojot mazliet citu metodi ... Tātad, ko es daru, ir uzzīmēt līniju no vietas, kur es vēlos pārvietoties, un beigt līniju tur, kur es vēlos, lai beigtos adreses punkts augšā plkst. Kad es palaidu savu kodu, tas iet cauri un atlasa katru rindu pa vienam, pēc tam atlasa visus adreses punktus, kas krustojas ar šo līniju (jebkur šajā līnijā, ne tikai sākumā, ko es mēģināju darīt iepriekš ...), un visus adreses punktus (parasti tikai vienu) pārvieto uz līnijas pēdējo virsotni. Šādi rīkojoties, es varētu izvēlēties vairākus adreses punktus ar vienu un to pašu līniju, ja nepieciešams, un pārvietot tos visus vienā un tajā pašā vietā.

Iemesls, kāpēc man tas ir skriptā, ir tāpēc, ka es lejupielādēju sākotnējos adreses punktus no apgabala vietnes (atkārtoti ik pēc pāris nedēļām) un pēc tam apvienoju tos ar saviem papildinājumiem / labojumiem / dzēšanu, pēc tam apvienoju tos ar citiem apgabaliem, lai izveidotu vienu lielu datu kopa. Tāpēc šādā veidā es varu pārvietot adreses punktus tur, kur es tos vēlos, netraucējot sākotnējiem datu veidotājiem.

| rindas: rindām rindās: arcpy.SelectLayerByAttribute_management ("lyr_AddressPoints_AdjustLocation", "NEW_SELECTION", "" OBJECTID  "=" + str (row.getValue ("OBJECTID"))) arcpy.SelectLayerBressLocation_management_management "," lyr_AddressPoints_AdjustLocation ") drukāt (" BRĪDINĀJUMS !!!: LOCATION ADJUST OBJECTID "+ str (row.getValue (" OBJECTID ")) +" NEVAĻAUJIET NEKĀDU ADRESES PUNKTU !!! ", ja arcpy.GetCount_management (" lyr_AddressPoints " ) .getOutput (0) == '0' cits "OBJECTID" + str (row.getValue ("OBJECTID")) + "atlasīts" + arcpy.GetCount_management ("lyr_AddressPoints"). getOutput (0) + "līdzeklis (-i) ) atrašanās vietas adj "), ja arcpy.GetCount_management (" lyr_AddressPoints ") .getOutput (0) <> '0': # Iegūstiet x, y no pašreizējās pielāgošanas vietas funkcijas feat = row.getValue (" SHAPE ") vertex_list = [] virsotnēm feat.getPart (0) virsotnēs. : ja virsotne: vertex_list.append ([vertex.X, vertex.Y]) pntLastVertex = arcpy.Point (vertex_list [-1] [0], vertex_list [-1] [1]) # Konvertēt pēdējo virsotni par punktu aprows = arcpy.UpdateCursor ("lyr_AddressPoints") aprow aprows: aprow.setValue ("SHAPE", pntLastVertex) aprows.updateRow (aprow)

Ar nosacījumu, ka adrešu punkti vienmēr attiecas uz tuvāko ēku (kas, iespējams, ne vienmēr notiek), jūs varētu izmantot rīku Near GP, lai uzzinātu tuvāko iezīmi ēku slānī (vai arī vispirms varētu izveidot ēku centrālos punktus).

Pēc tam jūs varētu izmantot arcpy.da.UpdateCursor, lai atjauninātu avota adrešu punktu ģeometriju, pamatojoties uz to, kāda funkcija tiem ir vistuvāk. Tuvākās ēkas centrīda XY koordinātas tiks aprēķinātas divos pievienotajos laukos - NEAR_X un NEAR_Y.

Ja vēlaties pārvietot adreses punktus uz ārdurvju atrašanās vietu, jums būs jāglabā durvis vai nu kā punkti (kas tiek izmantoti ar rīku Near), vai arī jūs varat būt laimīgs par ēkas centrmezglu (ja ar to pietiek un nevēlaties manuāli digitalizēt durvju atrašanās vietu).