Voltar ao catálogo
Season 42 8 Episódios 31 min 2026

Shapely

v2.1 — Edição de 2026. Manipulação e análise de objetos geométricos no plano cartesiano. Aprenda sobre o modelo de dados espaciais, operações construtivas, predicados, operações de conjuntos e indexação espacial com o Shapely 2.1 (2026).

Análise Geoespacial Operações Geométricas
Shapely
A Reproduzir
Click play to start
0:00
0:00
1
O Modelo de Dados Espaciais
Mergulhe nos conceitos fundamentais do Shapely e como este modela o mundo. Irá aprender a diferença entre pontos, curvas e superfícies, e como a teoria de conjuntos de pontos sustenta a geometria plana.
3m 19s
2
Criação e Serialização de Geometrias
Descubra como construir e transportar geometrias de forma eficiente no Shapely. Irá aprender a diferença entre a criação de objetos singulares e ufuncs vetorizadas de alto desempenho, bem como a serialização em WKT e GeoJSON.
4m 15s
3
Medição e Propriedades
Aprenda a extrair medições críticas das suas geometrias. Irá compreender como calcular a área, o comprimento e métricas de distância avançadas, como a distância de Hausdorff.
3m 35s
4
Predicados Espaciais e a DE-9IM
Domine a arte de verificar relações espaciais. Irá aprender a usar predicados booleanos para determinar exatamente como duas formas interagem, com o poder da matriz DE-9IM.
3m 37s
5
Operações da Teoria de Conjuntos
Descubra como unir, cortar e fatiar geometrias. Irá aprender a usar operações matemáticas de conjuntos, como a interseção, a diferença e a união, para criar formas totalmente novas.
3m 53s
6
Operações Construtivas: Buffers e Hulls
Aprenda a gerar sinteticamente novas formas de limite. Irá explorar o buffering, a criação de zonas de segurança e o envolvimento de pontos dispersos usando convex hulls e concave hulls.
3m 59s
7
Operações Construtivas Avançadas
Eleve a manipulação de formas ao próximo nível. Irá aprender a limpar polígonos massivos usando a simplificação, a unir elementos com o snap e a gerar diagramas de Voronoi.
4m 04s
8
Indexação Espacial de Alto Desempenho com STRtree
Desbloqueie consultas espaciais ultrarrápidas. Irá aprender a usar a árvore Sort-Tile-Recursive (STR) para filtrar instantaneamente conjuntos de dados espaciais massivos e realizar pesquisas de nearest neighbor quase instantâneas.
4m 23s

Episódios

1

O Modelo de Dados Espaciais

3m 19s

Mergulhe nos conceitos fundamentais do Shapely e como este modela o mundo. Irá aprender a diferença entre pontos, curvas e superfícies, e como a teoria de conjuntos de pontos sustenta a geometria plana.

