getPlaceList.js 4.1 KB
var map;
var pos;
var infowindow;
var service;
var result_food = [];
var result_entertainment = [];
var result_room = [];

export { pos as posiiton };
export { result_food as foodList };
export { result_entertainment as entList };
export { result_room as roomList };

function initMap() {
    map = new google.maps.Map(document.getElementById('map'), {
        center: {lat: -34.397, lng: 150.644},
        zoom: 17
    });
    infowindow = new google.maps.InfoWindow();


    // Try HTML5 geolocation.
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(function(position) {
            pos = {
                lat: position.coords.latitude,
                lng: position.coords.longitude
            };

            map.setCenter(pos);

            service = new google.maps.places.PlacesService(map);

            service.nearbySearch({
                location: pos,
                radius: 500,
                type: ['bakery']
            }, callback_foods);

            searchPlace('bar','food');
            searchPlace('cafe','food');
            searchPlace('meal_delivery','food');
            searchPlace('meal_takeaway','food');
            searchPlace('restaurant','food');


            searchPlace('department_store','entertainment');
            searchPlace('movie_theater','entertainment');
            searchPlace('museum','entertainment');
            searchPlace('night_club','entertainment');
            searchPlace('shopping_mall','entertainment');
            searchPlace('zoo','entertainment');

            searchPlace('lodging','room');
        });
    }
}

function searchPlace(str, placeType) {
  switch(placeType) {
    case 'food':
      service.nearbySearch({
          location: pos,
          radius: 500,
          type: ['meal_takeaway']
      }, callback_foods);
      break;
    case 'entertainment':
      service.nearbySearch({
          location: pos,
          radius: 500,
          type: [str.toString()]
      }, callback_entertainment);
      break;
    case 'room':
      service.nearbySearch({
          location: pos,
          radius: 500,
          type: ['lodging']
      }, callback_rooms);
      break;
    default:
    break;
  }
}


function callback_foods(results, status) {
    if (status === google.maps.places.PlacesServiceStatus.OK) {
        for (var i = 0; i < results.length; i++) {
            result_food.push(results[i]);
            createMarker_foods(results[i]);
        }
    }
}

function callback_entertainment(results, status) {
    if (status === google.maps.places.PlacesServiceStatus.OK) {
        for (var i = 0; i < results.length; i++) {
            result_entertainment.push(results[i]);
            createMarker_entertainment(results[i]);
        }
    }
}

function callback_rooms(results, status) {
    if (status === google.maps.places.PlacesServiceStatus.OK) {
        for (var i = 0; i < results.length; i++) {
          result_room.push(results[i]);
            createMarker_rooms(results[i]);
        }
    }
}



function createMarker_foods(place) {
    var marker = new google.maps.Marker({
        map: map,
        position: place.geometry.location,
        icon : "./icons/restaurant-15.svg",
        //fillcolor : "#FF0000"
    });

    google.maps.event.addListener(marker, 'click', function() {
        infowindow.setContent(place.name);
        infowindow.open(map, this);
    });
}

function createMarker_entertainment(place) {
    var placeLoc = place.geometry.location;
    var marker = new google.maps.Marker({
        map: map,
        position: place.geometry.location,
        icon : "./icons/gaming-15.svg"
    });

    google.maps.event.addListener(marker, 'click', function() {
        infowindow.setContent(place.name);
        infowindow.open(map, this);
    });
}

function createMarker_rooms(place) {
    var placeLoc = place.geometry.location;
    var marker = new google.maps.Marker({
        map: map,
        position: place.geometry.location,
        icon : "./icons/lodging-15.svg"
    });

    google.maps.event.addListener(marker, 'click', function() {
        infowindow.setContent(place.name);
        infowindow.open(map, this);
    });
}