Mais

Campo de atributo baseado em polígono de interseção

Campo de atributo baseado em polígono de interseção


Preciso adicionar um polígono para cada marcador (o que funciona bem) e, em seguida, atribuir um campo com base em quais CEPs o polígono do marcador se cruza.

Não sei se estou no caminho certo. O código é concluído para que não haja nenhum erro para mostrar a você, mas o campo para cada polígono está vazio.

cur = arcpy.da.InsertCursor (outFC, ["SHAPE @", "ZipCode"]) array = arcpy.Array () para bkmk em arcpy.mapping.ListBookmarks (mxd): array.add (arcpy.Point (bkmk. extension.XMin, bkmk.extent.YMin)) array.add (arcpy.Point (bkmk.extent.XMin, bkmk.extent.YMax)) array.add (arcpy.Point (bkmk.extent.XMax, bkmk.extent. YMax)) array.add (arcpy.Point (bkmk.extent.XMax, bkmk.extent.YMin)) array.add (arcpy.Point (bkmk.extent.XMin, bkmk.extent.YMin)) polygon = arcpy.Polygon (matriz) # Calcular CEP arcpy.MakeFeatureLayer_management (zipCodesSHP, "zipCodesLYR") arcpy.SelectLayerByLocation_management ("zipCodesLYR", "INTERSECT", polígono, "", "NEW_SELECTION") zipCodes = [linha]. da.SearchCursor ("zipCodesLYR", "Zip_Code")] zipCode = "," .join ("" "+ str (zipCodes) +"  "") # Inserir polígono e informações cur.insertRow ([polygon, zipCode] ) array.removeAll ()

Esta linha é o seu erro:

zipCode = "," .join ("" "+ str (zipCodes) +" "")

Resumindo, 'join' está esperando uma sequência iterável e você está destruindo isso com str (zipCodes). Em vez disso, a linha deve ser algo como:

zipCode = ',' .join ([str (i) para i em zipCodes])

[Observação: str (zipCodes) é realmente iterável, mas no seu caso não faz sentido porque a junção está iterando 'cortando' a string resultante em vez da sequência pretendida (lista) de códigos postais.]


Eu testei aproximadamente o seu problema e o código abaixo funcionou para mim. Basta mudar o caminho. O resultado final é o nome bookmark_joined exclua os campos desnecessários dele. Eu gerei uma caixa delimitadora de favoritos e, em seguida, centróide deles, para garantir a total insidiedade da localização dos favoritos em formato de zíper. Limpe o pc, ou seja, exclua os dados intermediários após a execução do script.

import arcpy, os arcpy.env.overwriteOutput = True # O mapa com os favoritos mxd = arcpy.mapping.MapDocument (r "C:  Usuários  USER_NAME  Desktop  gissta  rkws.mxd") outFC = r'C:  Usuários  USER_NAME  Documentos  ArcGIS  Default.gdb  bookmark 'bookmark_centroid = r'C:  Usuários  USER_NAME  Documentos  ArcGIS  Default.gdb  bookmark_centroid' bookmark_joined = r'C:  Usuários  USER_NAME  Documentos  ArcGIS  Default.gdb  bookmark_joined 'template = r'C:  Users  USER_NAME  Documents  ArcGIS  Default.gdb  template' if arcpy.Exists (outFC): arcpy.Delete_management (outFC) arcpy.CreateFeatureclass_management (os.path.dirname (outFC), os.path.basename (outFC), "POLYGON", template, spatial_reference = template) cur = arcpy.da.InsertCursor (outFC, ["SHAPE @", "Name"]) array = arcpy.Array ( ) para bkmk em arcpy.mapping.ListBookmarks (mxd): array.add (arcpy.Point (bkmk.extent.XMin, bkmk.extent.YMin)) array.add (arcpy.Point (bkmk.extent.XMin, bkmk. extension.YMax)) array.add (arcpy.Point (bkmk.extent.XMax, bkmk.extent.YMax)) array.add (arcpy.Point (bkmk.extent.XMax, bkmk.extent.YMin)) # Para fechar o polígono, adicione o primeiro ponto novamente array.add (arcpy.Point (bkmk.extent.XMin, bkmk.extent.YMin)) cur.insertRow ([arcpy.Polygon (array) , bkmk.name]) array.removeAll () del cur arcpy.FeatureToPoint_management (outFC, bookmark_centroid, "CENTROID") arcpy.Intersect_analysis ([bookmark_centroid, template], bookmark_joined)

Assista o vídeo: Retas paralelas intersecção por uma reta transversal