4 votos

Calcular la longitud de la línea dentro de múltiples polígonos superpuestos utilizando ArcGIS Desktop?

Mi pregunta es similar a ¿Calcular la longitud de las aristas de un polígono dentro de un polígono superpuesto con ArcGIS Desktop?

Sin embargo, mi problema difiere en que tengo múltiples polígonos superpuestos (más de 7) que comparten la misma línea.

He aquí un ejemplo:

hello

Los polígonos representan topes de 50 metros alrededor de un punto y la línea representa el borde de otro polígono que he recortado.

Estoy intentando calcular la longitud de la línea azul contenida en múltiples polígonos (amarillos). El problema que tengo es que no puedo calcular la longitud de la línea dentro de cada polígono individual. He probado con Spatial Join e Intersect que no han funcionado. Spatial Join da como resultado la longitud total de la línea independientemente del polígono. Intersect segmenta la línea por el borde del polígono, por lo que corta las partes que deberían incluirse dentro de un polígono determinado, es decir, la longitud no se calcula para un polígono que está superpuesto.

Estoy utilizando ArcGIS Desktop 10.6.

0 votos

Utilizar las estadísticas de disolución o de resumen (el campo del caso es la identificación del polígono) después de la intersección. Estas tareas básicas se pueden resolver con las herramientas disponibles. El scripting es el último recurso.

1voto

Anton8000 Puntos 165

Puedes utilizar arcpy y el da.ActualizarCursor para iterar sobre cada polígono e intersectar con una clase de característica de línea disuelta, calcular la longitud y escribir en un nuevo campo en la clase de característica de polígono. Consulte la documentación de Polígono y los objetos Polyline para entender la disyunción, la intersección, etc.

import arcpy
polyfc = r'points_Buffer300m' #Name of polygon layer
linefc = r'line' #Name of line layer
linelength_field = 'linelen' #Name of field to hold lengths. Will be added below

arcpy.AddField_management(in_table=polyfc, field_name=linelength_field, field_type='DOUBLE')
arcpy.Dissolve_management(in_features=linefc, out_feature_class=r'in_memory\diss')
linegeometry = [i[0] for i in arcpy.da.SearchCursor(r'in_memory\diss','SHAPE@')][0]

with arcpy.da.UpdateCursor(polyfc,['SHAPE@',linelength_field]) as cursor: #Iterate over each polygon
    for row in cursor:
        if not linegeometry.disjoint(row[0]): #Check if polygon intersects polyline
            row[1]=linegeometry.intersect(row[0],2).length #Intersect the dissolved line geometry with polygon and calculate length of output line
        else:
            row[1] = 0
        cursor.updateRow(row)

enter image description here

1 votos

@mwbarnes ¡bien! Por favor, acepta mi respuesta con la casilla de verificación

0voto

FelixIP Puntos 4035

En la imagen de abajo la longitud de cada línea es igual a 100 m y el radio de cada círculo es de 75 m:

enter image description here

He intersecado líneas y círculos y he disuelto el resultado utilizando el id del polígono (NAME) como campo de caso. Como se esperaba, la longitud total de las líneas es igual a 150 m dentro de cada polígono: enter image description here

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X