Coordenadas de intersección línea versus polígono


8

Estoy trabajando con Python, Shapely y Fiona ... ¿Hay alguna forma en que pueda dar una entrada de un archivo de forma de línea y un archivo de forma de polígono, y obtener un resultado de los puntos de intersección y sus coordenadas? La ilustración proporciona una descripción precisa ...

ingrese la descripción de la imagen aquí

Respuestas:


7

La intersección de un Polígono y un LineString es un LineString y la intersección de dos LineStrings es un Punto (o MultiPoint), por lo que debe transformar su Polígono en un LineString -> Shapely: LinearRings

from shapely.geometry import shape
import fiona
# polygon layer
poly = fiona.open("polygons.shp")
# line layer
line = fiona.open("lines.shp")
# First Feature of the shapefiles
s_poly = shape(poly.next()['geometry'])
s_line = shape(line.next()['geometry'])
print s_poly.intersection(s_line)
LINESTRING (360.4742985178883 -286.9847328244275, 450.1982781776156 -140.6494330268984)
# transform the polygon into a LineString
ring = LineString(list(s_poly.exterior.coords))
print ring.intersection(line)
MULTIPOINT (360.4742985178883 -286.9847328244275, 450.1982781776156 
# or, more formal
from shapely.geometry.polygon import LinearRing
lring = LinearRing(list(s_poly.exterior.coords))
print lring.intersection(s_line)
MULTIPOINT (360.4742985178883 -286.9847328244275, 450.1982781776156 -140.6494330268984)

Si tiene muchos polígonos y muchas polilíneas:

Multi_pol_ext = MultiLineString([list(shape(pol['geometry']).exterior.coords) for pol in fiona.open("polygons.shp")])
Multi_lines = MultiLineString([shape(line['geometry']) for line in fiona.open("lines.shp")])
Multi_pol_ext.intersection(Multi_lines)
<shapely.geometry.multipoint.MultiPoint object at 0x1091a5210>

Las correcciones menores en el código incluyeron solo una adición de una llave y la corrección de la variable lring que anteriormente era lring2 sin ninguna variable de ese tipo ... Bueno para empezar ... Un simple comando de escritura usando fiona.open completa la tarea ... Gracias @gene
Akhil
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.