Download
Olá, daqui fala o Alex da DEV STORIES DOT EU. Shapely, episódio 1 de 8. Podes estar habituado a tratar geometrias de mapas como listas básicas de coordenadas, usadas principalmente para desenhar formas num ecrã. Mas quando precisas de calcular se um track de GPS cruza uma fronteira específica, a lógica simples de desenho falha. Para fazeres uma verdadeira análise espacial matemática, precisas do Spatial Data Model. Primeiro, temos de esclarecer uma fonte comum de confusão em relação a este modelo. O Shapely opera estritamente num plano cartesiano bidimensional. Podes fornecer as coordenadas X, Y e Z ao criares as tuas geometrias. O Shapely vai fazer o parse delas e até guardar esse valor Z em memória. Mas ignora completamente a coordenada Z durante qualquer análise espacial. Se pedires a distância entre dois pontos, o Shapely calcula a distância plana em 2D. Não calcula volumes em 3D nem distâncias em 3D. É uma library puramente planar. Aqui está o ponto chave. O Shapely é construído com base na teoria matemática de conjuntos de pontos. Não olha para uma forma apenas como a mão cheia de vértices que escreveste no teu código. Em vez disso, trata cada geometria como um conjunto rigoroso que contém um número infinito de pontos. Neste modelo, cada geometria divide todo o plano 2D em três partes distintas. O interior é a própria substância da forma. A boundary é a borda que delimita a forma. O exterior é o resto do plano infinito que não faz parte da forma. Imagina que estás a modelar um parque da cidade para veres como estes três conceitos se aplicam. Começas com uma fonte de água, representada como uma geometria Point. Um Point é zero-dimensional. Representa uma única localização exata no plano. Como não tem comprimento nem área, o seu interior consiste unicamente nessa coordenada específica. Um Point não tem qualquer boundary. Todas as outras coordenadas em todo o plano cartesiano compõem o seu exterior. A seguir, adicionas um caminho pedonal que leva à fonte. Isto é modelado como uma LineString. Uma LineString é uma geometria unidimensional definida por uma sequência ordenada de vértices de coordenadas. Mesmo que lhe passes apenas uma coordenada de início e outra de fim, o Shapely entende a LineString como o conjunto infinito de pontos que formam o caminho contínuo entre elas. O interior é todo o comprimento contínuo do caminho. A boundary consiste em exatamente dois pontos: a primeira coordenada de início e a última coordenada de fim. Por fim, modelas a área do próprio parque usando um Polygon. Um Polygon é uma geometria bidimensional com uma área mensurável. Defines-o usando um anel fechado de coordenadas, o que significa que o primeiro e o último ponto são idênticos. Este anel exterior forma a boundary do Polygon. O interior é o conjunto infinito de pontos contidos dentro dessa boundary. Os Polygons também podem conter buracos, como uma zona de conservação restrita dentro do parque. A borda desse buraco funciona simplesmente como uma boundary interior, separando de forma limpa o interior válido do parque do espaço exterior vazio dentro do buraco. O Shapely não vê a tua geometria como um wireframe oco de coordenadas; vê uma região contínua do espaço matematicamente dividida em interior, boundary e exterior. Se achas estes episódios úteis e queres apoiar o programa, procura por DevStoriesEU no Patreon. É tudo por este episódio. Obrigado por ouvires, e continua a desenvolver!
2

Criação e Serialização de Geometrias

4m 15s

Descubra como construir e transportar geometrias de forma eficiente no Shapely. Irá aprender a diferença entre a criação de objetos singulares e ufuncs vetorizadas de alto desempenho, bem como a serialização em WKT e GeoJSON.

Download
Olá, daqui é o Alex da DEV STORIES DOT EU. Shapely, episódio 2 de 8. Estás a processar um batch de coordenadas espaciais. Escreves um loop para transformar cada par de coordenadas numa forma, uma de cada vez. Funciona, mas à medida que o teu dataset cresce para milhões de pontos, a tua aplicação para completamente. O problema é o overhead do Python, e a solução requer contornar completamente a criação standard de objetos. Este episódio é sobre criação e serialização de geometrias. Criar formas é o ponto de partida lógico. Se estiveres a lidar com uma única localização, instanciar uma geometria é simples. Importas a classe singular Point e passas-lhe um valor X e Y. É fácil de ler, mas é lento. Aqui está a ideia principal. O Shapely fornece funções universais vetorizadas que operam diretamente em arrays NumPy. Em vez de usares a classe singular Point num loop Python, usas a função plural shapely dot points. Passas-lhe um array bidimensional de coordenadas, e ela empurra toda a iteração para o nível C, que é altamente otimizado. O resultado é um array de objetos de geometria devolvido numa fração do tempo. Isto aplica-se a tudo, com funções plurais disponíveis para line strings, polygons e linear rings. Imagina que estás a construir uma ferramenta de routing e precisas de carregar um dataset de mil pontos de entrega. Os dados chegam como um array de payloads GeoJSON. Isto leva-nos à serialização. Precisas de fazer o parse dessas strings para objetos de geometria reais em memória. Podes sentir a tentação de usar o parsing standard de JSON e extrair as coordenadas manualmente para construir as tuas formas. Não faças isso. O Shapely tem funções built-in de input e output para os três principais formatos espaciais: Well-Known Text, Well-Known Binary e GeoJSON. Tal como a criação de geometrias, estas funções de parsing são vetorizadas. Pegas no teu array completo de mil strings GeoJSON e passas diretamente para a função shapely dot from geojson. Ela faz o parse de todo o batch de uma só vez e devolve um array de geometrias de alta performance. Se os teus dados estivessem em formato de texto, usarias o shapely dot from wkt. Se estivessem em formato binário, usarias o shapely dot from wkb. Isto cobre os inputs. E quanto aos outputs? Quando terminares de processar os teus pontos de entrega, precisas de os guardar ou enviar para uma base de dados. Revertes o processo usando as funções de export. Se estiveres a fazer debugging e precisares de ler as coordenadas com os teus próprios olhos, usas o shapely dot to wkt. O Well-Known Text dá-te uma string human-readable, escrevendo o tipo de geometria seguido pelas coordenadas. No entanto, o parsing de texto é pesado e ocupa espaço. Se estiveres a enviar estes dados para uma base de dados espacial, ou a guardá-los para mais tarde, deves usar o shapely dot to wkb. O Well-Known Binary é a representação raw em bytes da geometria. É significativamente mais pequeno, evita a perda de precisão da conversão de strings de floating-point, e é muito mais rápido para as máquinas lerem e escreverem. Passas o teu array de geometria para o shapely dot to wkb, e obténs um array de byte strings pronto para storage. Sempre que estiveres a mover dados espaciais para dentro ou para fora da tua aplicação, lembra-te que os loops em Python são o inimigo. O hábito mais importante para a performance é passar arrays completos para funções plurais do Shapely, deixando a biblioteca C subjacente fazer o trabalho pesado numa única passagem. Obrigado por ouvirem, happy coding a todos!
3

