Grenoble/2022-05-02 Import arbres
< Grenoble
Jump to navigation
Jump to search
Informations sur l'import
Nom | Description |
---|---|
Date | 2022-05-02 |
Importateur | Binnette |
Data source | https://data.metropolegrenoble.fr/ckan/dataset/les-arbres-de-grenoble (Dernière modification: 2022-01-26) |
Data set | - 31619 arbres |
Type | Import semi-automatique |
Outils | JOSM + Plugins: Scripting et Conflation |
Changesets |
|
Méthodologie
- Télécharger le jeu de données au format GeoJSON
- Ouvrir le fichier dans JOSM
- Renommer le layer en arbres.geojson
- Convertir les données via mon script de conversion (voir ci-dessous)
- Télécharger les arbres actuel d'OSM via une requêtes Overpass
- Faire la conflation (voir ci-dessous)
Code de conversion
Code à utiliser depuis le plugin Scripting de JOSM:
var layer = josm.layers.get("arbres.geojson");
var ds = layer.data;
var nbObj = ds.allPrimitives().size();
var nbArbres = 0, nbNotArbres = 0;
var nbAvecGenre = 0, nbSansGenre = 0;
var nbAvecEspece = 0, nbSansEspece = 0;
var nbAvecVariete = 0;
var console = require("josm/scriptingconsole");
console.clear();
function getAge(stage) {
switch(stage) {
case 'Arbre jeune': return 'young';
case 'Arbre adulte': return 'semi-mature';
case 'Arbre vieillissant': return 'mature';
default: return '';
}
}
function getGenre(n) {
var genre = n.tags.GENRE_BOTA;
if (typeof(genre) !== "undefined") {
return genre;
}
nbSansGenre++;
return genre;
// var espece = n.tags.ESPECE;
// Fix Cedrus sinensis -> Cedrela sinensis
// Fix missing genre for Magnolia kobus
}
function getEspece(n) {
var espece = n.tags.ESPECE;
// Fix jullibrissin -> julibrissin
// Fix pensylvanica -> pennsylvanica
if (espece) {
return espece;
}
nbSansEspece++;
return espece;
}
function isArbre(n) {
return n.tags.CATEGORIE_DESC == 'Arbre';
}
console.println("Debut traitement des " + nbObj + " arbres du jeu de données.");
ds.each(function (n) {
if (!isArbre(n)) {
nbNotArbres++;
} else {
nbArbres++;
var genre = getGenre(n);
var espece = getEspece(n);
var variete = n.tags.VARIETE;
var startDate = n.tags.ANNEEDEPLANTATION;
var operator = n.tags.COLLECTIVITE;
var age = getAge(n.tags.STADEDEDEVELOPPEMENT); // young, semi-mature, mature
var ref = n.tags.ELEM_POINT_ID;
var source = 'https://data.metropolegrenoble.fr/ckan/dataset/les-arbres-de-grenoble';
var denotation = 'urban';
// new tags
var tags = {};
if (genre) {
tags.genus = genre.trim();
nbAvecGenre++;
if (espece) {
tags.species = genre.trim() + " " + espece.trim();
nbAvecEspece++;
if (variete) {
tags.species = genre.trim() + " " + espece.trim() + " var. " + variete.trim();
nbAvecVariete++;
}
}
}
if (startDate) {
tags.start_date = startDate;
}
if (operator) {
tags.operator = operator;
}
if (age) {
tags.age = age;
}
if (ref) {
tags['ref:FR:Grenoble:trees'] = ref;
}
tags.source = source;
tags.denotation = denotation;
// erase all tags to kepp only the usefull ones
n.tags = tags;
}
});
console.println("Traitement terminé.");
console.println("Arbres=" + nbArbres);
console.println("Non Arbres=" + nbNotArbres);
console.println("AvecGenre=" + nbAvecGenre);
console.println("SansGenre=" + nbSansGenre);
console.println("AvecEspece=" + nbAvecEspece);
console.println("SansEspece=" + nbSansEspece);
console.println("AvecVariete=" + nbAvecVariete);
josm.alert("Done. Arbres=" + nbArbres + ";Non arbres=" + nbNotArbres);
Conflation
C'est la partie la plus complexe du process. Elle requiert de prendre quelques décisions d'arbitrage selon votre appréciation.
J'ai procédé comme ceci :
- Mise à jour des arbres déjà importés. Faciles à trouver, ils ont conserver leur id 'ref:FR:Grenoble:trees'
- Résolution des conflits sur les arbres OSM et les arbres du dataset qui ont le même id 'ref:FR:Grenoble:trees'
- Merge des arbres 'remplacés' du dataset. J'ai choisi une distance arbitraire de 0.5m
- Suppression des anciens arbres (coupés ou remplacés)
- Import des nouveaux arbres du dataset avec merge sur les arbres existant dans OSM