Integrating Google Maps into a Laravel application involves several steps, including setting up the Laravel project, creating views and controllers, and adding the necessary JavaScript for Google Maps. Below is a detailed guide to accomplish this:
1. Create a New Laravel Project
First, create a new Laravel project using Composer:
composer create-project laravel/laravel laravel-google-maps
2. Create a View
Create a new Blade template for the map view. Add the following code in resources/views/map.blade.php
:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
.text-center {
text-align: center;
}
#map {
width: 100%;
height: 400px;
}
</style>
</head>
<body>
<h1 class="text-center">Laravel Google Maps</h1>
<div id="map"></div>
<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap" async></script>
<script>
let map, activeInfoWindow, markers = [];
/* ----------------------------- Initialize Map ----------------------------- */
function initMap() {
map = new google.maps.Map(document.getElementById("map"), {
center: {
lat: 28.626137,
lng: 79.821603,
},
zoom: 15
});
map.addListener("click", function(event) {
mapClicked(event);
});
initMarkers();
}
/* --------------------------- Initialize Markers --------------------------- */
function initMarkers() {
const initialMarkers = <?php echo json_encode($initialMarkers); ?>;
for (let index = 0; index < initialMarkers.length; index++) {
const markerData = initialMarkers[index];
const marker = new google.maps.Marker({
position: markerData.position,
label: markerData.label,
draggable: markerData.draggable,
map
});
markers.push(marker);
const infowindow = new google.maps.InfoWindow({
content: `<b>${markerData.position.lat}, ${markerData.position.lng}</b>`,
});
marker.addListener("click", (event) => {
if(activeInfoWindow) {
activeInfoWindow.close();
}
infowindow.open({
anchor: marker,
shouldFocus: false,
map
});
activeInfoWindow = infowindow;
markerClicked(marker, index);
});
marker.addListener("dragend", (event) => {
markerDragEnd(event, index);
});
}
}
/* ------------------------- Handle Map Click Event ------------------------- */
function mapClicked(event) {
console.log(map);
console.log(event.latLng.lat(), event.latLng.lng());
}
/* ------------------------ Handle Marker Click Event ----------------------- */
function markerClicked(marker, index) {
console.log(map);
console.log(marker.position.lat());
console.log(marker.position.lng());
}
/* ----------------------- Handle Marker DragEnd Event ---------------------- */
function markerDragEnd(event, index) {
console.log(map);
console.log(event.latLng.lat());
console.log(event.latLng.lng());
}
</script>
</body>
</html>
Note: Replace YOUR_API_KEY
with your actual Google Maps API key.
3. Create a Controller
Generate a new controller using Artisan:
php artisan make:controller MapController
Add the following code to app/Http/Controllers/MapController.php
:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class MapController extends Controller
{
public function index()
{
$initialMarkers = [
[
'position' => [
'lat' => 28.625485,
'lng' => 79.821091
],
'label' => [ 'color' => 'white', 'text' => 'P1' ],
'draggable' => true
],
[
'position' => [
'lat' => 28.625293,
'lng' => 79.817926
],
'label' => [ 'color' => 'white', 'text' => 'P2' ],
'draggable' => false
],
[
'position' => [
'lat' => 28.625182,
'lng' => 79.81464
],
'label' => [ 'color' => 'white', 'text' => 'P3' ],
'draggable' => true
]
];
return view('map', compact('initialMarkers'));
}
}
4. Define Routes
Add a route to routes/web.php
:
<?php
use App\Http\Controllers\MapController;
use Illuminate\Support\Facades\Route;
Route::get('/', [MapController::class, 'index']);
5. Access the Application
Finally, open the Laravel application in your browser:
http://localhost/laravel-google-maps/public
Additional Marker Management
(a) Add a Marker
(a) Add a Marker
javascript
Copy code
const marker = new google.maps.Marker({
position: {
lat: 28.625043,
lng: 79.810135
},
label: { color: "white", text: "P4" },
draggable: true,
map
});
markers.push(marker);
(b) Remove a Marker
javascript
Copy code
const index = markers.findIndex(marker => marker.label.text == "P4");
if(index != -1) {
markers[index].setMap(null);
markers.splice(index, 1);
}
(c) Update Marker Properties
javascript
Copy code
const index = markers.findIndex(marker => marker.label.text == "P4");
if(index != -1) {
markers[index].setOptions({ ...markers[index], position: { lat: 28.625043, lng: 79.810135 } });
}
setOptions(options)
- Set marker properties.setPosition(latlng)
- Set marker position.setLabel(label)
- Set marker label.setVisible(boolean)
- Show/hide a marker.