Medição e Propriedades

3m 35s

Aprenda a extrair medições críticas das suas geometrias. Irá compreender como calcular a área, o comprimento e métricas de distância avançadas, como a distância de Hausdorff.

Download
Olá, daqui fala o Alex da DEV STORIES DOT EU. Shapely, episódio 3 de 8. A distância normal diz-te o quão perto duas linhas chegam uma da outra. Mas se quiseres saber a distância máxima absoluta a que elas se afastam, a distância normal é completamente inútil. Para responder a isso, precisas de entender Measurement e Properties. Todos os objetos de geometry no Shapely vêm com atributos built-in que descrevem as suas dimensões físicas. Os mais básicos são area, length e bounds. A propriedade area dá-te o espaço bidimensional coberto por uma forma. Para um polígono, este é um número positivo. Para pontos e linhas, a area é exatamente zero. A propriedade length retorna a extensão unidimensional de uma geometry. Para uma linha, é a distância do início ao fim ao longo do caminho. A propriedade bounds fornece os limites exatos de coordenadas da tua forma. Retorna um tuple de quatro números que representa o X mínimo, o Y mínimo, o X máximo e o Y máximo. Esta é a tua bounding box. Imagina um cenário onde tens duas tracks de GPS de corredores, ambas representadas como LineStrings. Lês a propriedade length para ver a distância total que cada pessoa correu. Lês a propriedade bounds para definir o viewport retangular exato necessário para mostrar as duas rotas num ecrã. A matemática fica mais pesada quando precisas de medir o espaço entre essas duas tracks. A medição de distância standard retorna o espaço mais curto absoluto entre duas geometries. Faz scan da track A, faz scan da track B, e encontra o único par de pontos mais próximo. Se os dois corredores se cruzaram numa interseção a meio da corrida, a distância standard entre as suas tracks é zero. Aqui está o ponto chave. As pessoas frequentemente confundem a distância normal com a distância de Hausdorff. A distância normal encontra os pontos mais próximos. A distância de Hausdorff encontra a maior distância entre os pontos mais próximos. Pensa na distância de Hausdorff como uma medição do desvio máximo. Representa o maior espaço que serias forçado a atravessar se alguém te colocasse no pior ponto possível de uma track e te dissesse para caminhar até ao ponto mais próximo na outra track. Se os nossos dois corredores começassem no mesmo lugar, se separassem por duas milhas a meio do treino, e terminassem no mesmo lugar, a distância normal é zero. A distância de Hausdorff é de duas milhas. Define a separação do pior cenário ao longo de todo o length das duas geometries. Existe mais uma função de medição chamada minimum clearance. Esta não compara dois objetos diferentes. Mede a estabilidade estrutural de uma única geometry. O minimum clearance calcula a menor distância que qualquer node se pode mover antes que a geometry entre em colapso para um estado inválido, como uma linha a sobrepor-se a si mesma. Se a tua geometry tiver um minimum clearance muito pequeno, as coordenadas estão muito espremidas umas contra as outras. Um ligeiro erro de arredondamento durante um database export pode quebrar a forma por completo. Se quiseres simplificar os dados dos corredores para poupar tamanho de ficheiro, verificar o minimum clearance diz-te exatamente o quão longe podes deslocar os pontos antes que a geometry se estrague. Saber o quão perto duas formas chegam lida com as colisões básicas. Conhecer o limite máximo absoluto da sua separação dita o quão bem tu realmente entendes a relação espacial entre elas. Obrigado por passares uns minutos comigo. Até à próxima, fica bem.
4

