2015-10-25 9 views
6

मेरे पास जीपीएस डेटा (लैट, लॉन) और संबंधित क्षेत्र के सापेक्ष shapefile से कुछ डेटा पॉइंट हैं। तो:पायथन: सड़कों के आकार को इंगित करें

ID   x   y 
3447 11.400427 48.816806 
3448 11.400759 48.816772 
3449 11.401424 48.816684 
3450 11.401758 48.816631 
3451 11.402090 48.816566 
3452 11.402422 48.816490 

मैं प्रत्येक संबंधित shapefile खंड के लिए प्रदान करना चाहते हैं:

import pandas as pd 
import shapefile 
sf = shapefile.Reader('roadshape') 
df = pd.read_csv('gpsdata.csv') 

अब df डेटा का विश्लेषण करने मैं कर रहा हूँ में शामिल है कुछ इस तरह है। मैं निम्नलिखित करने की कोशिश कर रहा हूं। मैं बाध्यकारी बॉक्स पर विचार कर रहा हूं और मैं यह देखने की कोशिश करना चाहता हूं कि डेटा किस डेटा बॉक्स को डेटा बार इंगित करता है।

dfs = pd.DataFrame() 
shapes = sf.shapes() 
X =list() 
Y=list() 
for i in range(0,len(shapes)): 
     X.append([shapes[i].bbox[0],shapes[i].bbox[2]]) 
     Y.append([shapes[i].bbox[1],shapes[i].bbox[3]]) 
dfs['X'] = X 
dfs['Y'] = Y 

अब मैं कैसे देख सकता हूं कि मेरे बिंदु कौन से बॉक्स हैं? कहाँ dfs है इस

dfs = 
       X        Y 
0 [10.9467244189, 10.9704393002] [48.2671975178, 48.2697440003] 
1 [11.5138847999, 11.5143541004] [48.6497096997, 48.6515363002] 
2 [11.4618209998, 11.4620896004] [48.9305448001, 48.9307776004] 
3 [10.6196591004, 10.6207268996] [48.8635958001, 48.8665684003] 
4 [10.652098, 10.6559025999] [48.8005320998, 48.8042877999] 
5 [11.1863882997, 11.1884544004] [48.3726685999, 48.3738253996] 
6 [11.1580075998, 11.1593822] [48.3785226999, 48.3791247996] 
7 [11.1077987, 11.1112508996] [48.3829125003, 48.3830440999] 
8 [11.0842697004, 11.0886483996] [48.3840543003, 48.3879626001] 
9 [11.0910959001, 11.0926532003] [48.3903297003, 48.3916850002] 
10 [11.4766434001, 11.4822778002] [49.0389071001, 49.0399456003] 
11 [11.7037148998, 11.7073818] [48.6927748996, 48.6961230001] 
12 [11.7767894997, 11.7770049998] [48.6279809001, 48.6279908997] 
+0

क्या मैं सही समझता हूं कि आकार [i] .bbox [0] बाएं अधिकतम एक्स समन्वय, bbox [1] - शीर्ष वाई समन्वय, bbox [2] - दायां एक्स, bbox [3] - नीचे वाई और इन दोनों अंक बाध्यकारी बॉक्स परिभाषित करते हैं? और नतीजतन आप शब्दकोश प्राप्त करना चाहते हैं (उदाहरण के लिए) जो प्रत्येक जीपीएस बिंदु से संबंधित बीबीओएक्स के नक्शे हैं? –

+0

ज्यामिति को संभालने के लिए आकार, fiona, ogr जैसे अधिक मजबूत मॉड्यूल हैं! – SIslam

+0

क्या आपके पास कोई अपडेट है? आप पांडा डीएफ (सीमाएं) को मेरे सीएसवी में अनुकूलित कर सकते हैं! – SIslam

उत्तर

3

की तरह कुछ मैं फियोना के लिए जाना होगा, सुडौल और निर्मित सीएसवी!

कहें कि मेरे पास दो फाइलें हैं: 1) इसमें कई लाइन रिकॉर्ड्स के साथ एक लाइन आकार फ़ाइल। यानी 2) तीन स्तंभों के साथ एक CSV फ़ाइल आईडी, देशांतर (एक्स), अक्षांश (y)

CSV फ़ाइल सामग्री (अक्षां, लंबा है UTM) -

id,lat,long 

0,207726.012448,2733349.10914 
0,197599.591396,2730510.17345 
0,203187.5176,2736670.5686 
0,207301.877268,2730639.81898 
0,200929.610894,2726377.9799 
0,204604.214301,2737608.342 
0,203780.386032,2734372.2709 
0,203077.172106,2731166.44271 
0,202477.371994,2728622.46292 
0,202249.861606,2734889.33996 
0,201794.840831,2732159.21531 

अब नीचे दिए गए कोड के लिए bbox उत्पन्न करता है रेखा आकार के प्रत्येक रिकॉर्ड और यह जांचता है कि सीएसवी फ़ाइल का किस बिंदु को उस स्थिति के बाद उस बॉक्स के अंदर है!

import fiona 
from shapely import geometry 
import csv 
csv_file = open(r"C:\data_test.csv",'rb') 
reader = csv.reader(csv_file) 
pnts = [] 
for i in reader: 
    pnts.append ((i[1],i[2])) 
bboxes = [] 
fiona_collection = fiona.open(r"C:\Rd.shp") 
for i in fiona_collection: 
    bboxes.append(geometry.asShape(i['geometry']).bounds) 


for i in pnts: 
    for j in bboxes: 
     shape = geometry.box(*map(float,j)) 
     pnt = geometry.Point(*map(float,i)) 
     if shape.contains(pnt): 
      print "bbox {0} contains {1} ".format(j,i) 

यह

bbox (197306.68136754428, 2729718.6493367185, 197823.7504301681, 2732035.118737273) contains ('197599.591396', '2730510.17345') 
bbox (202799.29018572776, 2728807.5534000006, 204604.21430105247, 2737608.342) contains ('203187.5176', '2736670.5686') 
bbox (202799.29018572776, 2728807.5534000006, 204604.21430105247, 2737608.342) contains ('203780.386032', '2734372.2709') 
bbox (202799.29018572776, 2728807.5534000006, 204604.21430105247, 2737608.342) contains ('203077.172106', '2731166.44271') 
bbox (2.0747999996, 2727558.2885, 203336.7932000002, 2728807.5534000006) contains ('202477.371994', '2728622.46292') 

prints- आप here पर परीक्षण डेटा डाउनलोड कर सकते हैं।

संबंधित मुद्दे