PARKING IN MESSINA
Quando la ZTL incontra gli OPENDATA
GIOVANNI PIRROTTA
Open Data Sicilia - Summer Edition
4-5-6/09/2015 PALERMO
@gpirrotta
Chi sono?
Giovanni PIRROTTA
Chi sono?
- Software Developer, Università di Messina
-
Dematerializzazione e Conservazione Digitale dei Documenti Informatici
Quali sono i miei interessi?
- Semantic Web, Linked Data, Knowledge Representation
- TDD, BDD, Clean Code, Design Pattern, Agile Practices
- Opendata
- Opensource
LOIUS Project
Linking Italian University Statistics
LINKED OPEN DATA
OPEN DATA CC-BY
5 stelle
OPEN DATA IODL v2 (offline)
PATTI (ME)
Copyright 2015 - ATM MESSINA -
E' vietata la riproduzione anche parziale.
DISCLAIMER
- I dati sono chiusi
- I dati non sono riutilizzabili
- Non è possibile creare opere derivate
SE L'ATM RILASCIASSE I DATI CON LICENZA
OPEN DATA...
- Possibilità di riuso in contesti diversi
- Innovazione con nuovi prodotti e servizi
SE I DATI FOSSERO OPEN DATA
UMAP
UMAP
UMAP
UMAP - AREE ZTL MESSINA
PARKING IN MESSINA
- Far capire all'applicazione la posizione del mio dispositivo e
- se sono all'interno della ZTL di Messina,
- l'applicazione deve restituirmi le tariffe vigenti per quella posizione.
1) Far capire all'applicazione la posizione del mio dispositivo
var area = document.getElementById("demo");
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
} else {
area.innerHTML = "Geolocation is not supported by this browser.";
}
}
function showPosition(position) {
area.innerHTML = "Latitude: " + position.coords.latitude +
"<br>Longitude: " + position.coords.longitude;
}
getCurrentPosition()
1) Far capire all'applicazione la posizione del mio dispositivo
2) Se sono all'interno della ZTL di Messina
- Ogni lotto ZTL è geometricamente un poligono
- Come faccio a capire se mi trovo dentro o fuori una delle aree ZTL di Messina?
- Astraggo l'obiettivo generalizzando il problema: dato un punto geografico qualsiasi, espresso tramite una latitudine e una longitudine, stabilire se si trova all’interno di un poligono chiuso, espresso come insieme di punti geografici
2) Se sono all'interno della ZTL di Messina
Convesso
Concavo
Con buco
I POLIGONI POSSONO ESSERE
2) Se sono all'interno della ZTL di Messina
Ray shooting method
Signed angle method
- Se dispari: INTERNO
- Se pari: ESTERNO
- Se la somma degli
- angoli è 360°: INTERNO
- Se la somma degli
- angoli è 0°: ESTERNO
ALGORITMI GEOMETRICI
2) Se sono all'interno della ZTL di Messina
- Signed angle method
- Philippe Reverdy
- GPSPolyon PHP (github)
- DEMO API
http://www.pirrotta.it/gps-polygon-api/isPointInsidePolygon.php?parameters
latitude (ex: latitude=38.19396)
longitude (ex: longitude=15.55599)
polygon (ex: polygon=38.197344511074,15.556431412697;38.197129504006,15.557370185852;38.192909334811,15.55691421032;38.193706168703,15.554140806198;)
Esempio GPSPolygon
LATITUDINE, LONGITUDINE
38.197344511074,15.556431412697;
38.197129504006,15.557370185852;
38.192909334811,15.55691421032;
38.193706168703,15.554140806198;
Definiamo un poligono in un'area di Messina
(viale Boccetta - Corso Cavour - Via Consolato del Mare - Via Garibaldi)
Piazza Unione Europea
LATITUDINE, LONGITUDINE
38.19396, 15.55599
La piazza è interna
al poligono?
Esempio GPSPolygon
{
info: {
...
},
service: {
point: "38.19396,15.55599",
polygon: [
[
...
],
answer: "YES"
}
}
La piazza è interna al poligono?
Esempio GPSPolygon
{
info: {
...
}
},
service: {
answer: "NO"
}
}
E piazza Duomo è interna al poligono ?
LATITUDINE, LONGITUDINE
38.19396, 15.55599
2) Se sono all'interno della ZTL di Messina
Da dove prendiamo le coordinate geografiche dei poligoni della ZTL di MESSINA?
Dalla mappa creata in precedenza con UMAP
E' possibile esportare i dati di UMAP nei formati più comuni (GEOJSON, GPX, KML,OSM, ETC.)
2) Se sono all'interno della ZTL di Messina
Sappiamo le coordinate della posizione dell'utente ma non sappiamo il nome della via e del numero civico.
Per ottenere le informazioni sulla toponomastica della posizione dell'utente usiamo la libreria PHP GEOCODER di William Durand
2) Se sono all'interno della ZTL di Messina
use Geocoder\HttpAdapter\CurlHttpAdapter;
use Geocoder\Provider\OpenStreetMapProvider;
$curl = new CurlHttpAdapter();
$geocoder = new OpenStreetMapProvider($curl);
$results = $geocoder->getReversedData(array(38.19245, 15.55608));
$street = $results[0]['streetName'];
print $street; // via San Giacomo
- Provider per il geocoding e il reverse
- OpenStreetMap
2) Se sono all'interno della ZTL di Messina
- La latitudine e la longitudine della posizione dell'utente
- Il nome della via in cui si trova l'utente
- Le coordinate di tutti i poligoni della ZTL Messina
- Le tariffe orarie per ciascun area ZTL di Messina
- L'algoritmo per stabilire l'appartenenza o meno di un punto all'interno di un poligono, fornita dalla libreria GPSPolygon
HO TUTTI I DATI CHE MI SERVONO!
3) L'applicazione deve restituirmi le tariffe vigenti per quella via
- L'utente avvia l'APP
- Il GPS del dispositivo comunica la latitudine e la longitudine della posizione in cui si trova
- L'APP, ricevute le coordinate dell'utente, recupera la via
-
L'APP controlla se la posizione dell'utente si trova all'interno della ZTL di Messina
- In caso positivo recupera il piano tariffario per quella via
- L'utente visualizza sul proprio dispositivo la mappa in cui si trova, all'interno del quale un marcatore indicherà la sua posizione
- L'utente visualizza il nome della via in cui si trova
- Se l'utente è all'interno della ZTL visualizzerà il piano tariffario relativo alla sua posizione
- Se l'utente è all'esterno della ZTL visualizzerà l'avviso che il parcheggio è gratuito
SCENARIO D'USO
3) L'applicazione deve restituirmi le tariffe vigenti per quella via
Framework mobile:
RATCHET
HTML5
PUSH.JS
Libreria Javascript:
OPENLAYERS
3) L'applicazione deve restituirmi le tariffe vigenti per quella via
<html>
<body>
<div id="mapdiv"></div>
<script src="http://www.openlayers.org/api/OpenLayers.js"></script>
<script>
map = new OpenLayers.Map("mapdiv");
map.addLayer(new OpenLayers.Layer.OSM());
var lonLat = new OpenLayers.LonLat( -0.1279688 ,51.5077286 )
.transform(
new OpenLayers.Projection("EPSG:4326"),
map.getProjectionObject()
);
var zoom=16;
var markers = new OpenLayers.Layer.Markers( "Markers" );
map.addLayer(markers);
markers.addMarker(new OpenLayers.Marker(lonLat));
map.setCenter (lonLat, zoom);
</script>
</body>
</html>
SIMULAZIONI
NEXUS 5 (dentro ZTL)
SIMULAZIONI
NOKIA LUMIA 520 (dentro ZTL)
SIMULAZIONI
IPHONE 5 (fuori ZTL)
SIMULAZIONI
Blackberry Playbook (fuori ZTL)
CONCLUSIONI
-
AUMENTO DEL VALORE DEI DATI
-
SMART CITIES
DEMO DIDATTICA NON A SCOPO DI LUCRO
- Posizione degli edicolanti per l'acquisto dei gratta e sosta
- Calcolo dell'ammontare da pagare per più ore
- Informazioni di contatto ATM
- etc...
Nuove Funzionalità
GRAZIE
DOMANDE?
#ODS15 - PARKING IN MESSINA
By gpirrotta
#ODS15 - PARKING IN MESSINA
- 1,413