Predicados Espaciais e a DE-9IM

3m 37s

Domine a arte de verificar relações espaciais. Irá aprender a usar predicados booleanos para determinar exatamente como duas formas interagem, com o poder da matriz DE-9IM.

Download
Olá, daqui fala o Alex da DEV STORIES DOT EU. Shapely, episódio 4 de 8. Estás a traçar uma nova linha de metro perto de uma zona húmida protegida. Precisas de saber se a linha atravessa a água a direito ou se apenas contorna a margem. Como é que o computador descobre isso matematicamente? Usa uma matriz engenhosa de três por três para responder à pergunta. Isto leva-nos aos predicados espaciais e ao Dimensionally Extended nine-Intersection Model, ou DE-9IM. Os predicados espaciais são funções binárias. Comparam duas geometrias e devolvem exatamente uma coisa: True ou False. Não criam novas formas. Não calculam áreas de sobreposição. Simplesmente respondem a perguntas de sim ou não sobre relações topológicas. Nos bastidores, o Shapely avalia estas relações usando o DE-9IM. Cada geometria tem três partes: um interior, uma fronteira e um exterior. O DE-9IM é uma matriz que testa as interseções entre estas três partes da primeira geometria e as três partes da segunda geometria. Três partes vezes três partes dá-te nove interseções possíveis. Dependendo de quais destas interseções resultam num conjunto vazio, num ponto, numa linha ou numa área, o Shapely determina a relação exata. Vamos aplicar isto à linha de metro e à zona húmida. O predicado mais abrangente é intersects. Se a linha partilha algum ponto, linha ou área com a zona húmida, intersects devolve True. É a base que abrange tudo. Se intersects for False, as duas geometrias estão completamente separadas no espaço. Mas muitas vezes precisas de mais precisão. Queres saber se a linha de metro corta ativamente a zona húmida. Para isso, usas crosses. Uma linha cruza um polígono se o seu interior interseta o interior do polígono, mas a linha também se estende para fora do polígono. A matriz DE-9IM verifica se a interseção dos seus interiores é uma linha, e se o interior da linha também interseta o exterior do polígono. Se ambos forem verdadeiros, crosses devolve True. E se a linha seguir exatamente pela fronteira da zona húmida sem entrar na água? É aí que entra o touches. Duas geometrias tocam-se se partilharem pelo menos um ponto, mas os seus interiores não se intersetam de todo. Apenas as suas fronteiras interagem. Se a linha se desviar nem que seja um milímetro para o interior da zona húmida, touches passa a False. Agora, considera uma estação de metro construída completamente dentro da zona húmida. Aqui, verificas a contenção. As pessoas muitas vezes confundem contains e within, mas são apenas operações inversas uma da outra. Se a zona húmida contém a estação, então a estação está dentro da zona húmida. Geometricamente, isto significa que o interior e a fronteira da estação estão completamente envoltos pelo interior da zona húmida. Nenhuma parte da estação interseta o exterior da zona húmida. Podes escrever o teu código a verificar se a zona húmida contains a estação, ou a verificar se a estação está within da zona húmida. O resultado é exatamente o mesmo. A ideia-chave é esta. Não precisas de memorizar a matriz de nove interseções para traçar a rota do teu metro, mas saber que ela existe explica porque é que estas verificações binárias são tão fiáveis. Cada predicado espacial nomeado é apenas um padrão específico de flags True e False nessa matriz matemática subjacente. Obrigado por estares aí. Espero que tenhas aprendido algo novo.
5

