Sondes géographiques pour systèmes répartis multi

Download Report

Transcript Sondes géographiques pour systèmes répartis multi

Sondes géographiques pour
systèmes répartis multi-échelles
Luc CLÉMENT, Arnaud SAUNIER
Jeudi 30 janvier 2014
Projet encadré par:
Claire LECOCQ
Sam ROTTENBERG
Chantal TACONET
Projet INCOME
•
INfrastructure de
gestion de COntexte
Multi-Échelles pour
l’Internet des Objets
•
Données de contexte
!
•
Système multi-échelle
!
PFE ASR 2014
2
Sommaire
I. Objectifs du projet
II. Présentation des API utilisées et envisagées
III. Architecture retenue
IV. Difficultés rencontrées
V. Démonstration
VI. Améliorations possibles
Conclusion
PFE ASR 2014
3
I. Objectifs du projet
•
Gestion de contexte multi-échelle (point de vue
géographique)
Objectif : construire des systèmes dont l’architecture
peut s’adapter à la répartition géographique des
éléments qui le composent
•
Développement de « sondes » géographiques multiéchelles
•
Concept de producteur/consommateur
PFE ASR 2014
4
I. Objectifs du projet
PFE ASR 2014
5
I. Objectifs du projet
PFE ASR 2014
6
I. Objectifs du projet
•
Gestion de données de contexte
•
Quel système mettre en place ?
•
Comment définir les zones d’échange de données ?
Échelles géographiques
PFE ASR 2014
7
I. Objectifs du projet
PFE ASR 2014
8
I. Objectifs du projet
PFE ASR 2014
9
II. Présentation des API
Méthode de localisation
IP
freegoip.net
API utilisées
GPS"
(lat, lon)
Puce GPS
Service mobile
PFE ASR 2014
10
Notre API
II. Présentation des API
Méthode de localisation
IP
freegoip.net
API utilisées
GPS"
(lat, lon)
Puce GPS
Service mobile
PFE ASR 2014
11
?
Notre API
II. Présentation des API
•
Relatives à la géolocalisation
•
Google Geocoding API, Nominatim API
!
•
Relatives à l’affichage des données sur une carte
•
Overpass API, librairie JMapViewer
PFE ASR 2014
12
II. Présentation des API Google Geocoding
• Avantages"
!
•
Documentation
•
Grand nombre d’outils à disposition
• Inconvénients"
•
Licence
PFE ASR 2014
13
II. Présentation des API
Nominatim
• Avantages"
!
•
Projet collaboratif OpenStreetMap
•
Simplicité des résultats
• Inconvénients"
•
Fiabilité des données
•
Manque de données
PFE ASR 2014
14
II. Présentation des API
Nominatim
Choix
Google Geocoding
PFE ASR 2014
15
II. Présentation des API
•
Projet OpenStreetMap
•
Requête sur les données avec
Overpass
•
Gestion de l’affichage avec la
librairie Java JMapViewer
PFE ASR 2014
16
Overpass!
JMapViewer
III. Architecture retenue
Architecture centralisée
Producteur
Consommateur
Producteur
Producteur
Serveur REST
PFE ASR 2014
17
III. Architecture retenue
Architecture centralisée
Producteur
Producteur
Consommateur
?
Producteur
Serveur REST
PFE ASR 2014
18
III. Architecture retenue
REST
Enregistrement
Client
Communications durant une exécution
Nominatim API
Serveur"
OpenStreetMap
REST
Service 1 ou 2
Overpass API
Client
OpenStreetMap
JMapViewer
Affichage
PFE ASR 2014
19
III. Architecture retenue
Système d’échelles
private HashMap<Scale, String> address_components = new HashMap<Scale, String>();
// . . .
public enum Scale {
COUNTRY(4),
REGION(10),
CITY(16),
SUBURB(20),
NEIGHBOURHOOD(22),
STREET(26),
BUILDING(28),
POINT(50);
// . . .
if ( geocodeResponse.getAddressparts().getVillage() != null && !
geocodeResponse.getAddressparts().getVillage().equals("") ) {
address_components.put(Scale.CITY, geocodeResponse.getAddressparts().getVillage());
}
if ( geocodeResponse.getAddressparts().getCity() != null && !
geocodeResponse.getAddressparts().getCity().equals("") ) {
address_components.put(Scale.CITY, geocodeResponse.getAddressparts().getCity());
}
// . . .
PFE ASR 2014
20
III. Architecture retenue
ID
Latitude
Diagramme d’activité
Longitude
Client
Serveur
Calcul des informations
de plus haut niveau
Enregistrement sur le
serveur
Service 1: Plus petite
échelle commune
HashMap<Scale, String>
HashMap<String, GeoScalePath>
Service 2: Client(s) à
proximité
PFE ASR 2014
21
III. Architecture retenue
Description du premier service
Plus petite échelle commune
•
Argument : Liste des identifiants des clients
•
Retours :
•
•
Liste des instances d’échelle communes
entre les identifiants connus
Liste des identifiants inconnus
!
•
Parcours de la HashMap<String, GeoScalePath>
PFE ASR 2014
22
@POST
@Produces("application/xml")
@Consumes("application/xml")
@Path("smallestCommonPath")
SCPQuery idGeoScalePaths
return new SCPResponse(
new GeoScalePath(
result_address_components),
unknownIdGeoScalePaths);
III. Architecture retenue
Algorithme de parcours
public SCPResponse smallestCommonPath(SCPQuery idGeoScalePaths) throws JAXBException {
!
!
!
!
HashMap<Scale, String> result_address_components = new HashMap<Scale, String>();
List<String> unknownIdGeoScalePaths = new ArrayList<String>();
boolean firstRecognizedGeoScalePath = true;
for (String id : idGeoScalePaths.getIdGeoScalePaths()) {
if (!listGeoScalePaths.containsKey(id))
unknownIdGeoScalePaths.add(id);
else {
if (firstRecognizedGeoScalePath) {
result_address_components = (HashMap<Scale, String>) listGeoScalePaths.get(id).getAddress_components().clone();
firstRecognizedGeoScalePath = false;
} else {
Scale largestScaleToRemove = null;
for (Scale scale : result_address_components.keySet()) {
if (!listGeoScalePaths.get(id).getAddress_components().containsKey(scale) || (listGeoScalePaths.get(id).getAddress_components().containsKey(scale) && !
listGeoScalePaths.get(id).getAddress_components().get(scale).equals(result_address_components.get(scale) ))) {
if (largestScaleToRemove == null || largestScaleToRemove.ordinal() > scale.ordinal())
largestScaleToRemove = scale;
}
}
Set<Scale> scaleToRemove = new HashSet<Scale>();
for (Scale scale : result_address_components.keySet()) {
if (largestScaleToRemove == null || scale.ordinal() >= largestScaleToRemove.ordinal())
scaleToRemove.add(scale);
}
for (Scale scale : scaleToRemove) {
result_address_components.remove(scale);
} } } }
return new SCPResponse(new GeoScalePath(result_address_components), unknownIdGeoScalePaths);
}
PFE ASR 2014
23
III. Architecture retenue
Description du second service
Clients à proximité
•
Arguments :
•
Échelle définissant la « proximité »
• Identifiant du client de référence
@POST
@Produces("application/xml")
@Consumes("application/xml")
@Path("geoScalePathsInArea")
GeoScalePathsInAreaQuery query
String myId = query.getId();
Scale scale = query.getScale();
!
•
Retour :
•
Liste des clients dans l’instance d’échelle
définie
PFE ASR 2014
24
HashMap<Scale, String> currentAddress_components =
(HashMap<Scale, String>) currentGSP
.getAddress_components()
.clone();
// . . .
myResultList.add(currentGSP);
// . . .
result.setList(myResultList);
return result;
III. Architecture retenue
public void drawArea(String name,
Color borderColor ,
Color innerColor,
List<Coordinate> nodes) {
Style style = new Style();
Color myColor = new Color(innerColor.getRed(),
innerColor.getGreen(), innerColor.getBlue(), 50);
Font font = new Font("Calibri", Font.BOLD, 20);
Serveur"
!
Overpass API
Client
OpenStreetMap
JMapViewer
Affichage
Affichage des résultats
!
!
style.setColor(borderColor);
style.setBackColor(myColor);
style.setStroke(new BasicStroke(2));
style.setFont(font);
MapPolygon frontieres = new MapPolygonImpl(layerAreas, name, nodes, style);
//Add the area to the map
removeArea(name);
areas.put(name, frontieres);
map().addMapPolygon(frontieres);
}
PFE ASR 2014
25
III. Architecture retenue
Affichage des résultats
public void drawArea(String name,
Color borderColor ,
Color innerColor,
List<Coordinate> nodes) {
Style style = new Style();
Color myColor = new Color(innerColor.getRed(),
innerColor.getGreen(), innerColor.getBlue(), 50);
Font font = new Font("Calibri", Font.BOLD, 20);
!
Serveur"
!
!
Overpass API
Client
style.setColor(borderColor);
style.setBackColor(myColor);
style.setStroke(new BasicStroke(2));
style.setFont(font);
MapPolygon frontieres = new MapPolygonImpl(layerAreas, name, nodes, style);
//Add the area to the map
removeArea(name);
areas.put(name, frontieres);
map().addMapPolygon(frontieres);
}
OpenStreetMap
JMapViewer
Affichage
!
!
public static List<Coordinate> getArea(String query) throws IOException {
// . . .
String REST_URI = "http://overpass-api.de";
ClientConfig config = new DefaultClientConfig();
WebResource service = Client.create(config).resource(REST_URI);
osm Area = service.path(« api").path("interpreter")
.queryParam("data", query)
.get(osm.class);
!
PFE ASR 2014
26
III. Architecture retenue
Algorithme de traçage
Overpass API
<?xml version="1.0" encoding="UTF-8"?>"
<osm version="0.6" generator="Overpass API »>"
!
rel"
["name"="Toulouse"]"
["admin_level"="7"];"
(>;);"
out;
<node id="ref1" lat="x1" lon="y1"/>"
<node id="ref2" lat="x2" lon="y2"/>"
"
…"
<way id="id2">"
<nd ref="ref2" />"
<nd ref="ref1" />"
<nd ref="ref3" />"
"
…"
</way>"
<way id="id1">"
"
…"
</way>"
<relation id="idRelation">"
<way ref="id1"/>"
<way ref=« id2"/>"
"
…"
</relation>"
!
</osm>
PFE ASR 2014
27
Pour chaque id de way de relation
récupérer le way associé"
!
Pour chaque ref de nd de way
récupérer le node associé et l’ajouter à notre liste.
III. Architecture retenue
Algorithme de traçage
String associatedFile = associatedFileToQuery(query);
if (!associatedFile.equals(""))
return getCoordinates(associatedFile);
// . . .
if (System.currentTimeMillis() - startTime > 500) {
UUID uuid = new UUID(startTime, System.currentTimeMillis());
String fileName = uuid.toString();
setCoordinates(fileName, result);
linkFileToQuery(fileName, query);
}
!
}
return result;
listQueries
(rel[name="Midi-Pyrénées"];._;>;);out;<>00000143-d4b6-9542-0000-0143d4b754c4
(rel[name="Toulouse"][admin_level=8];._;>;);out;<>00000143-d4b8-d56a-0000-0143d4b8e112
(rel[ref="1"][source="GrandToulouse"];._;>;);out;<>00000143-d4cd-fe83-0000-0143d4ce0292
(rel[ref="5"][source="GrandToulouse"];._;>;);out;<>00000143-d4ce-ef97-0000-0143d4cef2c2
(rel[ref="2"][source="GrandToulouse"];._;>;);out;<>00000143-d4ef-0dca-0000-0143d4ef162e
PFE ASR 2014
28
IV. Difficultés rencontrées
• Licences"
•
•
•
Type de licence
Nombre de requêtes autorisées
Aucun retour de la part de Google
• OpenStreetMap"
•
•
Pas de schéma XML pour Nominatim
Manque de données pour certaines zones
géographiques
PFE ASR 2014
29
V. Démonstration
PFE ASR 2014
30
VI. Améliorations possibles
•
Utilisation de l’adresse IP
•
Utilisation de l’outil Maven
•
Développement sur plateformes mobiles (Android)
PFE ASR 2014
31
Conclusion
•
Développement des compétences
•
•
•
Java, Git, Rest
Objectifs atteints
•
Code fonctionnel et maintenable
•
Documentation complète (Javadoc)
Travail restant
•
Extension au développement sur mobile
•
Intégration au projet INCOME
PFE ASR 2014
32
33