XYポイントを線に変換しますか?


12

誰かが誤ってウェイポイントとしてGPSトラックを保存し、それらを.csvファイルで私に送信しました。彼らはラインバック(シェイプファイル)が必要です。これを行に変換する最も簡単な方法は何ですか?利用可能なツールは、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スキルのおかげで、両方の間違いを修正できますが、確認するために来週オフィスに戻るまで待たなければなりません。
マットウィルキー

回答:


23

ここで重要なことは、行のポイントをキャプチャの時間でソートし、3列の行に広げることです。データをスプレッドシートに整理することもできますが、多くの場合、クイックスクリプトを作成すると最も柔軟性が高くなります。

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

いいね!それを保持します。
ネイサン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フィールドまたはSortフィールドを使用することが重要です(属性によって異なります)。私の場合、各日付が新しい行を作成したことを理解するために、データに[ラインフィールド]オプション(日付と時刻ではなく、日付属性を持つフィールドのみを使用)を使用する必要がありました。
スーデフォレスト


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.