Perguntas mais frequentes

É necessário incluir o operador st_envintersects ao executar uma declaração de SQL com operadores relacionais espaciais adicionais no Oracle?

Last Published: January 13, 2021

Resposta

Nota: O software ArcSDE, incluindo o servidor de aplicativos, ferramentas de comando e SDK com APIs C e Java, foi descontinuado no ArcGIS 10.2.2 e não é mais distribuído.

Ao compor uma declaração de SQL com um operador espacial relacional, como st_intersects, st_within, st_crosses, etc., não é necessário incluir o operador espacial adicional st_envintersects como um filtro para identificar geometrias candidatas para o operador espacial relacional. Se o operador st_envintersects for incluído na consulta, ele será redundante e adicionará custo de computação desnecessário à consulta. Ao usar um índice espacial, os operadores relacionais espaciais primeiro filtram as formas candidatas, aplicando o envelope de geometrias de entrada como o filtro primário, antes de executar a comparação relacional espacial.

Os exemplos de SQL a seguir demonstram como o operador st_envintersects é aplicado como um filtro predicado e em uma subconsulta, mas não é necessário em nenhum dos casos. O objetivo da declaração de SQL é identificar todos os centróides de lotes em uma vizinhança.

O primeiro exemplo adiciona o operador st_envintersects como um filtro predicado. O filtro predicado é redundante para o operador st_within pois o operador st_within usa o envelope de forma da vizinhança de entrada para identificar todas as formas parcel_cent candidatas antes de realizar a comparação relacional.

Código: SQL> SELECT a.owner, a.address 2 FROM parcel_cent a, neighborhoods b 3 WHERE b.name = 'SOUTHGATE' 4 AND sde.st_within(a.shape,b.shape) = 1 5 AND sde.st_envintersects(a.shape,b.shape) = 1;

O segundo exemplo aplica o filtro st_envintersects em uma subconsulta para retornar um conjunto de geometrias candidatas e valores de ObjectID como o filtro para a consulta primária que contém o operador espacial relacional.

Código: SQL> SELECT owner, address 2 FROM parcel_cent 3 WHERE objectid IN 4 (SELECT objectid 5 FROM parcel_cent a, neighborhoods b 6 WHERE b.name = 'SOUTHGATE' 7 AND sde.st_envintersects(a.shape,b.shape) = 1);

Ambos os exemplos resultam em consultas que consomem recursos computacionais adicionais sem aumentar o desempenho das consultas. A sintaxe SQL adequada para executar uma consulta dessa natureza é especificar o filtro predicado e o operador relacional espacial.

Código: SQL> SELECT a.owner, a.address 2 FROM parcel_cent a, neighborhoods b 3 WHERE b.name = 'SOUTHGATE' 4 AND sde.st_within(a.shape,b.shape) = 1;

ID do Artigo:000010468

Obtenha ajuda de especialistas do ArcGIS

Entre em contato com suporte técnico

Baixe o Esri Support App

Ir para opções de download

Informações Relacionadas

Descubra mais sobre este tema