XY बिंदुओं को एक रेखा में बदलें?


12

किसी ने गलती से GPS ट्रैक को वेपॉइंट के रूप में सहेज लिया और फिर उन्हें .csv फ़ाइल में मेरे साथ भेज दिया। वे एक लाइन बैक (शेपफाइल) चाहते हैं। इसे एक पंक्ति में बदलने की सबसे सरल विधि क्या है? उपलब्ध उपकरण वरीयता के क्रम में आर्कम, गाल्ड / ओगर और कम या ज्यादा हैं। मैं इसके बजाय एक अतिरिक्त उपकरण स्थापित नहीं करूँगा; एक ऑनलाइन रूपांतरण सेवा ठीक होगी।

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 प्लगइन ने संभवतः काम किया होगा, और दूसरों को भी। मार्क के अजगर कौशल के लिए धन्यवाद दोनों गलतियों को ठीक किया जा सकता है, हालांकि मुझे इंतजार करना होगा जब तक कि मैं अगले सप्ताह कार्यालय में वापस सत्यापित करने के लिए नहीं हूं।
मैट विल्की

जवाबों:


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

अच्छा! उस एक को रखना।
नाथन डब्ल्यू

यह OGR के लिए सबसे अच्छा ट्यूटोरियल है, मैंने कभी देखा है
dassouki

8

QGIS प्लगइन "प्वॉइंट्स 2 ओएन" होना चाहिए जो आप देख रहे हैं।

यदि आप "इस फ़ील्ड द्वारा क्रमबद्ध अंक" पर टिक नहीं करते हैं, तो प्लगइन उन्हें परत में आंतरिक बिंदु क्रम में जोड़ता है। मैंने आपके नमूने का उपयोग किया, अंक को एक ज़िगज़ैग क्रम में व्यवस्थित किया और यह उम्मीद के मुताबिक काम किया:

यहाँ छवि विवरण दर्ज करें


नहीं, यह अक्षांश और समय अनुक्रम के आधार पर इंगित करने के लिए बिंदु से मेल खाता है, देखें imgur.com/d2Ycg.jpg शायद csv की कुछ मालिश के साथ टाइमस्टैम्प को 210 में बदलने के लिए यह बेहतर काम कर सकता है
मैट विल्कलेट

कृपया मुझे बताएं कि मैं पॉइंट 2 प्लगइन कैसे डाउनलोड कर सकता हूं, अगर यह अभी भी उपलब्ध है। मैं जीपीएस बिंदुओं और मैन्युअल रूप से जोड़े गए बिंदुओं (वक्रों को सुचारू करने के लिए) से बना एक रेखा बनाना चाहता हूं।
ग्रे शॉ

यह पाया: pyqgis.org/repo/contributed
Grey Shaw

3

ArcGIS 10.0 में पॉइंट टू लाइन टूल है।

मैं डेस्कटॉप दस्तावेज़ के लिए आर्कजीआईएस 10.2 पढ़ने की सलाह देता हूं , लेकिन सारांश में:

बिंदुओं से पंक्ति सुविधाएँ बनाता है।

...

आउटपुट में प्रत्येक सुविधा लाइन फ़ील्ड में अनन्य मानों पर आधारित होगी।

...

डिफ़ॉल्ट रूप से, प्रत्येक आउटपुट लाइन सुविधा बनाने के लिए उपयोग किए जाने वाले बिंदुओं का उपयोग उनके द्वारा पाए जाने वाले क्रम में किया जाएगा। यदि कोई भिन्न क्रम वांछित है, तो एक क्रमबद्ध फ़ील्ड निर्दिष्ट करें।


यह मेरे लिए एक उपयोगी उपकरण था। इसे सही करने के लिए लाइन फ़ील्ड या सॉर्ट फ़ील्ड का उपयोग करना महत्वपूर्ण है (विशेषताओं पर निर्भर करता है)। मेरे मामले में मुझे यह समझने के लिए डेटा के लिए लाइन फ़ील्ड विकल्प (तारीख विशेषता के साथ केवल फ़ील्ड और दिनांक + समय का उपयोग करके) का उपयोग करना था, प्रत्येक तिथि ने एक नई लाइन बनाई।
सूए डेफ़ेस्टेस्ट


1

नि: शुल्क GME ArcGIS एक्सटेंशन Convert.pointstolines प्रदान करता है जो एक बिंदु परत से एक सिंगल लाइन बनाएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.