Operações da Teoria de Conjuntos

3m 53s

Descubra como unir, cortar e fatiar geometrias. Irá aprender a usar operações matemáticas de conjuntos, como a interseção, a diferença e a união, para criar formas totalmente novas.

Download
Olá, daqui é o Alex da DEV STORIES DOT EU. Shapely, episódio 5 de 8. Os diagramas de Venn não servem apenas para conjuntos lógicos ou queries a bases de dados. Podes usar exatamente os mesmos princípios matemáticos para dividir fisicamente a geografia do mundo real. Para isso, precisas de operações da teoria dos conjuntos. No Shapely, cada geometria é essencialmente um conjunto infinito de pontos num plano bidimensional. Como são conjuntos, podes manipulá-los usando a teoria dos conjuntos clássica. Primeiro, precisamos de esclarecer uma fonte comum de confusão. Predicados espaciais, como verificar se duas formas se tocam ou se cruzam, avaliam uma condição e devolvem um simples True ou False. As operações da teoria dos conjuntos fazem algo completamente diferente. Devolvem objetos de geometria totalmente novos. Recebem duas formas como input, analisam os seus pontos de sobreposição e constroem uma terceira forma totalmente nova como output. Considera um cenário concreto. Tens dois datasets de polígonos. Um representa um mapa antigo de zonas de inundação. O outro é um modelo de risco de inundação recém-atualizado. Precisas de calcular a área exata onde estes dois modelos coincidem. Para isso, usas o método intersection. Chamas intersection na primeira geometria e passas a segunda geometria como argumento. O Shapely analisa a sobreposição espacial e devolve um novo polígono contendo apenas os pontos que existem tanto no mapa antigo como no novo. Se as duas formas não se sobrepuserem de todo, devolve uma geometria vazia. Agora, e se precisares de encontrar as áreas de risco estritamente novas? Estes são os bairros que eram seguros no mapa antigo, mas que agora estão na zona de inundação atualizada. Aqui, usas o método difference. Pegas na geometria do teu novo modelo de inundação e chamas difference, passando a geometria do mapa antigo. Isto devolve uma forma contendo todos os pontos do novo modelo, subtraindo explicitamente quaisquer pontos que já estivessem no antigo. A ordem é crucial aqui. Se a inverteres e chamares difference no mapa antigo, passando o novo modelo, obténs um resultado completamente diferente. Obténs as áreas que já não são consideradas de risco. É simplesmente uma subtração espacial. Às vezes não queres comparar formas, queres apenas combiná-las. Se os serviços de emergência precisarem de um mapa principal de qualquer lugar que já tenha sido sinalizado como risco de inundação, usas o método union. Chamas union numa forma, passas a outra, e o Shapely funde-as. Se as formas se sobrepuserem, os limites internos dissolvem-se. O output é uma única geometria contínua que representa todos os pontos de ambas as formas originais. Finalmente, existe o método symmetric difference. Pensa nisto como o equivalente espacial de uma operação exclusive OR. Devolve uma nova geometria contendo pontos que estão no mapa antigo ou no novo, mas absolutamente não em ambos. No nosso cenário de inundação, esta única operação dá-te exatamente as áreas de discordância entre os dois modelos. Faz o output das zonas de risco recém-adicionadas juntamente com as zonas de risco recém-removidas, esvaziando completamente as áreas onde os modelos concordam. Aqui está a ideia principal. Quando paras de pensar em limites espaciais como conceitos geográficos complexos e começas a tratá-los como conjuntos matemáticos básicos, calcular sobreposições e exclusões complexas torna-se um processo previsível e completamente standard. É tudo por este episódio. Obrigado por ouvires, e continua a desenvolver!
6

