Necesito convertir un gran número de muy densa (densificado a 1m) polilíneas 3D de puntos 3D. Necesito cada vértice a lo largo de la línea y sin duplicados (dos de las mismas coordenadas XYZ) si es posible. Hay una herramienta para que? Cada clase de entidad para ser convertidos rendimientos de alrededor de 1 a 2 millones de puntos. Me hizo escribir mi propio add-on para esto y aunque yo estoy usando la inserción del cursor (que se oponen a la iFeature:Tienda) es bastante lento, así que tengo la esperanza de que hay una mejor manera.
Respuestas
¿Demasiados anuncios?¿Has probado ET GeoWizards tal vez? Sé que se puede hacer polilíneas 2D a puntos en la versión gratuita, pero no estoy seguro acerca de 3D.
Aquí un viejo código de VBA que hace un 2D punto shapefile de vértices de polilínea 2D. No tengo idea si funciona en 3D características así (¿por qué estás usando 3D-puntos?), pero podría funcionar (pero, entonces va a ser sólo parte de la solución):
Private Sub UIButtonControl9_Click()
'Sub Test()
Dim pMxDoc As IMxDocument
Set pMxDoc = ThisDocument
Dim WorkspaceName As String
Dim TableName As String
If pMxDoc.SelectedItem Is Nothing Then
MsgBox "select layer in TOC first"
Exit Sub
End If
If Not TypeOf pMxDoc.SelectedItem Is IFeatureLayer Then
MsgBox "select layer in TOC first"
Exit Sub
End If
DumpCoords pMxDoc.SelectedItem, "C:\temp\coorddump.csv"
MsgBox "The Vertices were exported correctly." & Chr(13) & "Vertex point table is saved in C:\temp\coorddump.csv"
WorkspaceName = "C:\temp"
TableName = "coorddump.csv"
AddTextFile WorkspaceName, TableName
'AddXYEventLayer
End Sub
Sub DumpCoords(pFlayer As IFeatureLayer, sFile As String)
'
' writes OID,part#,point#,x,y of selected features
' to sFile (or all features if none are selected)
'
If Not (pFlayer.FeatureClass.ShapeType = esriGeometryPolyline Or _
pFlayer.FeatureClass.ShapeType = esriGeometryPolygon) Then
MsgBox "must be polyline or polygon"
Exit Sub
End If
Dim pFCur As IFeatureCursor
Dim pFSel As IFeatureSelection
Set pFSel = pFlayer
If pFSel.SelectionSet.Count > 0 Then
pFSel.SelectionSet.Search Nothing, False, pFCur
Else
Set pFCur = pFlayer.FeatureClass.Search(Nothing, False)
End If
Open sFile For Output As #1
Dim StrHeader As String
StrHeader = Chr(34) & "OIDp" & Chr(34) & Chr(44) & Chr(34) & _
"Part" & Chr(34) & Chr(44) & Chr(34) & "P_num" & Chr(34) & Chr(44) & _
Chr(34) & "XXX" & Chr(34) & Chr(44) & Chr(34) & "YYY" & Chr(34)
Print #1, StrHeader
Dim pFeat As IFeature
Set pFeat = pFCur.NextFeature
Do Until pFeat Is Nothing
Dim pGeomColl As IGeometryCollection
Set pGeomColl = pFeat.Shape
Dim l As Long
For l = 0 To pGeomColl.GeometryCount - 1
Dim pPointColl As IPointCollection
Set pPointColl = pGeomColl.Geometry(l)
Dim k As Long
For k = 0 To pPointColl.PointCount - 1
Dim sOut As String
sOut = pFeat.OID & "," & l & "," & k & "," & _
pPointColl.Point(k).x & "," & _
pPointColl.Point(k).Y
Print #1, sOut
Debug.Print sOut
Next k
Next l
Set pFeat = pFCur.NextFeature
Loop
Close #1
End Sub
Private Function UIButtonControl9_ToolTip() As String
UIButtonControl9_ToolTip = "Extract vertices coordinates to CSV table"
End Function
si usted tiene una licencia de arcinfo usted puede simplemente ejecutar el gp de la herramienta función de los vértices a los puntos. Toma de línea o de poli clase de entidad como entrada y salidas de los vértices como puntos, con su m & z.
en lo que asegura no duplicar los vértices están presentes, es posible que desee ver en estos dos gp herramientas: integrar y reparación de la geometría.
espero que esto ayude.