Há dois dias, fiz uma pergunta sobre a ordem interna de armazenamento dos vértices de um polígono nos shapefiles da ESRI. Essa pergunta foi respondida (os polígonos são armazenados no sentido horário ou anti-horário em um shapefile? ) E também foi respondida em um post antigo ( criação de polígono (rotação no sentido horário ou não) )
Mas agora minha pergunta é mais geral e não sei se ela tem uma resposta única. A ordem dos ponteiros do relógio é apenas para shapefiles da ESRI ou para formatos GIS gerais? E a representação interna de um software GIS? Por exemplo, se eu usar o QGIS e ler um * .shp contendo polígonos, suponho que a representação interna do limite externo esteja no sentido horário como no shapefile original, mas e para todos os formatos de arquivo suportados pelo QGIS? E para ArcGIS? E, no caso de existir um formato de arquivo com polígonos armazenados no sentido anti-horário, se esses arquivos forem carregados no QGIS, ArcGIS etc., a orientação será alterada internamente; portanto, se eu ler os dados usando PyQGIS, por exemplo, os polígonos serão no sentido horário ordenou?
Meu objetivo é escrever um plugin para o QGIS, mas a fonte de dados pode ser shapefiles da ESRI ou outros formatos. Como preciso verificar os ângulos entre lados consecutivos dos polígonos usando seus azimutes, preciso saber se a ordem é no sentido horário. Uma solução é calcular a área de cada polígono e, se bem me lembro, se for positivo, o pedido será no sentido horário e, se negativo, o pedido será no sentido anti-horário.
O cálculo da área não é uma tarefa intensiva, por isso não diminuirá tanto o meu plug-in. Mas, no caso especial do QGIS, alguém sabe se ele armazena os polígonos no sentido horário ou anti-horário, independentemente da ordem na fonte original? No momento, estou trabalhando com os shapefiles da ESRI e as coordenadas em layer.getFeatures (). Geometry (). AsPolygon () são armazenadas no sentido horário para a borda externa e no sentido anti-horário para os furos, ou seja, no * .shp original.
fonte
Polygons are oriented correctly. (Exterior ring boundaries must be oriented counterclockwise, and interior ring boundaries must be oriented clockwise.)
que significa que o Oracle é anti-horário.Respostas:
Na especificação do OGC, que pode ser baixada [aqui], ( http://www.opengeospatial.org/standards/sfs ), eles declaram:
Nos documentos da Oracle , é claramente afirmado que os limites externos do anel são orientados no sentido anti-horário e os limites internos do anel no sentido horário. Da mesma forma, no SQL Server Spatial, o tipo de dados geográfico segue uma regra no sentido anti-horário para o anel externo e no sentido horário para os anéis internos - consulte este blog da MicroSoft para obter mais detalhes. O Postgis parece permitir isso de qualquer maneira, para geometrias, e possui funções que forçam a geometria de um polígono a seguir uma regra da mão direita ou esquerda, consulte ST_ForceRHR e ForceLHR . O JTS / Geos parece ter seguido a regra da mão direita, ou seja, uma orientação no sentido horário do anel externo, por isso é tudo um pouco incerto, na verdade.
Em geral, faz sentido que um tipo de dados geográfico force a orientação; caso contrário, seria impossível dizer se um pequeno polígono era apenas isso ou o anel interno de um polígono do mundo inteiro. Com um tipo de dados de geometria em uma superfície plana, essa confusão não pode surgir, pois o anel externo e o anel interno seguem em ordem e, se houver apenas um anel, ele será fechado (independentemente da orientação), diferentemente de um globo , que envolve.
De um comentário de @mxfh: O OpenGIS Simple Features Access da OGC (ISO 19125-1) especifica uma direção no sentido anti-horário para anéis externos a partir do documento da versão 1.2.1 [OGC 06-103r4] 6.1.11.1/página 26 de opengeospatial.org / normas / sfa. A alteração foi introduzida entre a versão 1.1.0 e 1.2.0 em 2006, mais recente. A nota de rodapé que você está citando não é atualizada desde 2005
fonte
As direções do anel (limite) são necessárias para evitar ambiguidades nos sistemas de coordenadas geográficas que cobrem uma superfície finita, pois o limite definiria duas áreas, uma esquerda e uma direita do limite ao longo de sua direção. Determinar qual dessas duas áreas é a maior é possível, mas ainda deixa a ambiguidade.
Aqui está uma visão geral das direções dos anéis externos dos polígonos em vários formatos, de acordo com suas especificações:
O Simple Feature Access (ISO 19125-1) também é usado no WKT / GML / KML e em várias implementações SQL:
Na maioria das implementações, a ordem dos anéis em um POLYGON é importante (em oposição aos shapefiles)
Aninhamentos mais profundos, também conhecidos como ilha-em-um-lago-em-uma-ilha -..., devem ser representados como multipolígonos ( veja a figura 2.10 (4) ), pois só pode haver uma borda externa e aninhamentos mais profundos do que os anéis internos não estão definidos.
Arquivos de forma ESRI / SHP :
Como várias fronteiras externas são permitidas, as configurações de ilha-em-um-lago-em-uma-ilha são possíveis com esta definição de polígono. Topologicamente a ilha em um lago seria apenas outro anel externo no sentido horário. Efetivamente, isso torna um polígono de shapefile da ESRI um recurso simples MultiPolygon
GeoJSON (RFC7946) :
TopoJSON : força os anéis externos no sentido horário por padrão
Excursão:
O raciocínio matemático sobre por que as ordens de enrolamento dos anéis aninhados se alternam é que o cálculo da área com a fórmula do cadarço ( explicação visual ) calcula as áreas assinadas, dependendo da direção do anel.
Em geral, os anéis aninhados (limites internos) são considerados orifícios e têm a direção alternativa do anel externo. O valor da área assinada que eles contribuem é negativo. Onde os anéis externos são positivos. A área total de todos os recursos de toque é a soma de todas as áreas assinadas.
Conforme implementado pela ESRI, consulte esta entrada da Base de Conhecimento: Qual algoritmo é usado pelo ArcGIS para determinar a área de um polígono?
Mnemônico proposto
Extremidades abertas de formas de letra interpretadas como setas:
fonte
Não sei se alguém será capaz de fornecer uma resposta definitiva para sua pergunta, pois cada formato de arquivo vetorial é diferente e cada GIS, em termos de como eles lidam internamente com esses dados, também será diferente. Mas posso garantir que o pedido no sentido horário não é apenas para os Shapefiles da ESRI. Existem outros formatos que usam uma designação semelhante de pedido no sentido horário para anéis externos e no sentido anti-horário para polígonos de furos internos. Por exemplo, a estrutura de polígono do vetor JTS usa um formato semelhante. De fato, afirma-se aqui que, historicamente, isso seria semelhante à abordagem ESRI. Também posso dizer definitivamente que não, nem todos os formatos têm esse requisito. Por exemplo, as especificações de formato GeoJSONnão exige nenhum requisito sobre a ordem dos vértices em seu formato de polígono. A especificação KML realmente declara:
Portanto, toda a gama de opções existe e é implementada por aí. É um mundo selvagem!
fonte