3rd Oct 2024 11 minutos de leitura Um guia para o PostGIS: Exemplos básicos de consulta de dados geoespaciais Michał Wasiluk postgresql consultas em sql Índice Nossa amostra de dados geoespaciais Consultas espaciais básicas com o PostGIS Visualização de dados geoespaciais Conversão de dados geoespaciais em texto Relações espaciais ST_Intersecção ST_Contains ST_Within Cálculos de distância e área Cálculos de distância Cálculos de área Análise espacial avançada Buffering e análise de proximidade Operações de sobreposição Análise de rede Continue explorando dados espaciais com o PostGIS Os dados geoespaciais estão se tornando cada vez mais importantes em muitos campos, do planejamento urbano à ciência ambiental. Neste artigo, demonstraremos consultas básicas do PostgreSQL PostGIS para trabalhar com esse tipo de dados. Os dados geoespaciais, que contêm informações sobre locais na Terra, requerem ferramentas especializadas para uso eficaz. O PostGIS é uma poderosa extensão do PostgreSQL que transforma um banco de dados Postgres em um Sistema de Informações Geográficas (GIS) completo. Com o PostGIS, você pode armazenar objetos geográficos, executar consultas espaciais e realizar análises avançadas diretamente no SQL. Isso o torna uma ferramenta essencial para quem trabalha com dados baseados em localização. A instalação do PostGIS permite que você execute operações espaciais que normalmente exigem um software GIS especializado. Se você precisa calcular distâncias, medir áreas ou analisar relações espaciais, o PostGIS o equipa com as ferramentas necessárias para lidar com dados espaciais complexos de forma eficiente. Se você deseja aprofundar seus conhecimentos em PostGIS, considere a possibilidade de se inscrever em nosso curso PostGIS. Ele o levará dos conceitos básicos de GIS às técnicas avançadas de PostGIS. Depois de concluí-lo, você saberá como aproveitar o poder do PostGIS em seus projetos. Neste guia, apresentaremos a você os conceitos básicos do PostGIS. Começaremos com consultas espaciais simples e passaremos para técnicas avançadas, como análise de proximidade e análise de rede. Se quiser saber ainda mais sobre dados geoespaciais, consulte nosso artigo Introdução a bancos de dados espaciais e dados geoespaciais. Nossa amostra de dados geoespaciais Neste artigo, trabalharemos com um conjunto de dados espaciais extraído de São Francisco, Califórnia. Usaremos várias tabelas: sf_tram_stops: Essa tabela contém os locais das paradas de bonde em toda a cidade; ela também armazena as coordenadas do local e se é possível fazer transferências entre linhas nessa parada. Ela tem as seguintes colunas: id - Um identificador exclusivo para cada parada. coordinates - As coordenadas de localização da parada. transfer_possible - Se um passageiro pode trocar de bonde nessa parada. sf_planning_districts: Essa tabela define os limites dos distritos de planejamento de São Francisco; essas informações são essenciais para análises urbanas. Ela tem as seguintes colunas: id - Um identificador exclusivo para cada distrito de planejamento. name - O nome do distrito. boundaries - Os limites do distrito (como coordenadas de localização). sf_bicycle_routes: Essa tabela armazena informações sobre as rotas de bicicleta da cidade; você precisará dela para analisar a infraestrutura de bicicleta da SanFran. Ela tem as seguintes colunas: id - Um identificador exclusivo para cada rota de bicicleta. course - O percurso da rota. condition_rating - A classificação da rota (com base em suas condições). sf_restaurants: Esta tabela lista informações sobre os restaurantes de São Francisco, incluindo seus nomes, locais, classificações e tipos de cozinha. Ela tem as seguintes colunas: id - Um identificador exclusivo para cada restaurante. name - O nome do restaurante. food_type - O tipo de culinária servida nesse restaurante. rating - A classificação do restaurante. coordinates - As coordenadas de localização do restaurante. sf_sights: Essa tabela registra informações sobre marcos notáveis e pontos de interesse (POIs) na cidade. Ela tem as seguintes colunas: id - Um identificador exclusivo para cada ponto de interesse. name - O nome do PI. coordinates - A localização do PI. sf_atms: Essa tabela armazena detalhes dos caixas eletrônicos da SanFran, incluindo a localização de cada caixa eletrônico e a empresa que o opera. Ela tem as seguintes colunas: id - Um identificador exclusivo para cada caixa eletrônico. company - A empresa que opera esse caixa eletrônico. coordinates - A localização do caixa eletrônico. Esses dados servem como base para as consultas espaciais que exploraremos. Usaremos essas consultas para analisar a proximidade entre pontos de referência e comodidades, calcular áreas dentro de distritos de planejamento e muito mais. Cada consulta demonstrará como o PostGIS o ajuda a extrair percepções significativas dos dados espaciais. Consultas espaciais básicas com o PostGIS Depois que seus dados geoespaciais estiverem armazenados no PostgreSQL com o PostGIS, você poderá começar a consultá-los! As consultas espaciais permitem selecionar, filtrar e manipular dados com base em sua localização, forma e relações espaciais. Então, vamos começar a trabalhar com dados geoespaciais. Visualização de dados geoespaciais Primeiro, vamos ver como são os dados geoespaciais. Aqui, selecionamos IDs de paradas de bonde e coordenadas para as paradas onde os passageiros podem fazer transferência: SELECT id, coordinates FROM sf_tram_stops WHERE transfer_possible = true; Veja como é o resultado: idcoordinates 10101000020E610000030D80DDB16995EC0742497FF90CE4240… 40101000020E61000000DAB7823F3985EC010AFEB17ECCE4240… 50101000020E6100000FDD98F1491995EC07AC7293A92CF4240… … Como você pode ver, os dados geoespaciais na coluna de coordenadas não são realmente legíveis. Para que sejam realmente utilizáveis, você precisaria de um software especializado para plotá-los no mapa. Felizmente, nosso curso PostGIS vem com um mapa integrado; agora você pode ver a localização dessas paradas de bonde: Conversão de dados geoespaciais em texto Talvez você queira ver as coordenadas de localização das paradas de bonde acima sem um mapa. Você pode usar a seguinte consulta para converter os dados em coordenadas legíveis por humanos: SELECT id, ST_AsText(coordinates), ST_Y(coordinates), ST_X(coordinates) FROM sf_tram_stops WHERE transfer_possible = true; Essa consulta usa a função PostGIS ST_AsText para obter as coordenadas em um formato legível. Ela usa ST_Y e ST_X para extrair os valores de latitude e longitude. Aqui está um resultado parcial: idst_astextst_yst_x 1POINT(-122.39202 37.6138)37.6138-122.39202 2POINT(-122.38984 37.61658)37.61658-122.38984 3POINT(-122.39948 37.62165)37.62165-122.39948 … Relações espaciais O PostGIS oferece várias funções para explorar as relações espaciais de objetos geoespaciais. Vamos examiná-las rapidamente. ST_Intersecção Essa função retorna a parte compartilhada (ou seja, a interseção) de duas geometrias. A consulta a seguir mostra todas as rotas de bicicleta (ou suas partes) dentro dos limites do distrito de Downtown: SELECT sfbr.id, ST_Intersection(sfpd.boundaries, sfbr.course) FROM sf_bicycle_routes sfbr JOIN sf_planning_districts sfpd ON ST_Intersects(sfpd.boundaries, sfbr.course) WHERE sfpd.name = 'Downtown'; A função ST_Intersection encontra a área onde duas formas se sobrepõem - nesse caso, onde as rotas de bicicleta cruzam os limites do distrito "Downtown". A função ST_Intersects verifica se as rotas de bicicleta e os limites do distrito se tocam ou se cruzam, certificando-se de que apenas aqueles que o fazem sejam incluídos. E aqui está um resultado parcial como texto: idst_intersection 4090102000020E61000000C000000438F3471DF9A5EC058F13A2… 4410102000020E6100000100000007451E9429B995EC0EF7A00F.. 4120102000020E610000009000000ED6FEAA8999A5EC06469EB2.. … E como um mapa: ST_Contains A função ST_Contains verifica se uma geometria contém totalmente outra. Para listar os distritos de planejamento que contêm caixas eletrônicos da empresa Crown Financial, é possível executar essa consulta: SELECT DISTINCT sfn.name FROM sf_planning_districts sfn JOIN sf_atms sfa ON ST_Contains(sfn.boundaries, sfa.coordinates) WHERE sfa.company = 'Crown Financial Inc.'; Aqui está o resultado: name Downtown Northeast ST_Within A função ST_Within também verifica se uma geometria está totalmente dentro de outra. Essa consulta localiza restaurantes com uma classificação acima de 4,0 no distrito Nordeste: SELECT sep.name, sep.coordinates FROM sf_planning_districts spd JOIN sf_restaurants sep ON ST_Within(sep.coordinates, spd.boundaries) WHERE rating > 4.0 AND spd.name = 'Northeast'; Essa consulta retorna os nomes e as coordenadas dos restaurantes, facilitando a visualização em um mapa. namecoordinates Fast Duck0101000020E6100000B9FC87F4DB995EC02E73BA2C26E64240 Red Curry0101000020E6100000569FABADD8995EC0E1455F419AE54240 The Saloon0101000020E6100000D52137C30D9A5EC0431CEBE236E64240 Cálculos de distância e área O cálculo de distâncias e áreas é outro aspecto fundamental do trabalho com dados geoespaciais. Esses cálculos podem ajudar a responder perguntas como "Qual é a distância deste caixa eletrônico de uma determinada vista?" ou "Qual é a área deste distrito de planejamento?" Cálculos de distância A função ST_Distance retorna a distância entre dois objetos geoespaciais. Ela recebe dois argumentos de geometria: ST_Distance(geometryA, geometryB). Para visualizar todos os caixas eletrônicos localizados a 300 metros do Fisherman's Wharf, use a seguinte consulta: SELECT sa.id, sa.coordinates, ST_Distance( ST_Transform(sa.coordinates, 26910), ST_Transform(ss.coordinates, 26910)) AS distance FROM sf_sights ss JOIN sf_atms sa ON ST_Distance( ST_Transform(sa.coordinates, 26910), ST_Transform(ss.coordinates, 26910)) < 300 WHERE ss.name = 'Fisherman''s Wharf'; Nessa consulta, a função ST_Transform converte as coordenadas fornecidas em um sistema de coordenadas específico adequado para cálculos espaciais. O sistema de coordenadas garante que todas as operações espaciais (como cálculos de distância) sejam precisas e relevantes para as necessidades específicas da área geográfica e do projeto. Nessa consulta, usamos o sistema de coordenadas definido pelo SRID (Spatial Reference System Identifier) 26910, que corresponde ao sistema NAD83 / UTM zona 10N. Esse sistema é comumente usado para cálculos precisos de distância na área de São Francisco. Como você pode encontrar o SRID correto? Experimente um destes sites: Spatial Reference Website (Site de referência espacial): Use a guia EPSG. io: Digite o nome do país, o código ou o nome do sistema de coordenadas para pesquisar e obter todos os sistemas de referência de coordenadas possíveis. Ao transformar as coordenadas, a consulta garante que o cálculo da distância entre o caixa eletrônico e o Fisherman's Wharf seja preciso. Aqui está o resultado: idcoordinatesdistance 1320101000020E6100000FC00A436719A5EC009FEB7921DE74240189.1839552624224 1330101000020E61000000D897B2C7D9A5EC033A7CB6262E74240277.9680083048927 1350101000020E61000000E15E3FC4D9A5EC0650113B875E74240216.11656973079064 1360101000020E6100000910A630B419A5EC033FE7DC685E74240283.89507791796825 Cálculos de área Para calcular a área de um distrito de planejamento, use a função ST_Area. Ela recebe um argumento de geometria (ST_Area(geometry)) e retorna a área da forma resultante. Aqui está a consulta. Observe que estamos usando SRID = 26910 novamente como nosso sistema de coordenadas: SELECT ST_Area(ST_Transform(boundaries, 26910)) FROM sf_planning_districts WHERE name = 'Buena Vista'; E este é o resultado: st_area 2617829.8666631826 Com SRID = 26910, a unidade padrão é metros. Portanto, o resultado do ST_Area é apresentado em metros quadrados. Análise espacial avançada À medida que você se familiariza com o PostGIS, pode usar seus recursos avançados para realizar análises espaciais aprofundadas. Essas técnicas permitem explorar relações espaciais, realizar análises de proximidade e até mesmo conduzir análises de rede, tornando os insights sobre os dados geoespaciais muito mais práticos. Buffering e análise de proximidade O buffer cria zonas em torno de recursos espaciais. Isso é particularmente útil na análise de proximidade, em que você precisa determinar a proximidade de determinados recursos entre si. Por exemplo, se quiser identificar todos os restaurantes em um raio de 3.000 metros do "Palace of Fine Arts", você pode usar a função ST_DWithin: SELECT sep.name, sep.rating, sep.food_type, sep.coordinates, ST_Distance( ST_Transform(sep.coordinates, 26910), ST_Transform(ss.coordinates, 26910)) AS distance FROM sf_sights ss JOIN sf_restaurants sep ON ST_DWithin( ST_Transform(sep.coordinates, 26910), ST_Transform(ss.coordinates, 26910), 3000) WHERE ss.name = 'Palace of Fine Arts'; E aqui estão seus resultados em forma de tabela e mapa: nameratingfood_typecoordinatesdistance Olive2.10Greek0101000020E6100000C9AB730CC89A5EC0527E52EDD3E542402764.17980825426 La fragranza4.86Italian0101000020E61000008811C2A38D9D5EC038F3AB3940E442402361.1920187470487 Operações de sobreposição No mapeamento, as operações de sobreposição nos permitem ver como diferentes conjuntos de informações geográficas se combinam ou interagem. Imagine que você tenha dois mapas, um que mostre todos os parques de uma cidade e outro que mostre áreas propensas a inundações. Ao colocar um mapa sobre o outro, você pode descobrir quais parques correm o risco de inundação. Esse processo nos ajuda a entender e visualizar onde diferentes características geográficas coincidem; ele torna o planejamento, as análises e a tomada de decisões mais eficazes. A consulta a seguir usa a função ST_Union para mesclar os limites de todos os distritos de planejamento "recreativos" em uma forma geométrica unificada: SELECT ST_Union(boundaries) FROM sf_planning_districts WHERE type = 'recreational'; Da mesma forma, você poderia usar ST_Intersection para fazer a mesma coisa. Análise de rede A análise de rede envolve o exame de rotas, a identificação dos caminhos mais curtos e o aprimoramento da eficiência de viagens em uma rede. É fundamental para compreender e otimizar os sistemas de transporte e a conectividade. O PostGIS, quando associado ao site pgRouting, oferece ferramentas robustas para esse tipo de análise. A extensão pgRouting fornece algoritmos avançados para otimização de rotas. Um dos mais conhecidos é a função pgr_dijkstra, que calcula o caminho mais curto ou mais rápido entre dois pontos, considerando fatores como tipos de estradas, condições de tráfego e outras variáveis. Esse recurso é inestimável para sistemas de navegação, planejamento de logística, gerenciamento de transporte e muito mais. Ao aproveitar essas extensões, os usuários podem aprimorar o planejamento de rotas, reduzir os tempos de viagem e melhorar a eficiência geral da rede. Continue explorando dados espaciais com o PostGIS O PostGIS, com sua integração perfeita ao PostgreSQL, oferece uma plataforma avançada para gerenciar e analisar dados geoespaciais. Ao longo deste artigo, abordamos os conceitos básicos de consultas espaciais, nos aventuramos em análises espaciais avançadas e demonstramos como o PostGIS pode ajudá-lo a responder a questões geográficas complexas com precisão e eficiência. Aprender o PostGIS pode transformar sua abordagem aos dados espaciais. Isso facilitará a extração de insights valiosos, a otimização de fluxos de trabalho e a tomada de decisões baseadas em dados. Quer você esteja envolvido em planejamento urbano, análise ambiental, redes de transporte ou qualquer área relacionada a GIS, o PostGIS o equipará com as ferramentas necessárias para lidar com dados geoespaciais de forma eficaz. Ao explorar as possibilidades do PostGIS, você descobrirá que ele aprimora sua capacidade de trabalhar com dados geoespaciais e abre novos caminhos para inovação e descoberta. A combinação dos robustos recursos de banco de dados do PostgreSQL com as funções geoespaciais do PostGIS permite que você enfrente até mesmo os desafios espaciais mais complexos com confiança. Antes de ir embora, vou mencionar novamente nosso curso abrangente sobre PostGIS; ele é realmente uma excelente opção para obter prática real com dados espaciais. Ele o guiará por todos os aspectos do PostGIS, desde os fundamentos até as técnicas avançadas. Antes que se dê conta, você estará lidando com confiança com projetos de dados geoespaciais. O PostGIS é mais do que apenas uma extensão do PostgreSQL. Ele é uma porta de entrada para liberar todo o potencial dos dados geoespaciais em seus sistemas de banco de dados. Ao dominar os recursos do PostGIS, você pode transformar os dados espaciais em percepções acionáveis que geram sucesso em seus projetos e na sua empresa. Tags: postgresql consultas em sql