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

  1. Far capire all'applicazione la posizione del mio dispositivo e
  2. se sono all'interno della ZTL di Messina,
  3. 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

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

  1. L'utente avvia l'APP
  2. Il GPS del dispositivo comunica la latitudine e la longitudine della posizione in cui si trova
  3. L'APP, ricevute le coordinate dell'utente, recupera la via
  4. 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
  5. L'utente visualizza sul proprio dispositivo la mappa in cui si trova, all'interno del quale un marcatore indicherà la sua posizione
  6. L'utente visualizza il nome della via in cui si trova
  7. Se l'utente è all'interno della ZTL visualizzerà il piano tariffario relativo alla sua posizione
  8. 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?

@gpirrotta

giovanni.pirrotta.it

giovanni@pirrotta.it

 

#ODS15 - PARKING IN MESSINA

By gpirrotta

#ODS15 - PARKING IN MESSINA

  • 1,413