Skip to content

Commit

Permalink
Modif module nature et ajout module all WFS
Browse files Browse the repository at this point in the history
  • Loading branch information
vinsag committed Jun 8, 2020
1 parent 8af9461 commit 705f8d7
Show file tree
Hide file tree
Showing 5 changed files with 264 additions and 8 deletions.
101 changes: 101 additions & 0 deletions controllers/all-wfs-ign/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
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');

/**
* Creation d'une chaîne de proxy sur le geoportail
* @param {String} valeurSearch du chemin le nom de la couche WFS
*/
function createRpgProxy() {
return [
gppWfsClient,
validateParams,
function(req,res){
var params = matchedData(req);
var featureTypeName= params.source;
console.log('value:'+req.query.apikey);
if (typeof req.query.apikey == 'undefined') {
return res.status(400).send({
code: 400,
message: 'La clé ign (apikey) doit être renseignée'
})
}
params = _.omit(params,'source');
params = _.omit(params,'apikey');
/* 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) {
console.log(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 moduleValidator = [
check('apikey').exists().withMessage('Le paramètre apikey pour le nom de la couche WFS géoportail est obligatoire'),
check('source').exists().withMessage('Le paramètre source pour le nom de la couche WFS géoportail est obligatoire'),
check('geom').optional().custom(isGeometry),
check('_limit').optional().isNumeric(),
check('_start').optional().isNumeric()
];



router.get('/search', cors(corsOptionsGlobal),moduleValidator, createRpgProxy());



module.exports=router;
8 changes: 7 additions & 1 deletion controllers/nature/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ function createNaturaProxy(featureTypeName){
validateParams,
function(req,res){
var params = matchedData(req);
params = _.omit(params,'source_ign');

/* Value default pour _limit an _start */
if ( typeof params._start == 'undefined' ) {params._start = 0;}
Expand Down Expand Up @@ -131,4 +130,11 @@ router.get('/pn', cors(corsOptionsGlobal),reserveValidators, createNaturaProxy('
router.post('/pn', cors(corsOptionsGlobal),reserveValidators, createNaturaProxy('PROTECTEDAREAS.PN:pn'));


/**
* Récupération des couches Parcs naturels régionaux
*
*/

router.get('/pnr', cors(corsOptionsGlobal),reserveValidators, createNaturaProxy('PROTECTEDAREAS.PN:pnr'));
router.post('/pnr', cors(corsOptionsGlobal),reserveValidators, createNaturaProxy('PROTECTEDAREAS.PN:pnr'));
module.exports=router;
94 changes: 94 additions & 0 deletions doc/all-wfs-ign.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
swagger: '2.0'

info:
title: Module pour rechercher dans tous les flux WFS Géoportail (Version Beta)
description: >
Ce module permet d'interroger n'importe quelle ressource WFS qui intersecte une géométrie( géométie dans le référentiel correspondant à la couche) et selon vos droits sur cette ressource.
Il faut mettre en paramètre une géométrie et le nom de la ressource WFS Géoportail.
Toutes les requêtes du module RPG peuvent se faire en POST ou en GET.
Sur cette page, vous pouvez uniquement tester les modules avec des requêtes en GET.
## Clé WFS géoportail (apikey)
Ce service se repose sur l'appel à des services WFS de l'API géoportail de l'IGN.
Si cette clé n'est pas définie sur le serveur APICARTO, il faut passer une clé IGN en paramètre sous le nom `apikey`.
Pour obtenir une clé geoportail, vous devez vous connecter au site : http://professionnels.ign.fr/ .
Vous ne pourrez interroger que les couches dont vous avez les droits sur votre clé IGN.
Attention il faut bien vérifier la représentation géométrique de chaque couche pour passer la géométrie dans le bon référentiel.
Exemple de géométrie : (format EPSG:4326)
* Point : `{"type": "Point","coordinates":[-1.691634,48.104237]}`
* MultiPolygon : `{"type":"MultiPolygon","coordinates":[[[[-0.288863182067871,48.963666607295977],[-0.299592018127441,48.959299208576141],[-0.296330451965332,48.955325952385039],[-0.282125473022461,48.950675995388366],[-0.279722213745117,48.967019382922331],[-0.288863182067871,48.963666607295977]]]]}`
version: '1.0'


consumes:
- application/json
produces:
- application/json

basePath: /api

paths:
/all-wfs-ign/search:
get:
description: |
Prend une geometrie de type GeoJSON en paramètre d'entrée et renvoie les informations intersectant cette géométrie
Prend une date qui sera une valeur comprise entre 2010 et 2013 inclus
Paramètres de sorties : Retourne un résultat de Type "FeatureCollection"
parameters:
- name: apikey
in: query
description: Clé WFS géoportail
type: string
required: true

- name: source
in: query
description: Source des données WFS Géoportail
type: string
required: true

- name: geom
in: query
required: true
schema:
$ref: "#/definitions/Geometry"

- name: _limit
in: query
description: Limite de résultats à afficher (chiffre entre 1 et 1000)
type: integer
required: false

- name: _start
in: query
description: Position pour le début de la recherche
type: integer
required: false

responses:
'200':
description: "Succès"

definitions:

# import definitions
FeatureCollection:
$ref: './schema/geojson.yml#definitions/FeatureCollection'
Feature:
$ref: './schema/geojson.yml#definitions/Feature'
Geometry:
$ref: './schema/geojson.yml#definitions/Geometry'
MultiPolygon:
$ref: './schema/geojson.yml#definitions/MultiPolygon'


66 changes: 59 additions & 7 deletions doc/nature.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,19 @@ info:
title: Module Nature
description: >
Le service d'interrogation du module nature permet d'obtenir les informations suivantes sur différentes couches réserves naturelles et natura 2000:
Le service d'interrogation du module nature permet d'obtenir les informations sur différentes couches réserves naturelles et natura 2000.
Toutes les réponses sont au format GeoJSON et de type FeatureCollection.
Toutes les requêtes du module cadastre peuvent se faire en POST ou en GET.
Sur cette page, vous pouvez uniquement tester les modules avec des requêtes en GET.
Attention à la différence des autres modules apicarto, les géométries
Attention à la différence des autres modules apicarto, toutes les couches n'ont pas des référentiels sur EPSG:4326.
Veuillez vérifier le référentiel par défaut en faisant un getCapabilities avec votre clé:
https://wxs.ign.fr/VOTRECLE/geoportail/wfs?SERVICE=WFS&VERSION=2.0.0&REQUEST=GetCapabilities
## Clé WFS géoportail (apikey)
Expand All @@ -28,8 +32,9 @@ info:
* PROTECTEDAREAS.RNC:rnc (Réserves Naturelles de Corse)
* PROTECTEDAREAS.ZNIEFF1:znieff1 (Zones écologiques de nature remarquable (ZNIEFF1))
* PROTECTEDAREAS.ZNIEFF2:znieff2 (Zones écologiques de nature remarquable (ZNIEFF2))
* PROTECTEDAREAS.PN:pn (Parcs nationnaux)
* PROTECTEDAREAS.PNR:pnr (Parcs nationaux régionaux)
version: 2.0.0
contact:
name: Apicarto Nature
Expand Down Expand Up @@ -290,8 +295,8 @@ paths:

/nature/pn:
get:
summary: Informations sur les parcelles non vectorisées.
description: Renvoie une featureCollection de type Point pour centrer le point sur une carte
summary: Recherche des zones dans les parcs nationaux
description: Retourne un résultat de Type "FeatureCollection"
tags:
- Parcs nationaux
parameters:
Expand Down Expand Up @@ -336,6 +341,53 @@ paths:
schema:
$ref: '#/definitions/FeatureCollectionNatureAutre'

/nature/pnr:
get:
summary: Recherche des zones dans les parcs nationaux régionaux
description: Retourne un résultat de Type "FeatureCollection"
tags:
- Parcs nationaux régionaux
parameters:

- name: apikey
in: query
description: Clé WFS géoportail
type: string
required: false

- name: id_mnhn
in: query
type: string
required: false

- name: nom
in: query
type: string
required: false

- name: geom
in: query
description: Géométrie au format GeoJson
schema:
$ref: '#/definitions/Geometry'

- name: _limit
in: query
description: Limite de résultats à afficher (chiffre entre 1 et 1000)
type: integer
required: false

- name: _start
in: query
description: Position pour le début de la recherche
type: integer
required: false

responses:
'200':
description: Success
schema:
$ref: '#/definitions/FeatureCollectionNatureAutre'

definitions:

Expand Down Expand Up @@ -379,7 +431,7 @@ definitions:
FeatureNatureAutre:
description: 'Nature autres'
allOf:
- $ref: '#/definitions/Feature'
- $ref: '#/definitions/Feature'
properties:
properties:
type: object
Expand All @@ -396,7 +448,7 @@ definitions:
FeatureCollectionNatureAutre:
description: Une `FeatureCollection` contenant uniquement des features de type `FeatureDivision`
allOf:
- $ref: '#/definitions/FeatureCollection'
- $ref: '#/definitions/FeatureCollection'
properties:
features:
type: array
Expand Down
3 changes: 3 additions & 0 deletions server.js
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,9 @@ app.use('/api/rpg',require('./controllers/rpg'));
/* Module Nature */
app.use('/api/nature',require('./controllers/nature'));

/* Module all module IGN */
app.use('/api/all-wfs-ign/',require('./controllers/all-wfs-ign'))

app.listen(port);

module.exports = app;

0 comments on commit 705f8d7

Please sign in to comment.