12 votos

¿Convertir puntos XY en una línea?

Alguien ha guardado por error una ruta GPS como waypoints y me los ha enviado en un archivo .csv. Quieren que les devuelva una línea (shapefile). ¿Cuál es el método más sencillo para convertirlo en una línea? Las herramientas disponibles son Arcmap, gdal/ogr y qgis más o menos por orden de preferencia. Preferiría no instalar una herramienta adicional; un servicio de conversión en línea estaría bien.

Latitude,Longitude,Date,Time,ampm,,,
60.71586,-135.07476,25/07/2010,9:26:15,PM,,,,,
60.71637,-135.07563,25/07/2010,9:26:12,PM,,,,,
60.71648,-135.07612,25/07/2010,9:26:11,PM,,,,,
60.71664,-135.07707,25/07/2010,9:26:09,PM,,,,,
60.71672,-135.07756,25/07/2010,9:26:08,PM,,,,,

23voto

akdom Puntos 6724

Parece que lo crucial aquí es que los puntos de la línea estén ordenados por la hora de captura, repartidos en tres filas de columnas. Aunque podrías organizar los datos en una hoja de cálculo, a menudo encuentro que escribir un script rápido proporciona la mayor flexibilidad:

import csv
from datetime import datetime
try:
    from osgeo import ogr
except ImportError:
    import ogr

SHP_FILENAME = "output.shp"
CSV_FILENAME = "input.csv"

r = csv.reader(open(CSV_FILENAME, 'r'), delimiter=',', quotechar=None)
header = dict(((str, i) for i, str in enumerate(r.next())))

# load data rows into memory
rows = [row for row in r]

# sort by date and time ascending
rows.sort(key=lambda row: datetime.strptime(
        (row[header['Date']] + ' ' + row[header['Time']] + ' ' + 
         row[header['ampam']]), 
        '%d/%m/%Y %I:%M:%S %p'))

# Create new shapefile
ogr.UseExceptions()
ds = ogr.GetDriverByName('ESRI Shapefile').CreateDataSource(SHP_FILENAME)
layer = ds.CreateLayer("data", None, ogr.wkbLineString)

# Create a new line geometry
line = ogr.Geometry(type=ogr.wkbLineString)

# Add GPS points to line
lon_idx, lat_idx = header['Longitude'], header['Latitude']
for row in rows:
    line.AddPoint(float(row[lon_idx]), float(row[lat_idx]))

# Add line as a new feature to the shapefile
feature = ogr.Feature(feature_def=layer.GetLayerDefn())
feature.SetGeometryDirectly(line)
layer.CreateFeature(feature)

# Cleanup
feature.Destroy()
ds.Destroy()

8voto

tobes Puntos 19

El plugin de QGIS "Points2One" debería ser lo que estás buscando.

Si no marcas "Ordenar puntos por este campo", el plugin los conecta en el orden interno de puntos en la capa. He usado tu ejemplo, he ordenado los puntos en zigzag y ha funcionado como esperaba:

enter image description here

3voto

UnkwnTech Puntos 21942

ArcGIS 10.0 tiene un Puntos a la línea herramienta.

Recomiendo leer el ArcGIS 10.2 para escritorio documentación, pero en resumen:

Crea características de línea a partir de puntos.

...

E Línea.

...

B en el orden en que se encuentran. Si se desea un orden diferente especifique un Campo de Ordenación.

1voto

Robert Höglund Puntos 5572

El libre GME La extensión de ArcGIS proporciona convertir.líneaspunto que creará una única línea a partir de una capa de puntos.

1voto

Justin Puntos 136

Si tiene ETGeoWizards instalado en su máquina ArcMap, eso también lo manejará.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X