Skip to content

Commit

Permalink
Ajout RPG et PCI Express, maj GPU
Browse files Browse the repository at this point in the history
  • Loading branch information
vinsag committed Mar 9, 2020
2 parents 8b29cfc + 8c08ba1 commit 75138d2
Show file tree
Hide file tree
Showing 12 changed files with 592 additions and 679 deletions.
13 changes: 13 additions & 0 deletions LICENCE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# APICARTO

This software is released under the licence CeCILL-B (Free BSD compatible)

You may obtain a copy of the License at :

http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.txt (english)

http://www.cecill.info/licences/Licence_CeCILL-B_V1-fr.txt (french)

see http://www.cecill.info/

Copyright (c) 2017 IGN
662 changes: 0 additions & 662 deletions LICENSE.AGPL.txt

This file was deleted.

45 changes: 38 additions & 7 deletions controllers/cadastre/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ const gppWfsClient = require('../../middlewares/gppWfsClient');

const _ = require('lodash');


/**
* Creation d'une chaîne de proxy sur le geoportail
* @param {String} featureTypeName le nom de la couche WFS
Expand All @@ -22,6 +23,20 @@ function createCadastreProxy(featureTypeName){
validateParams,
function(req,res){
var params = matchedData(req);
var featureTypeNameFinal = featureTypeName;

if ((params.source_ign) && (featureTypeName != 'BDPARCELLAIRE-VECTEUR_WLD_BDD_WGS84G:divcad') && (featureTypeName != 'CADASTRALPARCELS.PARCELLAIRE_EXPRESSG:feuille')) {
if(params.source_ign.toUpperCase() == "PCI") {
featureTypeNameFinal = featureTypeName.replace('BDPARCELLAIRE-VECTEUR_WLD_BDD_WGS84G', 'CADASTRALPARCELS.PARCELLAIRE_EXPRESS');
} else {
return res.status(400).send({
code: 400,
essage: 'Erreur de valeur pour une recherche sur la couche PCI EXPRESS'
});

}
}
params = _.omit(params,'source_ign');

/* insee => code_dep et code_com */
if ( params.code_insee ){
Expand All @@ -32,7 +47,7 @@ function createCadastreProxy(featureTypeName){
}

/* hack du couple code_dep et code_com dans le cas des communes */
if ( featureTypeName.endsWith('commune') ){
if ( featureTypeNameFinal.endsWith('commune') ){
if ( params.code_dep && params.code_com ){
params.code_insee = params.code_dep + params.code_com ;
params = _.omit(params,'code_com');
Expand All @@ -45,7 +60,7 @@ function createCadastreProxy(featureTypeName){
if( typeof params._limit == 'undefined') {params._limit = 1000;}

/* requête WFS GPP*/
req.gppWfsClient.getFeatures(featureTypeName, params)
req.gppWfsClient.getFeatures(featureTypeNameFinal, params)
/* uniformisation des attributs en sortie */
.then(function(featureCollection){
featureCollection.features.forEach(function(feature){
Expand Down Expand Up @@ -92,11 +107,13 @@ var corsOptionsGlobal = function(origin,callback) {
*
* TODO Principe à valider (faire un middleware de renommage des paramètres si l'approche est trop violente)
*/


var legacyValidators = [
check('codearr').optional().custom(function(){return false;}).withMessage('Le paramètre "codearr" a été remplacé par "code_arr" pour éviter des renommages dans les données et chaînage de requête'),
check('dep').optional().custom(function(){return false;}).withMessage('Le paramètre "dep" a été remplacé par "code_dep" pour éviter des renommages dans les données et chaînage de requête'),
check('insee').optional().custom(function(){return false;}).withMessage('Le paramètre "insee" a été remplacé par "code_insee" pour éviter des renommages dans les données et chaînage de requête')

check('insee').optional().custom(function(){return false;}).withMessage('Le paramètre "insee" a été remplacé par "code_insee" pour éviter des renommages dans les données et chaînage de requête'),
check('source_ign').optional().isString().isLength({min:3,max:3}).withMessage('La seule valeur possible est PCI pour utiliser les couches PCI-Express')
];

var communeValidators = legacyValidators.concat([
Expand All @@ -108,9 +125,15 @@ var communeValidators = legacyValidators.concat([
check('_limit').optional().isNumeric(),
check('_start').optional().isNumeric()
]);

router.get('/commune', cors(corsOptionsGlobal),communeValidators, createCadastreProxy('BDPARCELLAIRE-VECTEUR_WLD_BDD_WGS84G:commune'));
router.post('/commune',cors(corsOptionsGlobal), communeValidators, createCadastreProxy('BDPARCELLAIRE-VECTEUR_WLD_BDD_WGS84G:commune'));
router.post('/commune',cors(corsOptionsGlobal),communeValidators, createCadastreProxy('BDPARCELLAIRE-VECTEUR_WLD_BDD_WGS84G:commune'));

/**
* Récupération des divisions de la BDParcellaire
* la valeur source_ign ne sera pas utilisée pour la recherche.
* Nous avons la requête module pour faire directement une recherche sur PCI EXPRESS
*/

var divisionValidators = communeValidators.concat([
check('section').optional().isAlphanumeric().isLength({min:2,max:2}).withMessage('Le numéro de section est sur 2 caractères'),
Expand Down Expand Up @@ -140,9 +163,17 @@ router.post('/parcelle', cors(corsOptionsGlobal),parcelleValidators, createCadas
*
*/
router.get('/localisant',cors(corsOptionsGlobal),parcelleValidators, createCadastreProxy('BDPARCELLAIRE-VECTEUR_WLD_BDD_WGS84G:localisant'));
router.post('/localisant', cors(corsOptionsGlobal),parcelleValidators, createCadastreProxy('BDPARCELLAIRE-VECTEUR_WLD_BDD_WGS84G:localisant'));
router.post('/localisant', cors(corsOptionsGlobal),parcelleValidators, createCadastreProxy('BDPARCELLAIRE-VECTEUR_WLD_BDD_WGS84Glocalisant'));


/**
* Récupérations des feuilles(divisions sur BDParcellaire) pour PCI Express
* Les champs validator sont identiques aux divisions
*
*/

router.get('/feuille', cors(corsOptionsGlobal),divisionValidators, createCadastreProxy('CADASTRALPARCELS.PARCELLAIRE_EXPRESS:feuille'));
router.post('/feuille', cors(corsOptionsGlobal),divisionValidators, createCadastreProxy('CADASTRALPARCELS.PARCELLAIRE_EXPRESS:feuille'));

//TODO clarifier la restoration ou non de geometrie <=> parcelle?geom=... avec surface & surface d'intersection

module.exports=router;
5 changes: 3 additions & 2 deletions controllers/gpu/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,16 @@ function createGpuProxy(typeName){
gpuWfsClient,
function(req,res){
var params = matchedData(req);
params._limit = 100;
params._limit = 5000;

//Si couche du type generateur ou assiette le champ categorie corresponds à suptype
if (params.categorie) {
if ((typeName.indexOf('generateur')) || (typeName.indexOf('assiette'))) {
params.suptype = params.categorie.toLowerCase();
params = _.omit(params,'categorie');
}

}

req.gpuWfsClient.getFeatures(typeName, params)
.then(function(featureCollection) {
res.json(featureCollection);
Expand Down
126 changes: 126 additions & 0 deletions controllers/rpg/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
var Router = require('express').Router;
var router = new Router();
var cors = require('cors');
const { check } = require('express-validator/check');
const { matchedData } = require('express-validator/filter');

const validateParams = require('../../middlewares/validateParams');
const {isGeometry,isCodeInsee} = require('../../checker');

const gppWfsClient = require('../../middlewares/gppWfsClient');

const _ = require('lodash');
const lastYearRPG = 2017;
const firstYearRPG = 2010;

/**
* Creation d'une chaîne de proxy sur le geoportail
* @param {String} valeurSearch du chemin le nom de la couche WFS
*/
function createRpgProxy(valeurSearch) {
return [
gppWfsClient,
validateParams,
function(req,res){
var params = matchedData(req);
var FeatureTypeName= '';
/* Modification année dans le flux */
if (valeurSearch == 'avant2015') {
if ((params.annee >= firstYearRPG) && (params.annee < 2015)) {
if (params.annee == 2014) {
featureTypeName = 'RPG.' + params.annee + ':ilots_anonymes';
} else {
featureTypeName = 'RPG.' + params.annee + ':rpg_' + params.annee;
}
} else {
return res.status(400).send({
code: 400,
message: 'Année Invalide : Valeurs uniquement entre ' + firstYearRPG + ' et 2014'
});
}
} else {
if ((params.annee >= 2015) && (params.annee <= lastYearRPG)) {
featureTypeName = 'RPG.' + params.annee + ':parcelles_graphiques';
} else {
return res.status(400).send({
code: 400,
essage: 'Année Invalide : Valeurs uniquement entre 2015 et ' + lastYearRPG
});

}
}
/* Supprimer annee inutile ensuite de params */
params = _.omit(params,'annee');

/* Value default pour _limit an _start */
if ( typeof params._start == 'undefined' ) {params._start = 0;}
if( typeof params._limit == 'undefined') {params._limit = 1000;}

/* requête WFS GPP*/
req.gppWfsClient.getFeatures(featureTypeName, params)
/* uniformisation des attributs en sortie */
.then(function(featureCollection){
featureCollection.features.forEach(function(feature){
if ( ! feature.properties.code_insee ){
feature.properties.code_insee = feature.properties.code_dep+feature.properties.code_com;
}
});
return featureCollection;
})
.then(function(featureCollection) {
res.json(featureCollection);
})
.catch(function(err) {
res.status(500).json(err);
})
;
}
];
}


var corsOptionsGlobal = function(origin,callback) {
var corsOptions;
if (origin) {
corsOptions = {
origin: origin,
optionsSuccessStatus: 200,
methods: 'GET,POST',
credentials: true
}
} else {
corsOptions = {
origin : '*',
optionsSuccessStatus : 200,
methods: 'GET,POST',
credentials: true
}
}
callback(null, corsOptions);
}

/**
* Permet d'alerter en cas de paramètre ayant changer de nom
*
* TODO Principe à valider (faire un middleware de renommage des paramètres si l'approche est trop violente)
*/
var rpgValidators = [
check('annee').optional().isNumeric().isLength({min:4,max:4}).withMessage('Année sur 4 chiffres'),
check('code_cultu').optional().isString(),
check('geom').optional().custom(isGeometry),
check('_limit').optional().isNumeric(),
check('_start').optional().isNumeric()
];

/** Nous avons 2 requetes identiques mais il y a une difference dans les champs
* Possibilité de traiter différement par la suite.
*/
router.get('/apres2014', cors(corsOptionsGlobal),rpgValidators, createRpgProxy('apres2014'));
router.post('/apres2014', cors(corsOptionsGlobal),rpgValidators, createRpgProxy('apres2014'));

router.get('/avant2015', cors(corsOptionsGlobal),rpgValidators, createRpgProxy('avant2015'));
router.post('/avant2015', cors(corsOptionsGlobal),rpgValidators, createRpgProxy('avant2015'));



module.exports=router;
Loading

0 comments on commit 75138d2

Please sign in to comment.