import os from osgeo import ogr,osr import itertools import pandas as pd inCSV = "csv/par_jtwc_above_ts_1979-1993.csv" outSHP = "shp/par_jtwc_above_ts_1979-1993.shp" ###################################################################### os.chdir(os.getcwd()) #tc_tracks = pd.DataFrame.from_csv(inCSV,index_col=False) tc_tracks = pd.read_csv(inCSV,index_col=False) #tc_tracks.sort(['Y','SN','M','D','H'], ascending=[1,1,1,1,1],inplace=1) tc_tracks.sort_values(['Year','SN','Month','Day','Hour'], ascending=[1,1,1,1,1],inplace=True) tc_tracks.loc[tc_tracks['Lon']<0,'Lon']+=360.0 driver = ogr.GetDriverByName("ESRI Shapefile") data_source = driver.CreateDataSource(outSHP) # create the spatial reference, WGS84 srs = osr.SpatialReference() srs.ImportFromEPSG(4326) # create the layer layer = data_source.CreateLayer("JTWC", srs, ogr.wkbLineString) # Add fields #field_region = ogr.FieldDefn("Serial", ogr.OFTString) #field_region.SetWidth(6) #layer.CreateField(field_region) layer.CreateField(ogr.FieldDefn("SN", ogr.OFTInteger)) layer.CreateField(ogr.FieldDefn("CY", ogr.OFTInteger)) layer.CreateField(ogr.FieldDefn("Y1", ogr.OFTInteger)) layer.CreateField(ogr.FieldDefn("M1", ogr.OFTInteger)) layer.CreateField(ogr.FieldDefn("D1", ogr.OFTInteger)) layer.CreateField(ogr.FieldDefn("H1", ogr.OFTInteger)) layer.CreateField(ogr.FieldDefn("VMax1", ogr.OFTInteger)) layer.CreateField(ogr.FieldDefn("Y2", ogr.OFTInteger)) layer.CreateField(ogr.FieldDefn("M2", ogr.OFTInteger)) layer.CreateField(ogr.FieldDefn("D2", ogr.OFTInteger)) layer.CreateField(ogr.FieldDefn("H2", ogr.OFTInteger)) layer.CreateField(ogr.FieldDefn("VMax2", ogr.OFTInteger)) for (i1,row1),(i2,row2) in itertools.izip(tc_tracks.iterrows(),tc_tracks.iloc[1::].iterrows()): if (row1['SN'] == row2['SN']): # create the feature feature = ogr.Feature(layer.GetLayerDefn()) # Set the attributes using the values from the delimited text file feature.SetField("SN", row2['SN']) feature.SetField("CY", row2['CY']) feature.SetField("Y1", row1['Year']) feature.SetField("M1", row1['Month']) feature.SetField("D1", row1['Day']) feature.SetField("H1", row1['Hour']) feature.SetField("VMax1", row1['VMax']) feature.SetField("Y2", row2['Year']) feature.SetField("M2", row2['Month']) feature.SetField("D2", row2['Day']) feature.SetField("H2", row2['Hour']) feature.SetField("VMax2", row2['VMax']) # create the WKT for the feature using Python string formatting wkt = "LINESTRING (%f %f, %f %f)" % (row1['Lon'],row1['Lat'],row2['Lon'],row2['Lat']) # Create the point from the Well Known Txt line = ogr.CreateGeometryFromWkt(wkt) # Set the feature geometry using the point feature.SetGeometry(line) # Create the feature in the layer (shapefile) layer.CreateFeature(feature) # Destroy the feature to free resources feature.Destroy() # Destroy the data source to free resources data_source.Destroy()