#usage: $ python3 convert-json-to-geojson.py 1 (where 1 is the first scooter id)
import os , sys , json , geojson
from collections import OrderedDict
arg = int ( sys . argv [ 1 ] )
#read json file
with open ( " historicalData.json " , " r " ) as read_file :
data = json . load ( read_file )
#for each individual scooter, per day, format coordinates
#print(data[0][0]['lastPos'] + data[0][0]['name'])
#print("/n")
#print(data[0][2]['lastPos'] + data[0][0]['name'])
#for entry in data:
#for key in data[5747]:
# print(key['lastPos']+' '+key['name'])
l = [ ] # temp list of positions (including duplicates)
t = [ ] # list containing last location update times
p = { } # dictionairy containing times and positions
nest = [ ]
#print(data[20][0]) # = data[data point (0-5746?)][scooter id (0-10)]
#for j in range(1): # if 1; print only first scooter (aram)
#print(j)
for i in range ( 5747 ) : # all entries (data points)
#l.append(data[i][j]['lastPos']+'|'+data[i][j]['lastLocationUpdate'])
#l.append(data[i][j]['lastLocationUpdate'])
#p.update(i:{data[i][j]['lastPos'],data[i][j]['lastLocationUpdate']})
#l.append(data[i][j]['lastPos'])
#nest.append(data[i][j]['lastLocationUpdate'])
l . append ( [ data [ i ] [ arg ] [ ' lastPos ' ] , data [ i ] [ arg ] [ ' lastLocationUpdate ' ] ] ) #make 2d list
# if entry / pos is the same/double..remove? mmm
#uniquePos = set(l) # remove duplicates from all entries
#print(l[0])
# construct GeoJSON
#list format: l[list index][0=lat,long,1=timestamp]
string1 = ( """
{ " type " : " FeatureCollection " ,
" features " : [
""" )
string2 = " "
for j in range ( 5747 ) : # if 1; print only first scooter (aram)
#for pos, time in p.items(): #make dictionairy if you want unique points
string2 + = ( """
{ " type " : " Feature " ,
" geometry " : { " type " : " Point " , " coordinates " : [ """ + ' , ' .join(l[j][0].split( ' , ' )[::-1])+ """ ] } ,
\" properties \" : { " time " : \" " " " + l [ j ] [ 1 ] + """ \" }
} ,
""" )
#print(', '.join(item.split(',')[::-1])) #reverse
string3 = ( """
]
}
""" )
#print(string2[:-6])
print ( " Writing to file: ' " + str ( arg ) + " .json ' " ) #remove trailing commma in string2
#write to file
f = open ( str ( arg ) + " .json " , " w " )
f . write ( string1 + string2 [ : - 6 ] + string3 )
f . close ( )
print ( " Converting to CSV file: ' " + str ( arg ) + " .csv ' " ) #remove trailing commma in string2
os . system ( " python geojson2csv.py " + str ( arg ) + " .json " + " " + str ( arg ) + " .csv " )
print ( " Successfully written: ' " + str ( arg ) + " .json ' and ' " + str ( arg ) + " .csv ' " )
#remove
#print(len(data)) # total 26143 entries ('days') holy...0-5747 = all scooters, 5748-26143 = only speedy+scooty
#more on time:
#Time when the event occurred. Times are reported in milliseconds since the epoch ( 1970-01-01T00:00:00.000Z), and do not include leap seconds. In certain output formats, the date is formatted for readability.
#
#
#https://earthquake.usgs.gov/data/comcat/data-eventterms.php#time