Gostaria de criar polígonos ao longo de uma linha para usá-los no AtlasCreator na próxima etapa.
O ArcMap possui uma ferramenta chamada Strip Map Index Features .
Com esta ferramenta, posso escolher a altura e a largura dos meus polígonos (digamos 8 km x 4 km) e produzi-los / rotacioná-los ao longo da linha automaticamente.
Um dos atributos gerados de cada polígono é o ângulo de rotação necessário para girar minhas setas norte no Atlas Generator posteriormente.
Alguém tem uma idéia de como resolver esta tarefa no QGIS / com pyQGIS? Algum algoritmo Grass ou SAGA ou um modelo de caixa de ferramentas de prosseguimento que poderia ser usado dentro de um plug-in personalizado também seria bom;) Edit1: Eu preciso não apenas das extensões de impressão, mas também dos polígonos, pois quero imprimir um mapa com todos os polígonos / extensões como algum tipo de mapa de visão geral.
Edit2: Estou oferecendo uma recompensa, pois ainda estou procurando uma solução PyQGIS que possa ser usada em um plug-in QGIS sem a necessidade de instalar um software além do QGIS (nenhum RDBMS como PostGIS / Oracle)
Respostas:
Pergunta interessante! É algo que eu queria experimentar, então tentei.
Você pode fazer isso no PostGRES / POSTGIS com uma função que gera um conjunto de polígonos.
No meu caso, tenho uma tabela com um recurso (uma MULTILINESTRING) que representa uma linha ferroviária. Ele precisa usar um CRS em metros, estou usando osgb (27700). Eu fiz 4 km x 2 km 'páginas'.
Aqui, você pode ver o resultado ... o material verde é a rede de estradas, presa a um buffer de 1 km ao redor da ferrovia, o que corresponde muito bem à altura dos polígonos.
Aqui está a função ...
Usando esta função
Aqui está um exemplo; Páginas de 4 km x 2 km, epsg: 27700 e 10% de sobreposição
Depois de executar isso, você poderá exportar do PgAdminIII para um arquivo csv. Você pode importar isso para o QGIS, mas pode ser necessário definir o CRS manualmente para a camada - o QGIS não usa o SRID no EWKT para definir o CRS da camada para você: /
Adicionando atributo de rolamento
Provavelmente, isso é mais fácil no postgis, pode ser feito nas expressões QGIS, mas você precisará escrever algum código. Algo assim...
Ressalvas
É um pouco hackeado e só teve a chance de testar em um conjunto de dados.
Não tem 100% de certeza de quais dois vértices você precisará escolher nessa atualização de atributo do rolamento
query
. Talvez seja necessário experimentar.Devo confessar que não tenho ideia de por que preciso fazer uma fórmula tão complicada para girar o polígono para corresponder ao segmento de linha atual. Eu pensei que poderia usar a saída de ST_Azimuth () em ST_Rotate (), mas aparentemente não.
fonte
Existem diferentes soluções. E isso pode funcionar com polilinha simples e várias entidades selecionadas
diagrama de bloco:
Parâmetros
loop em OrderNodes
crie seu primeiro ponto como âncora
para cada vértice, adicione-o no dict x, y, id e calcule um vetor
Você pode alterar essa proposição se não estiver realmente claro ou comentar.
fonte
Steven Kays responde em pyqgis. Basta selecionar as linhas na sua camada antes de executar o script. O script não suporta a entrada de linha, portanto, não pode funcionar na camada com cadeia de linhas múltiplas
fonte
As duas respostas (no momento da publicação) são engenhosas e bem explicadas. No entanto, também existe uma solução MUITO simples, mas eficaz, possível (assumindo que você aceitará todos os seus mapas alinhados com o Norte da maneira tradicional, em vez de uma direção aleatória do Norte com base no rio). Se você deseja rotações, é possível, mas um pouco mais complexo (veja abaixo).
Primeiro, dê uma olhada no meu post aqui . Isso fornece instruções sobre como criar coberturas de mapa para o Atlas. O método que você deseja é uma adaptação é 'Workflow 2' no tutorial. Divida seu recurso linear por vértices ou comprimento e armazene em buffer os recursos por qualquer valor. A quantidade que você armazena em buffer ditará parcialmente a sobreposição (mas veja abaixo), mas o mais importante é que ele cria um recurso com uma área. Você pode usar qualquer número de plug-ins para dividir as linhas, mas o GRASS v.split.length e v.split.vert são boas opções (disponíveis em Processing Toolbox).
Depois de ativar a Geração Atlas no Map Composer e selecionar sua camada em buffer, volte para a guia itens e selecione seu objeto de mapa. Marque 'Controlado pelo Atlas' e, no seu caso de uso, eu optaria pelo recurso Margin around. Isso controlará sua sobreposição entre mapas (como alternativa, você pode preferir escala fixa).
Você pode visualizar o Atlas usando o botão Visualizar Atlas na barra de ferramentas superior do compositor e ver quantas páginas ele produzirá. Observe que você pode optar por exportar todas as páginas em um único PDF ou como arquivos separados.
Para fazer o mapa girar ao longo da linha, há um campo de rotação nas propriedades do Item do compositor de mapa. Você precisará definir uma expressão (use o pequeno botão à direita da caixa de rotação). Selecione a variável como sua opção e, em seguida, edite. Um construtor de expressões será exibido e você poderá acessar a geometria ou os campos dos recursos do atlas. Você pode criar um expresso para girar o mapa de acordo com a rotação dos recursos (você pode calcular o rumo usando os pontos inicial e final de cada segmento de linha e um pouco de trigonometria). Repita o mesmo processo para girar sua seta norte (usando a mesma expressão ou variável pré-calculada).
fonte