Encontrando o ponto médio da linha usando o ArcPy?

11

Como o ponto médio de uma polilinha pode ser calculado usando a estrutura de geoprocessamento , por exemplo, em um script Python?

A propriedade polyline.centroid retorna O verdadeiro centróide, se estiver dentro ou sobre o recurso; caso contrário, o ponto do rótulo será retornado . O centróide raramente está localizado em linhas não retas, o que é inútil para meus propósitos.

A ferramenta Feature Vertices to Points possui uma opção de ponto médio, mas isso requer ArcInfo, que não tenho atualmente.

Uma opção poderia ser adicionar medidas às polilinhas e criar um evento de rota 50% ao longo da linha.

Outra solução alternativa é usar a opção Calcular Geometria no ArcMap, mas o ideal é automatizar esse processo em um script.

Alguma sugestão melhor / mais rápida?

No momento, estou limitado ao ArcGIS 10.0 (sem acesso a uma licença no nível ArcInfo).

Stephen Lead
fonte
4
Veja esta pergunta . No final, usei as funções de referência linear em Shapely para determinar o ponto médio.
Mike T
1
Acho que o @MikeToews tem a ideia certa e basta usar as funções de referência linear no ArcGIS em vez de levá-lo ao Shapely. Parece que esta é a função que você deseja: Criar camada de evento de rota - referência linear . Você provavelmente pode fazer a tabela de eventos em tempo real. Isso é para 10.1, mas deve ser o mesmo em 10.0.
Get Spatial
1
Este blog parece conter um algoritmo que poderia ser convertida em Python / ArcPy: rbrundritt.wordpress.com/2008/10/14/...
PolyGeo
Alguém fez isso em javascript? Fiz isso com sucesso apenas no Arcpy. Atenciosamente, Ezequias
Ezequias
Se você tiver uma nova pergunta, faça-o clicando no botão Fazer pergunta . Inclua um link para esta pergunta se ela ajudar a fornecer contexto. - Do comentário
BERA

Respostas:

22

A classe Polyline possui um novo método chamado "positionAlongLine" no ArcGIS 10.1. Isso retornará um objeto PointGeometry com exatamente um ponto a uma distância especificada do final inicial da linha ou uma fração da distância entre o início e o final . Para encontrar o ponto médio, você precisaria apenas fazer positionAlongLine(0.5,True). Para encontrar os pontos médios das linhas e adicionar suas coordenadas à tabela de atributos, você pode fazer a Calculadora de Campos na seguinte instrução:

  • !Shape!.positionAlongLine(0.5,True).firstPoint.X
  • !Shape!.positionAlongLine(0.5,True).firstPoint.Y

Observe que você precisa usar o analisador Python na calculadora de campo para que isso funcione.

Se você quiser acessar esse objeto de ponto no Python, faça o seguinte:

Input_shp = "C:\Temp\Line.shp"
Cursor = arcpy.SearchCursor(Input_shp)
for Feature in Cursor:
    Midpoint = Feature.shape.positionAlongLine(0.50,True).firstPoint
    print Midpoint.X
    print Midpoint.Y
dmahr
fonte
obrigado, isso parece ótimo. No entanto, eu deveria ter mencionado que atualmente estou limitado a 10,0, portanto a opção Rota acima pode ter que ser suficiente por enquanto
Stephen Lead
Erro: a linha contém um valor incorreto. Usando arcGIS10, com Python check-in Model Builder, eu usei a mesma afirmação:! Forma .positionAlongLine (0,5, True) .firstPoint.X
juasmilla
1

Com a licença do ET Geo Wizards, você pode tentar a função "Polyline to Point" com a opção "Middle points" e "Remove Duplicate Points" (opcional): http://www.ian-ko.com/ET_GeoWizards/UserGuide/convertPl2Pnt. htm

Você pode implementar os ET Geo Wizards assim:

toolbox_ETgeowizards = arcpy.GetParameterAsText(0) # Location ET Toolbox (Type: Toolbox)
arcpy.ImportToolbox(toolbox_ETgeowizards)

...

arcpy.ET_GPPolylineToPoints(pInFeatureClass, sOutFileName, sExportOption, bRemoveDuplicates)

Para variáveis ​​de entrada da função ET, consulte: http://www.ian-ko.com/ET_GeoWizards/UserGuide/Scripting/scripting_PolylineToPoint.htm

KalleBlomquist
fonte