XY 포인트를 선으로 변환 하시겠습니까?


12

누군가 실수로 GPS 트랙을 웨이 포인트로 저장 한 다음 .csv 파일로 보내주었습니다. 그들은 줄을 다시 원합니다 (shapefile). 이것을 라인으로 변환하는 가장 간단한 방법은 무엇입니까? 사용 가능한 도구는 선호도 순으로 Arcmap, gdal / ogr 및 qgis입니다. 차라리 추가 도구를 설치하지 않겠습니다. 온라인 전환 서비스는 괜찮을 것입니다.

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,,,,,

.csv에는 수십 행의 가비지 데이터 (활성 로그 시작 / 중지 메시지 등)가있어 모든 열을 정렬하고 맨 위로 떠있는 비 데이터 행을 삭제하는 편의에 의해 제거되었습니다. 멍청한, 나는 (더 많은 수면을 취해야한다!) 그렇지 않으면 qgis Point2one 플러그인이 작동했을 것입니다. fmark의 python 기술 덕분에 두 가지 실수를 모두 해결할 수 있지만 다음 주에 사무실로 돌아올 때까지 기다려야합니다.
matt wilkie

답변:


23

여기에서 원하는 것은 선의 점을 캡처 시점에 따라 정렬하여 세 개의 열 행에 분산시키는 것입니다. 스프레드 시트에서 데이터를 구성 할 수는 있지만 빠른 스크립트를 작성하면 유연성이 가장 높습니다.

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()

좋은! 그 하나를 유지.
Nathan W

이것은 내가 본 것 중 OGR에 대한 최고의 튜토리얼입니다
dassouki

8

QGIS 플러그인 "Points2One"이 원하는 것이어야합니다.

"이 필드를 기준으로 포인트 정렬"을 선택하지 않으면 플러그인은 레이어의 내부 포인트 순서로 포인트를 연결합니다. 샘플을 사용하고 지그재그 순서로 포인트를 정렬했으며 예상대로 작동했습니다.

여기에 이미지 설명을 입력하십시오


아니, 그것은 참조, 위도가 아닌 시간 순서에 따라 차례로 가리킨 일치 imgur.com/d2Ycg.jpg을 아마 더 잘 작동 할 수 있도록 24 시간에 타임 스탬프를 설정하는 CSV의 일부 마사지
매트 윌키

points2one 플러그인을 계속 사용할 수있는 경우 다운로드 할 수있는 위치를 알려주십시오. 곡선을 부드럽게하기 위해 GPS 점과 수동으로 추가 된 점으로 구성된 선을 만들고 싶습니다.
그레이 쇼


3

ArcGIS 10.0에는 Points To Line 도구가 있습니다.

ArcGIS 10.2 for Desktop 설명서 읽는 것이 좋지만 요약하면 다음과 같습니다.

점에서 선 피쳐를 작성합니다.

...

출력의 각 기능은 라인 필드의 고유 한 값을 기반으로합니다.

...

기본적으로 각 출력 라인 피처를 생성하는 데 사용되는 포인트는 찾은 순서대로 사용됩니다. 다른 순서가 필요한 경우 정렬 필드를 지정하십시오.


이것은 나에게 유용한 도구였습니다. 라인 필드 또는 정렬 필드를 사용하여 올바르게 설정하는 것이 중요합니다 (속성에 따라 다름). 필자의 경우 각 날짜가 새 줄을 만들었 음을 이해하기 위해 데이터에 대해 Line Field 옵션 (날짜 + 시간이 아닌 필드 만 사용)을 사용해야했습니다.
Sue Deforest


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.