Eu continuo pensando que devo estar faltando alguma coisa, mas não parece haver uma ferramenta no ArcGIS 10 para selecionar recursos (em particular polígonos) de uma camada em um ponto (X, Y) no ArcPy. Os parâmetros para essa ferramenta seriam apenas um nome de camada e um local XY.
No momento, eu resolvo isso criando uma classe de recurso de ponto que contém o ponto e executando um SelectLayerByLocation nele. No entanto, quando a classe de recurso de polígono está no Oracle (acessada via ArcSDE 9.x) e contém 3,5 milhões de polígonos, o tempo necessário para fazer a seleção pode ser superior a 5 minutos quando penso que um segundo ou dois (com menos código) seria mais apropriado. A classe feature tem um índice espacial e tentei usar o arcpy.env.extent (que SelectLayerByLocation parece ignorar) para restringir a área geográfica acessada, mas o desempenho permanece muito baixo.
Existe uma maneira mais rápida de fazer isso usando o ArcGIS Desktop 10 e o ArcPy?
Respostas:
Outra abordagem para isso seria usar a ferramenta Spatial Join. Use o ponto como sua camada de recurso de entrada como acima e a camada de polígono como seus recursos de identidade.
Ao contrário SelectLayerByLocation, SpatialJoin faz honrar o ambiente medida.
JOIN_ONE_TO_MANY pode parecer contra-intuitivo, mas como você tem apenas um recurso de junção, a principal função dessa opção é desativar as regras de agregação e mesclagem. KEEP_COMMON garantirá que sua saída seja restrita apenas ao polígono que cruza seu ponto. O Fieldmappings restringirá os atributos de saída apenas à forma e aos atributos da camada de polígono; o padrão incluiria também os atributos da camada de ponto.
O restante dos padrões funcionará bem, portanto, você pode deixar de fora os argumentos restantes.
fonte
Acabei de perceber uma coisa ...
Se você estiver usando isso para implementar um Serviço de Geoprocessamento, também poderá implementar um Serviço de Recurso com sua camada de polígono e usar a operação Consulta no serviço de recurso.
Você pode usar um local XY simples com a operação Consulta ao Serviço de Recursos, bem como controlar os atributos de saída, incluindo a forma.
Você pode ter restrições sobre o quanto pode expor a classe de recurso do polígono, mas se você já o está tornando acessível ao serviço de geoprocessamento, também poderá criar um serviço de recurso.
fonte
Esta resposta veio dos antigos fóruns de discussão do ArcGIS .
Obrigado Jason Scheirer por um código mais conciso:
E especialmente a Chris Snyder, por uma dica de desempenho:
fonte