Estoy tratando de realizar la función join attributes by location
como aparecen en el menú QGIS vectorial > herramientas de administración de datos. Estoy buscando una opción de python de código abierto para esto. Sé arcpy tiene un spatial join
función pero yo estoy tratando de realizar este fuera del entorno de ESRI.
Respuesta
¿Demasiados anuncios?Puede que desee echar un vistazo a bien formada y Fiona. Fiona es un contenedor para gdal para hacer espaciales exportación e importación de archivos fácil. Bien formada proporciona la geometría de la funcionalidad. Aquí es un ejemplo muy simple para dar la idea. Se une polígono atributos para todos los puntos dentro de ese polígono.
Los datos de ejemplo que he usado son estos polígonos y estos puntos.
import fiona
from shapely.geometry import shape
from copy import deepcopy
with fiona.open("planning_neighborhoods.shp", "r") as n:
with fiona.open("Schools_Private_Pt.shp", "r") as s:
# create a schema for the attributes
outSchema = deepcopy(s.schema)
outSchema['properties'].update(n.schema['properties'])
with fiona.open ("Schools_withNbhd.shp", "w", s.driver, outSchema, s.crs) as output:
for school in s:
for neighborhood in n:
# check if point is in polygon and set attribute
if shape(school['geometry']).within(shape(neighborhood['geometry'])):
school['properties']['neighborho'] = neighborhood['properties']['neighborho']
# write out
output.write({
'properties': school['properties'],
'geometry': school['geometry']
})