From 6b483c793b0cc2fbc6fa9be1773a2a2ecbb22001 Mon Sep 17 00:00:00 2001 From: snbenge Date: Tue, 21 Apr 2020 22:37:43 -0400 Subject: [PATCH] Adding files necessary to find building coordinates in both XYZ and GPS coordinates and adding python file to manipulate various pickle files used in semantic aspects of code and BuildingMappings pickles --- .../dataManipulation/findBuildingCoord.py | 65 +++++++++++++++++++ .../pickles/BuildingMappings.pkl | 57 ++++++++++++++++ .../pickles/BuildingMappings.txt | 5 ++ .../dataManipulation/pickles/pickleManage.py | 30 +++++++++ 4 files changed, 157 insertions(+) create mode 100644 src/dataset/dataManipulation/findBuildingCoord.py create mode 100644 src/dataset/dataManipulation/pickles/BuildingMappings.pkl create mode 100644 src/dataset/dataManipulation/pickles/BuildingMappings.txt create mode 100644 src/dataset/dataManipulation/pickles/pickleManage.py diff --git a/src/dataset/dataManipulation/findBuildingCoord.py b/src/dataset/dataManipulation/findBuildingCoord.py new file mode 100644 index 0000000..4134ffc --- /dev/null +++ b/src/dataset/dataManipulation/findBuildingCoord.py @@ -0,0 +1,65 @@ +import sys +import numpy as np +import pickle +import math + +def gpstoLocalFrame(lat, lng, alt): + lat0 = 0.7381566413 + lng0 = -1.4610097151 + alt0 = 265.8 + + dLat = np.deg2rad(lat) - lat0 + dLng = np.deg2rad(lng) - lng0 + dAlt = alt - alt0 + + r = 6400000 # approx. radius of earth (m) + y = r * np.cos(lat0) * np.sin(dLng) + x = r * np.sin(dLat) + z = dAlt + + return [x,y,z] +#Example +# x = gpstoLocalFrame(42.29360387311647,-83.71222615242006,272) +# print(x) + +def buildingtoGPS(building): + pickle_in = open('pickles/BuildingMappings.pkl',"rb") + currDict = pickle.load(pickle_in) + for place in currDict: + if place == building: + return currDict.get(building) + return 0 + +def findClosestEntrance(building1, building2): + gps1 = buildingtoGPS(building1) + gps2 = buildingtoGPS(building2) + + x = [0,0,0,0] + x[0] = calculateDistance(gps1[0][0],gps1[0][1],gps2[0][0],gps2[0][1]) + x[1] = calculateDistance(gps1[0][0],gps1[0][1],gps2[1][0],gps2[1][1]) + x[2] = calculateDistance(gps1[1][0],gps1[1][1],gps2[0][0],gps2[0][1]) + x[3] = calculateDistance(gps1[1][0],gps1[1][1],gps2[1][0],gps2[1][1]) + index = np.argmin(x) + if index == 0: + return [gps1[0],gps2[0]] + elif index == 1: + return [gps1[0],gps2[1]] + elif index == 2: + return [gps1[1],gps2[0]] + else: + return [gps1[1],gps2[1]] +# Example +# print(findClosestEntrance("BBB", "EECS")) + +def calculateDistance(x1,y1,x2,y2): + dist = math.sqrt((x2 - x1)**2 + (y2 - y1)**2) + return dist + +# Example usage of overall file +''' +GPScoords = findClosestEntrance("BBB", "EECS") +Building1 = gpstoLocalFrame(GPScoords[0][0], GPScoords[0][1], GPScoords[0][2]) +Building2 = gpstoLocalFrame(GPScoords[1][0], GPScoords[1][1], GPScoords[1][2]) +print(Building1) +print(Building2) +''' \ No newline at end of file diff --git a/src/dataset/dataManipulation/pickles/BuildingMappings.pkl b/src/dataset/dataManipulation/pickles/BuildingMappings.pkl new file mode 100644 index 0000000..501a791 --- /dev/null +++ b/src/dataset/dataManipulation/pickles/BuildingMappings.pkl @@ -0,0 +1,57 @@ +(dp0 +S'EECS' +p1 +(lp2 +(lp3 +F42.29259200117389 +aF-83.71376574039459 +aI266 +aa(lp4 +F42.29250866981882 +aF-83.71487081050874 +aI264 +aasS'Duderstadt' +p5 +(lp6 +(lp7 +F42.29067138383511 +aF-83.7162870168686 +aI261 +aa(lp8 +F42.29158011297468 +aF-83.71514439582826 +aI263 +aasS'FXB' +p9 +(lp10 +(lp11 +F42.29360387311647 +aF-83.71222615242006 +aI272 +aa(lp12 +F42.29359196883519 +aF-83.71161460876466 +aI274 +aasS'Pierpont' +p13 +(lp14 +(lp15 +F42.291536462529756 +aF-83.71705412864686 +aI261 +aa(lp16 +F42.29065947899958 +aF-83.7178158760071 +aI258 +aasS'BBB' +p17 +(lp18 +(lp19 +F42.292667396114446 +aF-83.71626019477846 +aI264 +aa(lp20 +F42.2933737232794 +aF-83.71622264385225 +aI271 +aas. \ No newline at end of file diff --git a/src/dataset/dataManipulation/pickles/BuildingMappings.txt b/src/dataset/dataManipulation/pickles/BuildingMappings.txt new file mode 100644 index 0000000..f5ca3fa --- /dev/null +++ b/src/dataset/dataManipulation/pickles/BuildingMappings.txt @@ -0,0 +1,5 @@ +EECS +Duderstadt +Pierpont +BBB +FXB diff --git a/src/dataset/dataManipulation/pickles/pickleManage.py b/src/dataset/dataManipulation/pickles/pickleManage.py new file mode 100644 index 0000000..17f0a6f --- /dev/null +++ b/src/dataset/dataManipulation/pickles/pickleManage.py @@ -0,0 +1,30 @@ +import pickle + +# file to print current pickle files to text file +# this allows us to monitor current dictionaries +def printPickle(filename): + pickle_in = open(filename + '.pkl',"rb") + currDict = pickle.load(pickle_in) + f = open(filename + '.txt',"w") + for x in currDict: + f.write('%s\n' % x ) + f.close() + +# update pickle files to update dictionaries +# example: grades = {'Bart', 'Lisa', 'Milhouse', 'Nelson'} +def createPickle(filename, pklList): + f = open(filename + '.pkl', 'wb') # Pickle file is newly created where foo1.py is + pickle.dump(pklList, f) # dump data to f + f.close() + +def updatePickle(filename, pklList): + pickle_in = open(filename + '.pkl',"rb") + currDict = pickle.load(pickle_in) + f = open(filename + '.pkl', 'wb') # Pickle file is newly created where foo1.py is + pickle.dump(currDict + pklList, f) # dump data to f + f.close() + +# Example usage +# createPickle('test', {'Bart', 'Lisa', 'Milhouse', 'Nelson'}) +# updatePickle('test', {'Theo'}) +# printPickle("test")