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
line = arcpy.Polyline(arrayPts)
pt = line.positionAlongLine (0.99, 'True')
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 é
import numpy
ptsList = list()
id = 0
with arcpy.da.SearchCursor('flFL', ["SHAPE@"]) as cursor:
for row in cursor:
arrayPts = row[0].getPart()
line = arcpy.Polyline(arrayPts)
pt = line.positionAlongLine (0.99, 'True')
ptsList.append((id, (pt.getPart().X, pt.getPart().Y)))
id += 1
array = numpy.array([ptsList], \
numpy.dtype([('idfield',numpy.int32),('XY', '<f8', 2)]))
SR = arcpy.Describe("flFL").spatialReference
arcpy.da.NumPyArrayToFeatureClass(array, 'nsegSamplePts', ['XY'], SR)
'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.