Estou enfrentando um problema no ArcGIS. Eu trabalho em um banco de dados de navegação. Em nosso banco de dados, as ruas de pista única são representadas por uma única linha, enquanto uma rua de pista múltipla (rua com divisor no centro) é representada por duas linhas paralelas (linhas vermelhas na imagem).
Eu tenho um shapefile de ponto com alguns pontos caindo dentro da rua com várias pistas e outros fora.
Eu quero criar um script do ArcPy que encontre os pontos que se enquadram nas ruas de várias faixas. ou seja, entre essas linhas paralelas (marcadas na figura).
Eu não sei como conseguir isso, alguém pode me ajudar?
Eu fiz alguns exercícios e descobri que a criação de buffer em um lado da linha pode criar dentro do polígono de várias faixas (mostrado na figura).
mas agora o problema é que o polígono está realmente cruzando a linha (ou seja, sobrepondo-se ao limite de várias faixas). então ele vai pegar pontos desnecessários. existe alguma maneira de alinhar esse polígono com a linha da rua?
Nota: integrar não funcionará aqui, porque também move a linha da rua. Eu preciso apenas alinhar o polígono ao longo da linha da rua.
fonte
Respostas:
Eu tentaria abaixo do algoritmo arcpy (mesmo manual!)
fonte
Eu diria que este é um exercício geométrico.
PSEUDO-CÓDIGO:
Como se pode ver, existem casos especiais - pontos pretos circulados:
Todos os casos acima são muito improváveis, no entanto, parece que a opção mais segura é trabalhar apenas com duas estradas de linha, ou seja, exportá-las para uma classe de recurso separada. O caso 3 é engraçado, vamos deixar ao acaso, porque a menor distância da linha nunca é zero, portanto, a direção 'oposta' do raio que conecta 2 pontos pode ser encontrada.
Implementação do Python:
Existe outra solução possível, talvez mais elegante. Envolve triangulação. Informe-me se for de seu interesse e atualizarei minha resposta
fonte
Como as ruas são paralelas, presumi que elas foram criadas com a
Copy Parallel
ferramenta na barra de ferramentas Editar, fazendo com que o par de linhas tenha a mesma direção. Podemos então iterar sobre as coordenadas da primeira linha e adicioná-las a um polígono e, em seguida, iterar no verso da segunda linha. Definitivamente, há uma maneira melhor de abordar os pares de linhas de agarrar; a abordagem OID funciona, mas não é muito bonita.A partir daí, é uma ligação para Intersect / Select Layer por local / o que você tem. Observe que o
S
polígono em forma não é perfeito, pois eu o desenhei à mão livre e há alguns arcos queexplode_to_points
não são adequados. Basta executarDensify
ou equivalente.fonte
m
resolução, multipartes etc.). Não sei como recursos como esse são realmente representados em uma rede.