Skip to content

Commit

Permalink
Merge pull request #46 from IGNF/v2.3.8
Browse files Browse the repository at this point in the history
V2.3.8
  • Loading branch information
vinsag authored Jun 23, 2021
2 parents 4a7c995 + a96cf8b commit a1fdf8a
Show file tree
Hide file tree
Showing 8 changed files with 2,072 additions and 954 deletions.
43 changes: 37 additions & 6 deletions controllers/nature/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,11 @@ const { matchedData } = require('express-validator/filter');
const validateParams = require('../../middlewares/validateParams');
const {isGeometry,isCodeInsee} = require('../../checker');

const gppWfsClient = require('../../middlewares/gppWfsClient');
const gppWfsClient = require('../../middlewares/naturegppWfsClient');
const _ = require('lodash');
const meta = require("@turf/meta");
const proj4 = require('proj4');




Expand All @@ -22,13 +25,25 @@ function createNaturaProxy(featureTypeName){
validateParams,
function(req,res){
var params = matchedData(req);

const input = JSON.parse(params.geom);
proj4.defs("EPSG:4326","+proj=longlat +datum=WGS84 +no_defs");
// http://epsg.io/3857.js
proj4.defs("EPSG:3857","+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs");
const transform = proj4("EPSG:4326","EPSG:3857");
meta.coordEach(input,function(c){
let newC = transform.forward(c);
c[0] = newC[0];
c[1] = newC[1];
});
params.geom=input;

/* Value default pour _limit an _start */
if ( typeof params._start == 'undefined' ) {params._start = 0;}
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)
req.gppWfsClient.getFeatures(featureTypeName, params)
.then(function(featureCollection) {
res.json(featureCollection);
})
Expand Down Expand Up @@ -105,18 +120,29 @@ var reserveValidators = natureValidators.concat([
check('nom').optional().isString()
]);

/**
* Récupération des couches reserves naturelles Corse
*
*/

router.get('/rnc', cors(corsOptionsGlobal),reserveValidators, createNaturaProxy('PROTECTEDAREAS.RNC:rnc'));
router.post('/rnc', cors(corsOptionsGlobal),reserveValidators, createNaturaProxy('PROTECTEDAREAS.RNC:rnc'));

/**
* Récupération des couches reserves naturelles hors Corse
*
*/

router.get('/rnn', cors(corsOptionsGlobal),reserveValidators, createNaturaProxy('PROTECTEDAREAS.RNN:rnn'));
router.post('/rnn', cors(corsOptionsGlobal),reserveValidators, createNaturaProxy('PROTECTEDAREAS.RNN:rnn'));

/**
* Récupération des couches Zones écologiques de nature remarquable
*
*/
router.get('/znieff1',cors(corsOptionsGlobal),reserveValidators, createNaturaProxy('PROTECTEDAREAS.ZNIEFF1:znieff1'));
router.post('/znieff1', cors(corsOptionsGlobal),reserveValidators, createNaturaProxy('PROTECTEDAREAS.ZNIEFF1:znieff1'));



router.get('/znieff2', cors(corsOptionsGlobal),reserveValidators, createNaturaProxy('PROTECTEDAREAS.ZNIEFF2:znieff2'));
router.post('/znieff2', cors(corsOptionsGlobal),reserveValidators, createNaturaProxy('PROTECTEDAREAS.ZNIEFF2:znieff2'));

Expand All @@ -128,7 +154,6 @@ router.post('/znieff2', cors(corsOptionsGlobal),reserveValidators, createNaturaP
router.get('/pn', cors(corsOptionsGlobal),reserveValidators, createNaturaProxy('PROTECTEDAREAS.PN:pn'));
router.post('/pn', cors(corsOptionsGlobal),reserveValidators, createNaturaProxy('PROTECTEDAREAS.PN:pn'));


/**
* Récupération des couches Parcs naturels régionaux
*
Expand All @@ -137,6 +162,12 @@ router.post('/pn', cors(corsOptionsGlobal),reserveValidators, createNaturaProxy(
router.get('/pnr', cors(corsOptionsGlobal),reserveValidators, createNaturaProxy('PROTECTEDAREAS.PN:pnr'));
router.post('/pnr', cors(corsOptionsGlobal),reserveValidators, createNaturaProxy('PROTECTEDAREAS.PN:pnr'));

/**
* Récupération des couches réserves nationales de chasse et de faune sauvage
*
*/

router.get('/rncf', cors(corsOptionsGlobal),reserveValidators, createNaturaProxy('PROTECTEDAREAS.RNCF:rncfs_fxx'));
router.post('/rncf', cors(corsOptionsGlobal),reserveValidators, createNaturaProxy('PROTECTEDAREAS.RNCF:rncfs_fxx'));

module.exports=router;
210 changes: 203 additions & 7 deletions doc/nature.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,30 +11,53 @@ info:
Sur cette page, vous pouvez uniquement tester les modules avec des requêtes en GET.
Attention à la différence des autres modules API Carto, 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é:
Consultez la [documentation utilisateur](https://apicarto.ign.fr/api/doc/pdf/docUser_moduleNature.pdf) pour plus d’informations sur les paramètres d’appel disponibles et le format des résultats.
https://wxs.ign.fr/VOTRECLE/geoportail/wfs?SERVICE=WFS&VERSION=2.0.0&REQUEST=GetCapabilities
## 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 API Carto, il faut passer une clé IGN en paramètre sous le nom `apikey`.
Ce service se repose sur l'appel à des services WFS de l'API géoportail de l'IGN.
Cette clé doit être renseignée dans le paramètre *apikey*.
Pour obtenir une clé geoportail, vous devez vous connecter au site : https://geoservices.ign.fr.
Vous ne pourrez interroger que les couches dont vous avez paramétré l'accès sur votre clé de géoservices IGN.
La sécurisation de la clé se fait par referer.
Si vous souhaitez utiliser les différentes ressources de ce modules vous devez commander les flux "Ressources WFS Géoportail" ci-dessous:
* PROTECTEDAREAS.SIC:sic (Sites Natura 2000 au titre de la directive Habitat)
* PROTECTEDAREAS.ZPS:zps (Sites NATURA 2000 au titre de la Directive Oiseaux)
* PROTECTEDAREAS.RNN:rnn (réserves naturelles hors Corse)
* 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.PN:pn (Parcs nationaux)
* PROTECTEDAREAS.PNR:pnr (Parcs nationaux régionaux)
* PROTECTEDAREAS.RNCF:rncfs_fxx (réserves nationales de chasse et de faune sauvage)
## Géométrie
Bien que la géométrie des flux utilisés soit exprimée dans le référentiel WebMercator EPSG:3857, la géométrie doit être exprimée en valeur décimale dans le référentiel **WGS84 (EPSG:4326)**.
La réponse en retour de l'API est elle aussi exprimée en WGS84.
**Exemple de géométrie** : (référentiel EPSG:4326)
* Point:
`{"type": "Point","coordinates":[-1.691634,48.104237]}`
* MultiPolygon:
`{"type":"MultiPolygon","coordinates":[[[[4.786510231,44.799284413],[4.786771607,44.798883751],[4.786676692,44.798561391],[4.772889036,44.772781791],[4.773604638,44.773095271],[4.774237621,44.773471358],[4.775128276,44.773922006],[4.777617941,44.774676002],[4.778277786,44.774720598],[4.778921904,44.774676543],[4.786510231,44.799284413]]]]}`
* Polygone troué:
`{"type":"Polygon","coordinates":[[[1.2,48.85],[1.3,48.85],[1.3,48.9],[1.2,48.9],[1.2,48.85]],[[1.23,48.86],[1.23,48.88],[1.26,48.88],[1.26,48.86],[1.23,48.86]]]}`
contact:
name: API Carto Nature
Expand Down Expand Up @@ -179,6 +202,55 @@ paths:
schema:
$ref: '#/definitions/FeatureCollectionNatureAutre'


/nature/rnn:
get:
summary: Recherche d'informations sur les réserves naturelles hors Corse
description: |
Retourne un résultat de Type "FeatureCollection"
tags:
- Réserves naturelles hors corse
parameters:

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

- name: id_mnhn
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'



/nature/znieff1:
get:
summary: Recherche d'informations sur des Zones écologiques de nature remarquable
Expand Down Expand Up @@ -355,6 +427,50 @@ paths:
$ref: '#/definitions/FeatureCollectionNatureAutre'


/nature/rncf:
get:
summary: Recherche des réserves nationales de chasse et de faune sauvage
description: Retourne un résultat de Type "FeatureCollection"
tags:
- Réserves nationales de chasse et de faune sauvage
parameters:

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

- name: id_mnhn
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/FeatureCollectionNatureChassePeche'


definitions:

#---------------------------------------------------
Expand Down Expand Up @@ -421,6 +537,86 @@ definitions:
items:
$ref: '#/definitions/FeatureNatureAutre'


#---------------------------------------------------
# /Chasse et peche
#---------------------------------------------------

FeatureNatureChassePeche:
description: 'Nature autres'
allOf:
- $ref: '#/definitions/Feature'
properties:
properties:
type: object
properties:
id_local:
type: string
id_mnhn:
type: string
nom_site:
type: string
date_crea:
type: string
modif_adm:
type: string
modif_geo:
type: string
url_fiche:
type: string
surf_off:
type: string
acte_deb:
type: string
gest_site:
type: string
operateur:
type: string
precision:
type: string
src_geom:
type: string
src_annee:
type: string
marin:
type: string
p1_nature:
type: string
p2_culture:
type: string
p3_paysage:
type: string
p4_geologi:
type: string
p5_speleo:
type: string
p6_archeo:
type: string
p7_paleob:
type: string
p8_anthrop:
type: string
p9_science:
type: string
p10_public:
type: string
p11_dd:
type: string
p12_autre:
type: string
geometry:
$ref: '#/definitions/MultiPolygon'

FeatureCollectionNatureChassePeche:
description: Une `FeatureCollection` contenant uniquement des features de type `FeatureDivision`
allOf:
- $ref: '#/definitions/FeatureCollection'
properties:
features:
type: array
items:
$ref: '#/definitions/FeatureNatureChassePeche'


# import definitions
FeatureCollection:
Expand Down
Binary file added doc/pdf/docUser_moduleNature.pdf
Binary file not shown.
9 changes: 9 additions & 0 deletions doc/views/index.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,15 @@
<a class="btn btn-primary" href="/api/doc/wfs-geoportail">API</a>
</td>
</tr>
<tr>
<td>Nature (Version bêta)</td>
<td>
API d'accès aux flux WFS Géoportail s'appuyant sur des données du MNHN
</td>
<td class="text-right">
<a class="btn btn-primary" href="/api/doc/nature">API</a>
</td>
</tr>


</tbody>
Expand Down
3 changes: 3 additions & 0 deletions doc/views/partial/menu.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@
<li>
<a href="/api/doc/wfs-geoportail">WFS-Geoportail (Version Bêta)</a>
</li>
<li>
<a href="/api/doc/nature">Nature (Version Bêta)</a>
</li>
</ul>
</li>
<li>
Expand Down
Loading

0 comments on commit a1fdf8a

Please sign in to comment.