Operações Construtivas: Buffers e Hulls

3m 59s

Aprenda a gerar sinteticamente novas formas de limite. Irá explorar o buffering, a criação de zonas de segurança e o envolvimento de pontos dispersos usando convex hulls e concave hulls.

Download
Olá, daqui é o Alex do DEV STORIES DOT EU. Shapely, episódio 6 de 8. Um simples ponto matemático tem exatamente área zero. É apenas uma localização. Mas e se precisares de representar o raio de uma explosão à volta dessa localização? Podes transformar instantaneamente esse ponto de dimensão zero num polígono enorme e preciso. Este é o poder das operações construtivas, especificamente buffers e hulls. As operações construtivas pegam numa geometria existente e constroem uma nova geometria diferente a partir dela, com base nas suas propriedades espaciais. Podes pensar nelas como wrappers de segurança à volta dos teus dados espaciais. A operação construtiva mais usada é o buffer. Passas um valor de distância para a função buffer, e o Shapely devolve um polígono que representa todos os pontos dentro dessa distância exata da tua geometria original. Se tiveres uma linha a representar o caminho de um derrame químico ao longo de uma autoestrada, e precisares de estabelecer uma zona de segurança de 50 metros, chamas o buffer nessa geometria de linha com uma distância de 50. O output é um novo polígono que traça toda a rota, expandindo-se exatamente 50 metros em todas as direções. Aqui está o ponto chave. Os buffers não crescem apenas. Também podem encolher. Se passares uma distância positiva, a geometria expande-se. Se aplicares uma distância negativa a um polígono, a geometria contrai-se. Um buffer negativo puxa os limites para dentro. Isto é incrivelmente útil para encontrar o núcleo interno seguro de uma zona, isolando a área que está a uma distância estrita das bordas perigosas. Às vezes, não precisas de um buffer exato à volta de formas complexas. Só precisas dos limites absolutos dos teus dados. Chamar a propriedade envelope dá-te exatamente isso. Ela devolve a bounding box, que é o menor retângulo perfeitamente direito que envolve completamente a tua geometria. É matematicamente barato de calcular e perfeito para indexação espacial rápida. Mas o que acontece quando os teus dados não são uma forma sólida, mas sim uma coleção dispersa de pontos? Se tiveres dezenas de amostras de solo contaminado e precisares de desenhar um único limite contínuo à volta da área afetada, precisas de um hull. O Shapely dá-te duas maneiras principais de fazer isto. O convex hull calcula o menor polígono convexo que contém todas as tuas geometrias. Podes imaginar isto como esticar um elástico à volta de um quadro cheio de pinos. O elástico ajusta-se firmemente aos pinos mais externos. Por ser convexo, o limite nunca curva para dentro. Não há ângulos interiores maiores que 180 graus. Embora o convex hull seja fiável, muitas vezes inclui uma grande quantidade de espaço vazio se os teus pontos formarem um crescente ou um cluster irregular. Se precisares de um ajuste mais apertado, usas um concave hull. Em vez de um elástico rígido, um concave hull age como película aderente. Permite que o limite curve para dentro para seguir a footprint real dos teus dados. Controlas o quão apertado ele envolve, ajustando um parâmetro que limita o comprimento máximo permitido das arestas do limite. Limites mais apertados forçam o limite a dobrar-se nos espaços entre os pontos, dando-te um mapa altamente preciso e realista desse solo contaminado. A diferença entre estas ferramentas resume-se à proximidade com que abraçam os teus dados. O envelope dá-te uma caixa folgada rápida, o convex hull estica-se firmemente pelos pontos exteriores extremos, o concave hull envolve a forma exata como película aderente, e o buffer adiciona estritamente uma margem às bordas a uma distância definida. Se quiseres ajudar a manter estes episódios a sair, podes apoiar o programa procurando por DevStoriesEU no Patreon. É tudo por este episódio. Obrigado por ouvires, e continua a construir!
7

