{% extends 'base.html.twig' %}
{% block title %}Hello IsochroneController!{% endblock %}
{% block body %}
<style type="text/css">
#theMap {
width:100%;
height:600px;
}
form .alert {
display:none;
margin:0;
}
</style>
<script type="text/javascript" src="/ekotools/javascripts/isochrone.js"></script>
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-body">
<h3>Isochrones et Isodistance</h3>
<form action="index.html" method="get" onsubmit="return testIsochrone();">
<div class="form-group">
<div class="col-xs-12 row">
<div class="col-xs-6">
<div class="clearfix">
<div class="col-xs-2"></div>
<div class="col-xs-5"><label><input type="radio" name="type" id="typeDuration" checked="checked"/> Temps (isochrone)</label></div>
<div class="col-xs-3"><input type="text" name="value" id="durationValue" value="10" size="7" class="form-control"/></div>
<div class="col-xs-2">en minutes</div>
</div>
<div class="clearfix">
<div class="col-xs-2">- ou -</div>
<div class="col-xs-5"><label><input type="radio" name="type"/> distance (isodistance)</label></div>
<div class="col-xs-3"><input type="text" name="value" id="distanceValue" value="1000" size="7" class="form-control"/></div>
<div class="col-xs-2">metres</div>
</div>
</div>
<div class="col-xs-6">
<div class="col-xs-6">
<input type="submit" value="Calcul du polygone" class="form-control"/>
</div>
<div class="col-xs-6">
<div class="alert alert-warning" id="computing">Calcul en cours...</div>
<div class="alert alert-danger" id="error">Erreur...</div>
</div>
</div>
</div>
<div class="col-xs-12">
<div class="col-xs-1">Mode</div>
<div class="col-xs-9">
<label><input type="radio" name="mode" id="modeWalking" checked="checked"/> Marche</label>
<label><input type="radio" name="mode" id="modeBicycling"/> Vélo</label>
<label><input type="radio" name="mode" id="modeDriving"/> Voiture</label>
<label><input type="radio" name="mode"/> Transport</label>
</div>
</div>
</div>
</form>
</div>
</div>
<div class="card">
<div class="card-body">
<div class="text-center alert alert-info">Cliquer sur la carte pour choisir un emplacement</div>
<div id="theMap"></div>
</div>
</div>
</div>
</div>
<script type="text/javascript">
$( document ).ready(function() {
var marker = false,
polygon = false,
latitude = 48.858254,
longitude = 2.294563;
isochrone.load({
map: 'theMap',
key: 'AIzaSyBdNRvl5qARhD6X3JaQ1En7f4ETuJDl95A', // Do change the key: it won't work on your domain anyway :-)
callback: function (iso) {
marker = new google.maps.Marker({position: {lat: latitude, lng: longitude}, map: iso.map.map});
iso.map.map.setOptions({
clickableIcons: false,
draggableCursor: 'pointer',
styles: [{
featureType: "poi",
elementType: "labels",
stylers: [{visibility: "off"}]
}]
});
iso.map.map.addListener('click', function (data) {
latitude = data.latLng.lat();
longitude = data.latLng.lng();
marker.setPosition({lat: latitude, lng: longitude});
});
},
debug: true
});
/* Allow to click on the map */
function testIsochrone() {
document.getElementById('error').style.display = 'none';
document.getElementById('computing').style.display = 'block';
if (polygon) {
polygon.setMap(null);
polygon = null;
}
let value = parseFloat(document.getElementById(document.getElementById('typeDuration').checked ? 'durationValue' : 'distanceValue').value.replace(',', '.'));
if (document.getElementById('typeDuration').checked) {
value = value * 60;
}
isochrone.compute({
lat: latitude,
lng: longitude,
cycles: 5,
slices: 8,
type: document.getElementById('typeDuration').checked ? 'duration' : 'distance',
value: value,
mode: document.getElementById('modeWalking').checked ? 'walking' : (document.getElementById('modeBicycling').checked ? 'bicycling' : (document.getElementById('modeDriving').checked ? 'driving' : 'transit')),
callback: function (status, points) {
document.getElementById('computing').style.display = 'none';
if (status === 'OK') {
polygon = new google.maps.Polygon({path: points});
polygon.setMap(isochrone.map.map);
} else {
document.getElementById('error').innerHTML = status;
document.getElementById('error').style.display = 'block';
}
}
});
return false;
}
});
</script>
{% endblock %}