Repo for non destructive e-scooter intervention materials
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

109 lines
2.8 KiB

#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