Operações Construtivas Avançadas

4m 04s

Eleve a manipulação de formas ao próximo nível. Irá aprender a limpar polígonos massivos usando a simplificação, a unir elementos com o snap e a gerar diagramas de Voronoi.

Download
Olá, daqui é o Alex da DEV STORIES DOT EU. Shapely, episódio 7 de 8. Tenta renderizar uma linha costeira com um milhão de pontos num web map, e vais rapidamente crachar o browser do utilizador. Precisas de uma maneira de reduzir essa footprint de dados para um por cento do tamanho original, mantendo uma aparência completamente idêntica. Isto exige Operações Construtivas Avançadas. A ferramenta principal para esta limpeza de dados é a função simplify. Os ouvintes às vezes pensam que simplificar uma forma significa apenas saltar um ponto a cada dois ou três num array. Fazer isso destrói a geometria. Cria linhas que se auto-intersetam, colapsa pequenas ilhas e arruína a estrutura topológica. A função simplify do Shapely avalia a geometria real. Passas-lhe a tua linha costeira complexa e um valor de tolerância. A função remove os vértices que não se desviam da forma principal em mais do que essa tolerância. Crucialmente, o Shapely dá-te uma flag para preservar a topologia. Quando ativada, o algoritmo verifica ativamente se a remoção de um ponto fará com que um polígono se cruze ou se divida em partes inválidas. Isto garante que a tua linha costeira altamente comprimida permaneça matematicamente válida. Assim que simplificas uma base layer pesada, muitas vezes precisas que outras layers se alinhem perfeitamente com ela. Imagina que tens parcelas de terreno ou linhas de propriedade que terminam exatamente na água. Como acabaste de simplificar a linha costeira, as suas edges deslocaram-se ligeiramente. Isto cria sobreposições microscópicas ou espaços vazios, conhecidos como slivers. Corriges isto usando a função snap. Forneces a geometria da tua linha de propriedade, a geometria da linha costeira e uma distância de tolerância rigorosa. O snap olha para os vértices da primeira forma. Se um vértice estiver dentro da distância de tolerância de um vértice ou segmento da segunda forma, é puxado diretamente para ele. Os pontos fora da tolerância ficam exatamente onde estão. Isto cria um encaixe perfeito e estanque entre geometrias adjacentes sem distorcer o resto da forma. Isto cobre a limpeza de formas existentes. O outro lado das operações construtivas é a divisão do espaço vazio usando pontos. Se pegares nos vértices de uma geometria, podes passá-los para a função delaunay triangles. Isto liga esses pontos para formar uma mesh contínua de triângulos que não se sobrepõem. A lógica desenha estes triângulos especificamente para maximizar os menores ângulos internos. Isto evita triângulos longos e pontiagudos, criando uma mesh equilibrada, muito útil para renderizar terreno. Se quiseres apenas o outline destas ligações em vez de formas preenchidas, podes definir uma flag para retornar apenas as line edges. Muito relacionada está a função voronoi polygons. Enquanto Delaunay liga pontos, Voronoi desenha boundaries entre eles. Forneces uma geometria, e o Shapely usa os seus vértices para dividir a área circundante em regiões poligonais completamente distintas. Qualquer localização dentro de um polígono de Voronoi específico está mais próxima do seu ponto gerador central do que de qualquer outro ponto em todo o set. Se estiveres a analisar uma dispersão de delivery hubs, os polígonos de Voronoi mapeiam instantaneamente a zona de cobertura exata para cada hub com base em pura proximidade. Tal como em Delaunay, podes instruir a função a retornar apenas as boundary edges se não precisares de polígonos sólidos. Aqui está o insight principal. Os dados espaciais do mundo real são densos, desconectados e raramente se alinham perfeitamente. Operações construtivas como simplify, snap e Voronoi dão-te as ferramentas para impor ordem matemática, tornando os dados leves o suficiente para renderizar e precisos o suficiente para analisar. Obrigado por passares uns minutos comigo. Até à próxima, fica bem.
8

Indexação Espacial de Alto Desempenho com STRtree

4m 23s

