Skip to content
Snippets Groups Projects
Commit 1635c8e3 authored by Endrizzi, Marco (UG - Comp Sci & Elec Eng)'s avatar Endrizzi, Marco (UG - Comp Sci & Elec Eng)
Browse files

Added functions to display signal on the map

parent 589390de
No related branches found
No related tags found
No related merge requests found
...@@ -41,13 +41,11 @@ export default { ...@@ -41,13 +41,11 @@ export default {
toggleHeatmap() { toggleHeatmap() {
this.heatmap.setMap(this.heatmap.getMap() ? null : this.map) this.heatmap.setMap(this.heatmap.getMap() ? null : this.map)
}, },
// Centers the map on user position when the button is presed // Centers the map on user position when the button is presed
centerMap() { centerMap() {
this.map.setCenter(new google.maps.LatLng(this.center.lat, this.center.lng)) this.map.setCenter(new google.maps.LatLng(this.center.lat, this.center.lng))
this.map.setZoom(15) this.map.setZoom(15)
}, },
/********************* /*********************
APIs IMPLEMENTATION APIs IMPLEMENTATION
**********************/ **********************/
...@@ -149,8 +147,34 @@ export default { ...@@ -149,8 +147,34 @@ export default {
map: map map: map
}) })
// Add marker for every nightlife establishment along with an info window // Wait for google Places API to be finished fetching relevant data
await this.findPlaces() await this.findPlaces()
// Initialize all relevant places on map
this.initializePlaces(map)
// Initialize all relevant signals on the map
this.initializeSignals(map)
// Create a heatmap based on crimes location
await this.getCrimeData()
this.crimes.forEach(crime => {
const lat = crime.location.latitude
const lng = crime.location.longitude
heatmapData.push(new google.maps.LatLng(lat, lng))
})
var heatmap = new google.maps.visualization.HeatmapLayer({
data: heatmapData
})
heatmap.set('radius', heatmap.get('radius') ? null : 80)
heatmap.set('opacity', heatmap.get('opacity') ? null : 0.3)
// Save heatmap and map instance for use in toggleHeatmap()
this.heatmap = heatmap
this.map = map
},
// Creates markers and infoWindows for every relevant nightlife establishment in the area
initializePlaces(map) {
this.places.forEach(place => { this.places.forEach(place => {
const lat = place.geometry.location.lat const lat = place.geometry.location.lat
const lng = place.geometry.location.lng const lng = place.geometry.location.lng
...@@ -170,29 +194,31 @@ export default { ...@@ -170,29 +194,31 @@ export default {
infoWindow.open(map, marker) infoWindow.open(map, marker)
}) })
}) })
},
// Creates markers and infoWindows for every signal in the area
initializeSignals(map) {
var infoWindow = new google.maps.InfoWindow()
// Create a heatmap based on crimes location for (const signalId in this.signals) {
await this.getCrimeData() let signal = this.signals[signalId]
this.crimes.forEach(crime => {
const lat = crime.location.latitude
const lng = crime.location.longitude
heatmapData.push(new google.maps.LatLng(lat, lng))
})
var heatmap = new google.maps.visualization.HeatmapLayer({ let marker = new google.maps.Marker({
data: heatmapData position: new google.maps.LatLng(signal.lat, signal.lng),
}) map: map,
heatmap.set('radius', heatmap.get('radius') ? null : 80) icon: this.getSignalIcon(signal.type)
heatmap.set('opacity', heatmap.get('opacity') ? null : 0.3) })
// Save heatmap and map instance for use in toggleHeatmap() google.maps.event.addListener(marker, 'click', () => {
this.heatmap = heatmap infoWindow.setContent(
this.map = map `<p class="text-subtitle1" style="margin-bottom:8px;">${signal.type}</p>
<p class="text-weight-light">${signal.details}</p>`
)
infoWindow.open(map, marker)
})
}
}, },
/********************* /*********************
GET PLACE'S DETAILS GET PLACES DETAILS
**********************/ **********************/
// Return html element, either Open or closed // Return html element, either Open or closed
isPlaceOpen(place) { isPlaceOpen(place) {
...@@ -225,11 +251,29 @@ export default { ...@@ -225,11 +251,29 @@ export default {
icon = 'https://img.icons8.com/color/40/000000/food-and-wine.png' icon = 'https://img.icons8.com/color/40/000000/food-and-wine.png'
} }
return icon return icon
},
/*********************
GET SIGNAL ICON
**********************/
getSignalIcon(signalType) {
switch (signalType) {
case 'Danger':
return 'https://img.icons8.com/color/50/000000/error--v1.png'
case 'Emergency':
return 'https://img.icons8.com/color/50/000000/ambulance.png'
case 'Fight Breakout':
return 'https://img.icons8.com/color/50/000000/judo.png'
case 'Free Drinks':
return 'https://img.icons8.com/color/50/000000/dizzy-person.png'
case 'Car Rental':
return 'https://img.icons8.com/color/50/000000/car-rental.png'
}
} }
}, },
computed: { computed: {
...mapState(['mapStyles']) ...mapState(['mapStyles']),
...mapState('firebase', ['signals'])
}, },
async mounted() { async mounted() {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment