quinta-feira, 29 de agosto de 2019

PostGis - Database Geoespacial


Bom dia colegas,

Nesse post venho falar sobre databases geoespaciais;

Esses são databases dedicados a trabalharem com tipos de dado geométricos ou geográficos, basicamente são utilizados em funções que envolvam cálculos relativos a locais espaciais;

No nosso caso necessitamos de um database geoespacial para encontrar (selecionar) os serviços que estejam em até X metros de distância de um ponto na terra informado pelo usuário, realizar esse tipo de consulta com database comum não é viável e portanto a necessidade desse tipo de database especial que contem funções especificas para isso;

Após certa pesquisa decidimos utilizar a extrenção postGis para o database postGree, para instalar em uma instância Windows segui o seguinte tutorial:

https://www.bostongis.com/PrinterFriendly.aspx?content_name=postgis_tut01

Após instalado, fazendo uso de certa pesquisa e testes, cheguei a seguinte query utilizando a função ST_Distance que nos informa a distância em metros entre 1 ponto definido por longitude e latitude (no nosso exemplo, longitude = -46.622282,latitude = -23.6297502) e todos os demais pontos salvos em uma tabela (no nosso exemplo, utilizado a coluna “point” da tabela ‘public."pontosUsuarios"’) e mostrar o resultado ordenado por proximidade, segue query:

SELECT ST_Distance(
                ST_Transform(ST_SetSRID(ST_MakePoint(-46.622282,-23.6297502),4326),3857),
                ST_Transform(public."pontosUsuarios".point, 3857)
), *
FROM public."pontosUsuarios"
ORDER BY ST_Distance(
                ST_Transform(ST_SetSRID(ST_MakePoint(-46.622282,-23.6297502),4326),3857),
                ST_Transform(public."pontosUsuarios".point, 3857)
) ASC

Espero que isso possa ajudar em futuras implementações caros colegas.

Nenhum comentário:

Postar um comentário