Em um sistema georeferenciado quando trabalhamos com polígonos precisamos saber qual é a orientação dos pontos do polígono: horário ou anti-horário.
Polígono com pontos no sentido horário
Polígono com pontos no sentido anti-horário
Falando mais especificamente, quando persistimos um polígono em uma base de dados (como o SQL Server 2008) precisamos garantir que o ordenamento é o correto. No caso do Sql Server, os segmentos externos de um polígono precisam estar orientados no sentido anti-horário.
Para determinar a orientação de um polígono, disponibilizo a seguir uma pequena função.
Como retirei essa função de dentro de meus projetos, simplifiquei um pouco os objetos espaciais para facilitar a compreensão aqui
Basicamente considero um polígono um conjunto de coordenadas que por sua vez são formadas por um par longitude/latitude.
Alguns preferem tratar os polígonos como um conjunto de segmentos de reta, mas para as minhas necessidades isso não é preciso.
Não deve-se esquecer que um polígono deve ser fechado, ou seja, o último ponto deve ser igual ao primeiro.
Com poucas adaptações essa função pode trabalhar também com dados geométricos ao invés de dados geográficos.
Adicionei também um pequeno método que permite inverter a ordem dos pontos. Nada mais do que um wrapper para um método do próprio .Net
No final, criei um pequeno exemplo de como utilizar o método, mostrando a ordem original de cada polígono, invertendo suas ordens e mostrando a nova ordem.
Leia mais...