A sintaxe que uso para consultar polígonos no intervalo de outros pontos
SELECT *
FROM dbo.myTable
INNER JOIN
dbo.myPOI ON myTable.geog.STIntersects(myPOI.geog) = 1
Mas, para consultar pontos de interesse, eu uso um raio e estou usando isso.
SELECT *
FROM dbo.myTable
INNER JOIN
dbo.myPOI2 ON myTable.geog.STDistance(myPOI2.geog) <= POI2.Point_Radius
Existe uma maneira melhor de escrever isso? As consultas podem ser melhoradas?
Sim. Isso vai ser lento. Você pode melhorar massivamente essa consulta armazenando o ponto em buffer e encontrando o
intersects
:Você pode tornar isso ainda melhor no seu caso porque o raio é fornecido na linha, e não na consulta. Você pode armazenar a geometria retornada por
STBuffer
na tabela em vez do ponto. Se você quiser encontrar o ponto central (que provavelmente nunca precisará), poderá usar a função GIS STCentroid .Outras implementações
Como nota lateral, este tipo de consulta é feito
ST_DWithin
no PostGIS e será executado no índice.