Desbloqueie consultas espaciais ultrarrápidas. Irá aprender a usar a árvore Sort-Tile-Recursive (STR) para filtrar instantaneamente conjuntos de dados espaciais massivos e realizar pesquisas de nearest neighbor quase instantâneas.

Download
Olá, daqui é o Alex da DEV STORIES DOT EU. Shapely, episódio 8 de 8. Comparar um único ponto com um milhão de polígonos exige um tempo de processamento enorme, mas algumas aplicações fazem isso em milissegundos. Elas não calculam todas as distâncias. Filtram noventa e nove por cento dos dados antes de fazerem uma única equação matemática. Isto é spatial indexing de alta performance com STRtree. Imagina que queres encontrar o café mais próximo, entre dez mil locais, da coordenada GPS atual de um utilizador. Se calculares a distância exata para cada café, o teu sistema vai ficar extremamente lento. Em vez disso, o spatial indexing usa uma R-tree. Pensa numa R-tree como um sistema hierárquico de pastas para um espaço bidimensional. Ela desenha um retângulo simples, chamado de bounding box ou envelope, à volta de clusters de geometrias próximas. A seguir, desenha caixas maiores à volta dessas caixas. Verificar se dois retângulos simples se sobrepõem é uma operação computacionalmente barata. No Shapely, a implementação específica é a STRtree, que significa Sort-Tile-Recursive. Crias uma passando um array de geometrias para o constructor. Internamente, isto faz o bulk-load do index. A árvore é construída uma única vez e é imutável. Não podes adicionar ou remover itens depois de ser criada. Tens de preparar todo o teu dataset antecipadamente. Assim que a árvore existe, pesquisas nela usando o método query. Passas uma input geometry, e o método retorna um NumPy array de índices inteiros. Estes índices mapeiam diretamente para a sequência original de geometrias que usaste para construir a árvore. Se passares várias geometrias de uma só vez, o query retorna um array bidimensional, emparelhando os índices dos teus inputs com os índices correspondentes na árvore. Aqui está o ponto chave. O index base de uma STRtree verifica apenas bounding boxes, não geometrias exatas. Se fizeres uma query a um polígono complexo, a árvore usa o envelope quadrado desse polígono para encontrar correspondências. Isto dá-te uma shortlist de candidatos contendo falsos positivos. Para obteres uma resposta exata, o Shapely permite-te passar um spatial predicate, como intersects ou contains, diretamente para o método query como argumento. A árvore primeiro usa as bounding boxes baratas para encontrar candidatos e, a seguir, avalia automaticamente o teu predicate exato nessa shortlist. Isto mantém o trabalho matemático pesado lá em baixo, no código C compilado. Para além de sobreposições, a STRtree destaca-se na proximidade. Voltando ao nosso cenário do café, não precisas de verificar os envelopes manualmente. Usas o método query nearest. Passas o ponto GPS do teu utilizador, e a árvore percorre as suas caixas hierárquicas para encontrar a geometria absolutamente mais próxima sem medir contra todas as dez mil. Retorna imediatamente o index do café mais próximo. Também podes especificar um parâmetro para retornar um array dos top N nearest neighbors, ou definir um threshold de distância máxima para limitar totalmente o raio de pesquisa. Existe também um método nearest distinto, que compara duas árvores separadas uma contra a outra para encontrar os pares de geometrias correspondentes mais próximos entre elas. As operações de geometria em si são sempre a parte mais cara da análise espacial. A STRtree atua como um filtro implacável. Impede-te de desperdiçar ciclos de CPU em geometrias que não estão nada perto umas das outras, fornecendo uma shortlist minúscula e gerível para que as tuas verificações matemáticas exatas só corram quando têm absolutamente de o fazer. Isto conclui a nossa série sobre Shapely. Encorajo-te vivamente a explorar a documentação oficial e a experimentar estes conceitos de indexing de forma hands-on nos teus próprios datasets. Se tiveres workflows ou tools que queiras ver abordados em séries futuras, visita devstories dot eu e deixa-nos uma sugestão. Obrigado por ouvires. Até à próxima!