Eu tenho ponto inicial e final de uma polilinha. Como posso obter um ponto nessa polilinha a partir dos pontos finais especificados pela distância especificada.
Como conseguir isso usando o arcpy, desde que esse script funcione no ArcView sem importar nenhum módulo ( como esta resposta ). Estou tentando não codificar valores.
Pergunta relacionada:
arcpy
line
linear-referencing
do utilizador
fonte
fonte
object.interpolate(distance[, normalized=False])
. É um método de arcpy? Se for esse o caso, você pode postar o link. Eu pesquisei no Google, mas não o encontrei.Respostas:
Isso soa semelhante a "Referência linear" e esse conjunto de ferramentas estaria disponível no ArcView. Além disso, você pode criar um script dessa ferramenta com muita facilidade.
Link para a Ajuda da ESRI para referência linear
fonte
Com base em suas necessidades, como @LouisH referido, o uso da referência linear é definitivamente o caminho a percorrer. Criei um código que deveria atender à sua necessidade de não codificar elementos, mas solicitá-los como parâmetros.
Como explicação, a ferramenta de referência linear usada abaixo pega "Rotas", no seu caso, a linha apresenta e coloca "Eventos", no seu caso, os pontos ao longo deles com base em um campo de distância. Isso resulta em um FeatureLayer, armazenado na memória, razão pela qual a última função que copia os recursos para uma classe de recurso de saída.
Editar - Uma coisa em que pensar com esta ferramenta e, provavelmente, qualquer operação para localizar pontos com base na distância do final de uma linha, é de qual final da linha você começará. A ferramenta de referência linear, por exemplo, funciona com base na direção digitalizada de uma linha. Será importante garantir que você tenha alguma maneira de identificar em qual ponto de extremidade suas medidas são baseadas.
fonte
Resolver um problema de referência linear como esse
without importing any modules
está além do meu alcance.Eu usei
Shapely
(pacote python para manipulação e análise de geometrias geoespaciais 2D. E é licenciado em BSD :-))faça o download aqui . A versão 2.6, que é a única que suporta o arcgis 10 arcpy. É uma instalação simples (tamanho de 1,5 MB)
e agora aqui está o script arcpy para atingir o objetivo .. perdoe meu python .. só hoje eu aprendi sobre os loops, tuplas etc :)
nota : isso não funcionará se o recurso tiver segmentos de curva
fonte
Eu encontrei essa pergunta tentando fazer o que acho que é a mesma coisa. Eu queria que tudo fosse feito via arcpy. Usar a referência linear não fazia sentido para mim, porque ainda não tenho os eventos pontuais (e não consegui descobrir como usar o LR para obtê-los). O ponto crucial do que acabei usando foi
Isso requer Arc 10.1 ou superior; Não consegui descobrir se isso estava disponível abaixo do nível de licenciamento do ArcInfo que eu tenho (o ArcView especificado pelo OP).
No meu exemplo acima, eu queria um ponto não a uma distância fixa, mas por uma porcentagem do comprimento total da linha. Para fazer isso, forneci o segundo argumento opcional para
positionAlongLine
. Você pula o segundo argumento se quiser especificar uma distância absoluta. Aqui está o documento .O exemplo de código mais completo é
'flFL'
é o meu featureLayer de linhas nas quais desejo localizar os pontos. Corre muito rápido.NumPyArrayToFeatureClass
foi uma maneira muito legal de despejar todos os meus pontos de volta em um featureClass (obrigado ao meu colega Curtis por essa parte!). Tinha experimentado w /Append_management
mas isso era um pouco mais lento.fonte
Pode ser um exagero, mas se você tiver acesso à extensão Network Analysis, poderá criar rede a partir de suas polilinhas e, em seguida, criar áreas de serviço em torno de seus pontos de entrada, especificando o tamanho da SA como a distância de interesse. Aqui está um exemplo superficial com 111 metros SA do ponto:
Então você teria que encontrar pontos onde o SA cruza a linha.
fonte
Eu acho que você pode obtê-lo com o recurso Feature Vertices To Points (Data Management). Você pode obter mais informações aqui .
ou você pode conferir a linha dividida no ponto (gerenciamento de dados) aqui .
eles não são suficientes, mas você pode escrever seu próprio código ...
espero que ajude você ...
fonte