Mais

Encontrando um equivalente ogr2ogr de SelectLayerByLocation

Encontrando um equivalente ogr2ogr de SelectLayerByLocation


Portanto, estou tentando pegar buffers de pontos de grade individuais e selecionar apenas as regiões com as quais os pontos se cruzam (via SelectByLocation). Geralmente, executo o seguinte código para:

  • Explodir recursos multipartes (não incluídos no código abaixo)
  • criar uma camada de recurso
  • Faça a seleção e
  • em seguida, transforme os recursos selecionados na camada em uma nova classe de recurso

Abaixo está o código para ArcGIS's arcpy:

para a em geogList: para b em radbufListFn: para c em idList: layerName = a + b + "_ erase_exp _" + c + "_ Layer" arcpy.MakeFeatureLayer_management (wp + "geogs / split_geogs_explode.gdb /" + a + b + "_ + cexp , layerName) arcpy.SelectLayerByLocation_management (layerName, "INTERSECT", wp + "geogs / split_points.gdb /" + a + "_" + c, "#", "NEW_SELECTION") arcpy.FeatureClassToFeatureClass_conversion (layerName, wp + "geogs_select_explode / split_select". gdb ", a + b + '_' + c)

Eu vi que há um ST_Intersection e ST_Intersect, mas não tenho certeza se eles fazem o que eu preciso ogr2ogr. Preciso que minha saída seja apenas a parte A do polígono.

Existe um equivalente ogr2ogr de SelectLayerByLocation?

editar: encontrei uma postagem do blog aqui http://www.gisdoctor.com/site/2012/07/29/statement-spatial-join/

Não tenho certeza se este é o código que desejo, mas modifiquei o meu para fins de teste:

ogr2ogr -f "ESRI Shapefile" -sql "selecione PP. *, SP. * do ponto PP junção interna buffer_clip_exp SP com (Índice (geom_sidx)) em PP.geom.STIntersects (SP.geom) = 1" test_out.shp buffer_clip_exp .shp point.shp

E recebo este erro:

nomes de camadas ignorados em combinação com -sql. ERROR 1: Erro de análise de expressão SQL: erro de sintaxe, palavra-chave reservada inesperada, esperando o fim da string. Ocorreu ao redor: selecione PP., SP. do ponto PP junção interna buffer_clip_exp SP com (Índice

um acento circunflexo (^) está abaixo do 'i' em 'interno'


Encontrei algum código aqui. Existe uma opção Python para "unir atributos por localização"? que usa Shapely e Fiona que gerou os pontos e, em seguida, reorganizou o código para gerar o polígono.

Isso parece estar funcionando em uma das 5 geografias de buffer de ponto de grade e passando por cerca de 80.000 pontos de grade.

import fiona de shapely.geometry import shape from copy import deepcopy com fiona.open ("buffer_clip_exp.shp", "r") as n: with fiona.open ("point.shp", "r") as s: # create um esquema para os atributos outSchema = deepcopy (n.schema) outSchema ['propriedades']. update (s.schema ['propriedades']) com fiona.open ("TEST7.shp", "w", s.driver, outSchema, s.crs) como saída: para escola em s: para vizinhança em n: # verifique se o ponto está no polígono e defina o atributo se forma (escola ['geometria']). dentro (forma (vizinhança ['geometria'] )): #escola ['propriedades'] = bairro ['propriedades'] # escrever output.write ({'propriedades': bairro ['propriedades'], 'geometria': bairro ['geometria']})

Assista o vídeo: GDALOGR - Beginners Tutorial