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.
108 lines
2.8 KiB
108 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
|
|
|