4 votos

Selección de puntos en un lado de la carretera

Soy un novato en la creación de scripts de python en GIS. Tengo 2 shapefile: el primero con carreteras y el segundo con puntos que contienen el número de la dirección y el nombre de la calle.

enter image description here

Quiero seleccionar estos puntos desde el lado derecho o izquierdo de la calle pero en el orden correcto según el inicio y el final de la calle.

enter image description here

En primer lugar, quiero seleccionar los puntos del polígono rojo y comprobarlos (la comprobación es otra tarea y sé cómo hacerla, pero seleccionando estos puntos en el orden correcto )

En segundo lugar, lo mismo. Quiero seleccionar los puntos del polígono azul y comprobarlos también.

NB: Los puntos son una capa, las carreteras son otra capa. también el buffer de las carreteras es otra capa.

Creo que sería una buena idea analizar el buffer y seleccionar por ubicación los puntos que se encuentran en el buffer, pero no sé cómo.

8voto

EDIT: He renovado esta respuesta después de darme cuenta de que la referenciación lineal permite determinar el lado a lo largo de una línea.

El mejor enfoque para este problema es utilizar el Caja de herramientas de referencia lineal en ArcGIS :

Un sistema de referencia lineal almacena los datos utilizando una posición relativa a lo largo de las características de las líneas existentes. Es decir, la ubicación se da en términos de una característica lineal conocida y una posición, o medida, a lo largo de ella. Por ejemplo, la ruta I-10, milla 23,2, identifica de forma única una posición en el espacio geográfico, y puede utilizarse en lugar de una coordenada x,y.

Linear referencing point to line

Así es como lo harías, asumiendo que estamos usando las calles y líneas de abajo:

Example points and lines

  • Ejecutar el Creación de rutas (referencia lineal) herramienta con sus calles como su in_line_features . Elija un campo de identificación único para el route_id_field parámetro. Puede dejar todos los demás parámetros por defecto.

  • Ejecutar el Localizar elementos a lo largo de las rutas (referencia lineal) con sus puntos como el in_features las rutas que creamos anteriormente como el in_routes y el campo ID de la calle como su route_id_field . Debería cambiar su radius_or_tolerance de tal manera que haya suficiente distancia de sus calles para capturar todos sus puntos. Por último, desmarque la opción m_direction_offsetting Esto hará que la designación izquierda/derecha se base en la dirección de digitalización de sus calles en lugar de la dirección más arbitraria de sus rutas.

  • En su tabla de resultados (mostrada a continuación), tendrá una fila para cada punto. El valor de la fila MEAS representa la distancia a lo largo de la calle en la que se encuentra el punto. El valor del campo Distance representa la distancia desde el punto hasta el lugar más cercano de su calle, donde el signo de la distancia indica el lado de la calle . Así, los valores negativos indican puntos a la izquierda de la calle y los valores positivos indican puntos a la derecha de la calle.

Attribute table

Para recorrer los puntos del lado izquierdo, ordene la tabla por RID y MEAS y omitir los valores positivos; hacer lo mismo pero invirtiendo la ordenación de MEAS y omitir los valores negativos para iterar a través de sus puntos del lado del paseo en orden inverso. Probablemente sea más fácil ordenar en Python:

points = []
cursor = arcpy.da.SearchCursor(eventTable, ["RID","MEAS","Distance","OBJECTID"])
for row in cursor:
    if row[2] < 0: #negative value = digitized left
        points.append((row[0],"L",row[1]))
    else: #positive value = digitized right
        points.append((row[0],"R",row[1]*-1.0)) #negate MEAS to reverse direction
points.sort() #will break ties when sorting using 2nd or 3rd element in tuple
print [point[3] for point in points]

Esto da como resultado nuestros puntos ordenados por el ID de la calle, luego el lado izquierdo desde el inicio hasta el final, y luego el lado derecho desde el final hasta el inicio:

[9, 11, 12, 10, 8, 1, 4, 6, 5, 3, 2, 7]

3voto

kervin Puntos 7620

Si tiene una licencia avanzada, puede utilizar Buffer (Análisis) y hacer topes izquierdo y derecho. Luego puede "seleccionar por ubicación" puntos dentro de los topes izquierdo o derecho.

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