WikiProject Cadastre Français/Aspects techniques du cadastre en ligne

From OpenStreetMap Wiki
Jump to navigation Jump to search

ATTENTION: L'utilisation des données cadastrales dans le cadre du projet OpenStreetMap est légale mais soumise à certaines conditions. Consultez les détails sur la page WikiProject Cadastre Français/Conditions d'utilisation. Le serveur WMS n'est pas encore officiellement ouvert à tous mais OSM a reçu l'autorisation de le faire. Cependant, ces données techniques dépendent bien entendu des prestations du serveur et peuvent varier dans le temps (par exemple, les données SVG ne sont plus disponibles). L'ouverture officielle est prévue pour le milieu de l'année 2009 et pourrait être l'occasion de nouvelles modifications, comme une plus grande compatibilité au protocole WMS (requête services) et des changements dans les projections disponibles (Remplacement du Lambert 4 zones pour le Lambert CC 9 zones depuis le 12 octobre 2009 !).


Accès via un navigateur

Site officiel du cadastre : http://www.cadastre.gouv.fr/scpc/rechercherPlan.do

Le wms

Le WMS est disponible à cette adresse : http://www.cadastre.gouv.fr/scpc/wms Une url complète de type de celle utilisée par l'interface ressemble à cela :

http://www.cadastre.gouv.fr/scpc/wms?version=1.1&request=GetMap&layers=CDIF:LS3,CDIF:LS2,CDIF:LS1,CDIF:PARCELLE,CDIF:NUMERO,CDIF:PT3,CDIF:PT2,CDIF:PT1,CDIF:LIEUDIT,CDIF:SUBSECTION,CDIF:SECTION,CDIF:COMMUNE&format=image/png&bbox=386445.7200000000,120657.9900000000,386532.3300000000,120723.0000000000&width=500&height=356&styles=LS3_90,LS2_90,LS1_90,PARCELLE_90,NUMERO_90,PT3_90,PT2_90,PT1_90,LIEUDIT_90,SUBSECTION_90,SECTION_90,COMMUNE_90

Accéder au wms

Le wms procède à une vérification basée sur des cookies. La procédure à suivre avant de pouvoir y faire des requêtes, par exemple dans un script, est la suivante :

Récupérer le cookie

Bien entendu, il est nécessaire que le code faisant cette requête gère les cookies.

GET http://www.cadastre.gouv.fr/scpc/rechercherPlan.do

La requête de recherche

Il est nécessaire de faire une requête donnant des résultats.
Les données POST à renseigner lorsque le nom de la ville ou lieu-dit est directement entré:

  • "numeroVoie"
  • "indiceRepetition"
  • "nomVoie"
  • "lieuDit"
  • "ville"
  • "codePostal"
  • "codeDepartement"
  • "nbResultatParPage"

Les données POST à renseigner lorsque la ville est choisie parmi une liste déroulante:

  • "numeroVoie"
  • "indiceRepetition"
  • "nomVoie"
  • "lieuDit"
  • "codeCommune" 2 chiffres et lettres pour le département + 3 derniers chiffres du code insee
  • "codeDepartement"
  • "nbResultatParPage"
POST http://www.cadastre.gouv.fr/scpc/rechercherPlan.do

Note : le nom de la commune doit être transmis au format utf-8 ("é" = "%C3%A9").

Exemple de requête sur un département:

 numeroVoie=&indiceRepetition=&nomVoie=&lieuDit=&ville=&codePostal=&codeDepartement=001&nbResultatParPage=10&x=164&y=6

Ouvrir le résultat

Il est en suite nécessaire d'ouvrir un des résultats retournés avant de pouvoir librement envoyer des requêtes wms. Le site propose soit l'affichage d'une feuille, soit l'affichage de la commune. Voici les URL correspondantes :

Format image:

GET http://cadastre.gouv.fr/afficherCarteFeuille.do?f=CODE
GET /scpc/afficherCarteTa.do?f=CODE&dontSaveLastForward&keepVolatileSession= HTTP/1.1\r\n

où CODE se compose du code INSEE codé sur 5 caractères plus une référence à la feuille cadastrale sur 7 caractères. Exemple : "QA482000_T02".

Vecteur:

GET /scpc/afficherCarteCommune.do?c=CODE&dontSaveLastForward&keepVolatileSession= HTTP/1.1\r\n

L'URL réelle (avec un code en lieu et place de "CODE") est un hyperlien dans le contenu HTML des résultats de recherche.
Chaque commune est définie par un code de 5 caractères ("CODE"):

  • les 2 premiers caractères codent le numéro de département et en partie la ville (algorythme inconnu). Exemples:
    • 01 (Ain) = 42
    • 06 (Alpes Maritimes) = 5K
    • 59 (Nord) = NS
    • 67 (Bas-Rhin) = QH
    • 68 (Haut-Rhin) = QK
    • 88 (Vosges) = X2
  • les 3 caractères suivants sont les 3 derniers caractères du code INSEE de la commune

Note: pour trouver le code d'une commune, on peut utiliser l'utilitaire original en ligne sur cadastre.gouv.fr puis ouvrir la petit fenêtre sur la commune concernée. Certains navigateurs affichent l'URL, sinon regardez les codes sources de la page et cherchez la fonction "window.contexte= new WMSMapContext" qui contient le code de la commune après l'argument "CDIF".

Requêtes wms en vectoriel

On peut maintenant effectuer des requêtes wms tant que la session n'a pas expirée.

Après expériences, il semble qu'il suffit de conserver une faible activité sur le serveur pour pouvoir garder la session ouverte (avec une requête toutes les 10 à 20 minutes, la session reste active plus de 2 heures).

Les différents calques

Ces calques sont ceux affichés par défaut par cadastre.gouv.fr

  • CDIF:LS3 cours et pièces d'eau ;
  • CDIF:LS2 tracé des bâtiments ;
  • CDIF:LS1 ce qui n'est pas représenté sur les autres (îlots, motif de croix sur une église) ;
  • CDIF:PARCELLE les parcelles des propriétés et leur numéro ;
  • CDIF:NUMERO numéros de rue ;
  • CDIF:PT3 ?? ;
  • CDIF:PT2 ?? ;
  • CDIF:PT1 ?? ;
  • CDIF:LIEUDIT Noms des lieux-dits (pas de tracé) ;
  • CDIF:SUBSECTION proche de CDIF:SECTION mais parfois subdivisé (lieu-dits ? quartiers ? à préciser) ;
  • CDIF:SECTION partition d'une ville en zones (lieu-dits ? quartiers ? à préciser) ;
  • CDIF:COMMUNE contour de la commune (un unique chemin fermé).
  • format=image/png
  • bbox=977000.0,319300.0,977100.0,319400.0
  • width=800
  • height=600
  • styles=LS3_90,LS2_90,LS1_90,PARCELLE_90,NUMERO_90,PT3_90,PT2_90,PT1_90,LIEUDIT_90,SUBSECTION_90,SECTION_90,COMMUNE_90

Les formats de fichiers supportés

  • image/png
  • image/jpeg
  • image/gif
  • image/svg (géotagué), ne contient rien d'autre que des contours (pas de n˚ de rue, nom de rue...) (plus depuis février 2009)
  • application/pdf

Requêtes wms pour le format image

La requête est légèrement différente pour les images simplement scannées (non vectorisée).

Les différents calques

Ces calques sont ceux affichés par défaut par cadastre.gouv.fr

  • CDIF:PMC@QA482000_T01 calque image @CODE où code est le code commune suivi de la référence de la feuille (ici un tableau d'assemblage T01)
  • format=image/png
  • bbox=127.6756,-213.5547,12486.6756,8596.06
  • width=484
  • height=345
  • exception=application/vnd.ogc.se_inimage
  • style=

Exemples

Exemple de requête en vectoriel:

GET /scpc/wms?version=1.1&request=GetMap&layers=CDIF:LS3,CDIF:LS2,CDIF:LS1,CDIF:PARCELLE,CDIF:NUMERO,CDIF:PT3,CDIF:PT2,CDIF:PT1,CDIF:LIEUDIT,CDIF:SUBSECTION,CDIF:SECTION,CDIF:COMMUNE&format=image/png&bbox=977000.0,319300.0,977100.0,319400.0&width=800&height=600&styles=LS3_90,LS2_90,LS1_90,PARCELLE_90,NUMERO_90,PT3_90,PT2_90,PT1_90,LIEUDIT_90,SUBSECTION_90,SECTION_90,COMMUNE_90

Exemple de requête pour le format image:

GET /scpc/wms?version=1.1&request=GetMap&layers=CDIF:PMC@QA482000_T01&format=image/png&bbox=127.67561983471074,-213.55475206611482,12486.67561983471,8596.063016528924&width=484&height=345&exception=application/vnd.ogc.se_inimage&style=

Géocodage inversé des parcelles

Si le cadastre est vectorisé, il est possible à partir de coordonnées géographiques d'obtenir l'id de la parcelle correspondante, et les informations sur cette parcelle comme son adresse.

Récupération de la parcelle correspondant à des coordonnées

Une fois le plan cadastrale vectoriel ouvert comme précédemment avec une requête pour chercher le plan cadastral voulu et une pour l'ouvrir, le tout en conservant le cookie de session, il est possible de faire une requête pour connaître la parcelle correspondant à des coordonnées comme ceci:

GET /scpc/wfs
content-type: application/xml; charset=UTF-8
referer: http://www.cadastre.gouv.fr/scpc/afficherCarteCommune.do?c=CODE&dontSaveLastForward&keepVolatileSession=

avec les données attachées suivantes:

  <?xml version="1.0" encoding="UTF-8"?>
  <wfs:GetFeature service="WFS" version="1.0.0" outputFormat="XML-alcer" xmlns:topp="http://www.openplans.org/topp" xmlns:wfs="http://www.opengis.net/wfs" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/WFS-basic.xsd" maxFeatures="2000">
    <wfs:Query typeName="CDIF:PARCELLE">
      <ogc:Filter>
        <ogc:And>
          <ogc:PropertyIsEqualTo>
            <ogc:PropertyName>COMMUNE_IDENT</ogc:PropertyName>
            <ogc:Literal>CODE_COMMUNE</ogc:Literal>
          </ogc:PropertyIsEqualTo>
          <ogc:Intersects>
            <ogc:PropertyName>GEOM</ogc:PropertyName>
            <gml:MultiPoint srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
              <gml:PointMember>
                <gml:Point>
                  <gml:coordinates>LONGITUDE,LATITUDE</gml:coordinates>
                </gml:Point>
              </gml:PointMember>
            </gml:MultiPoint>
          </ogc:Intersects>
        </ogc:And>
      </ogc:Filter>
    </wfs:Query>
  </wfs:GetFeature>

Les valeurs à remplacer dans cette requête sont CODE_COMUNE, LONGITUDE et LATITUDE. ATTENTION: pour être acceptée par le serveur la requête ne doit contenir aucun espace superflu ni retour à la ligne.

On peut voir aussi que la requête contient une référence vers la projection EPSG 4326 (WGS84):

<gml:MultiPoint srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">

A la place de la projection EPSG 4326, il est possible d'utiliser dans la requête une projection native du cadastre, par exemple de EPSG 3942 à EPSG 3950 qui correspondent au Lambert 9 zones RGF93/CC42 à RGF93/CC50. A la place de LONGITUDE et LATITUDE il faudra alors spécifier les valeurs X et Y exprimées dans le système de coordonnées choisi.

Il est aussi possible de faire une requête sur toute une zone avec le format suivant:

  <?xml version="1.0" encoding="UTF-8"?>
  <wfs:GetFeature service="WFS" version="1.0.0"
      outputFormat="XML-alcer" xmlns:topp="http://www.openplans.org/topp"
      xmlns:wfs="http://www.opengis.net/wfs"
      xmlns:ogc="http://www.opengis.net/ogc"
      xmlns:gml="http://www.opengis.net/gml"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/WFS-basic.xsd"
      maxFeatures="2000">
    <wfs:Query typeName="CDIF:PARCELLE">
      <ogc:Filter>
        <ogc:And>
          <ogc:PropertyIsEqualTo>
            <ogc:PropertyName>COMMUNE_IDENT</ogc:PropertyName>
            <ogc:Literal>CODE_COMUNE</ogc:Literal>
          </ogc:PropertyIsEqualTo>
          <ogc:Intersects>
            <ogc:PropertyName>GEOM</ogc:PropertyName>
            <gml:Box srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
              <gml:coordinates>XMIN,YMIN,XMAX,YMAX</gml:coordinates>
            </gml:Box>
          </ogc:Intersects>
        </ogc:And>
      </ogc:Filter>
    </wfs:Query>
  </wfs:GetFeature>'

Les valeurs à remplacer dans cette requête sont CODE_COMUNE, XMIN, YMIN, XMAX, et YMAX.

Le nombre de résultats est limité à 2000. La réponse vas être un fichier xml de ce format:

  <?xml version="1.0" encoding="UTF-8" ?>
  <features>
    <PARCELLE fid="PARCELLE.CL271000AE0107">
      <NATURE>V</NATURE>
      <LIBELLE>107</LIBELLE>
      <LIBELLEX>1845273.24</LIBELLEX>
      <LIBELLEY>4203133.56</LIBELLEY>
      <SURFACE>000000055</SURFACE>
      <SURFACE_GEOM>53.74169921875</SURFACE_GEOM>
      <INDICE>01</INDICE>
      <X_MIN>1845272.46</X_MIN>
      <Y_MIN>4203129.39</Y_MIN>
      <X_MAX>1845280.47</X_MAX>
      <Y_MAX>4203139.8</Y_MAX>
      <GEOM></GEOM>
      <GEOMVALIDE>0</GEOMVALIDE>
      <UNITEREF_CODEREF>CL271000AE</UNITEREF_CODEREF>
      <COMMUNE_IDENT>CL271</COMMUNE_IDENT>
      <SUBSECTION_IDENT>CL271000AE01</SUBSECTION_IDENT>
      <APIC_IDENT>466977</APIC_IDENT>
    </PARCELLE>
  </features>

L'important c'est l'id de la parcelle, dans cet exemple: CL271000AE0107

Avec cet id, nous allons pouvoir obtenir les informations sur la parcelle.

Récupération de(s) adresse(s) d'une parcelle

À partir de l'id d'une ou plusieurs parcelles (maximum 100), comme l'id CL271000AE0107, il est possible d'obtenir des informations associées comme l(es) adresse(s). Il faut pour cela faire la requête suivante:

GET /scpc/afficherInfosParcelles.do
content-type: application/xml; charset=UTF-8
referer: http://www.cadastre.gouv.fr/scpc/afficherCarteCommune.do?c=CODE&dontSaveLastForward&keepVolatileSession=

Il est important que le referer soit positionné correctement avec le bon CODE. La requête doit avoir les données attachées suivantes:

<PARCELLES><PARCELLE>ID_PARCELLE</PARCELLE></PARCELLES>

en rempalcant par exemple ID_PARCELLE par CL271000AE0107

La réponse vas être un bout de code HTML contenant entre autre l'/les adresse(s) de la parcelle, représentée(s) de telle manière:

	<strong>
	3  RUE DU ROCHER
	<br>
	26600 LA ROCHE DE GLUN
	</strong>
	Adresse de la parcelle
	<br>

Si la requête contenait plus d'un id, la réponse ne sera pas visible dans le code html, il faudra alors télécharger juste après un fichier pdf qui contiendra les infos de toutes les parcelles demandées (maximum 100) avec la requête suivante:

GET /scpc/editerInfosParcelles.do
referer: http://www.cadastre.gouv.fr/scpc/afficherCarteCommune.do?c=CODE&dontSaveLastForward&keepVolatileSession=

Il est important que le referer soit positionné correctement avec le bon CODE.


Les projections

Docs  :

Logiciels/scripts

cadastre_client.py

Ce script permet de récupérer une image png de taille et de coordonnées arbitraire. Il outrepasse les limites de taille du wms de cadastre.gouv.fr en faisant du « puzzle » de tiles ; reste assez basique, lire le début du source (commentaires) avant de l'utiliser.


cadastre_client.py (dans l'archive cadastre_tools).

cadget

Ce script Perl permet de récupérer une planche en format image en un unique fichier PNG. Il est ensuite possible d'importer ce fichier PNG dans JOSM avec le plugin PicLayer.

Plus d'information sur WikiProject_Cadastre_Français/cadget.

Plugin WMS Cadastre pour JOSM

Un plugin pour JOSM a été développé et permet d'utiliser facilement les plans vectorisés du cadastre en ligne.

Voir la page dédiée au greffon JOSM ici : FR:JOSM/Greffons/Cadastre-fr. Voir la progression de la demande auprès des autorités ici : WikiProject Cadastre Français/Conditions d'utilisation#Contact_avec_la_DGI

Les fichiers de points

Il est également possible d'accéder aux données par l'intermédiaire d'un fichier de points. Les fichiers ainsi exportés peuvent contenir jusqu'à 100 points.

Exemple

Voici un exemple de fichier pour une commune au format vecteur. Les coordonnées sont au format LAMBERT zone II.

/* LYON VILLE - Commune : FONTAINES-SAINT-MARTIN (69) */
1	795910,20	96530,44
2	795781,23	96569,71
3	795794,32	96472,47
4	795996,19	96421,98

Conversion en gpx

Il est possible de convertir le fichier en gpx. Voici un script bash permettant de le faire sous GNU/Linux (ce script est destiné à mon usage personnel et n'est pas forcément très propre.

Ce script utilise au moment de sa rédaction le logiciel geoconv qui est à éviter pour son manque de précision (voir plus loin).

sed s/,/./ $1 > $1.conv
sed s/,/./ $1.conv > $1.conv2
echo '<?xml version="1.0" encoding="iso-8859-1" ?>
<gpx
xmlns="http://www.topografix.com/GPX/1/0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.topografix.com/GPX/1/0http://www.topografix.com/GPX/1/0/gpx.xsd" version="1.0">
<trk><trkseg>' > $1.gpx
 
// CE SCRIPT UTILISE geoconv ! A EVITER ! VOIR PLUS-BAS
//java -jar geoconv.jar -o WGS84 -deg -sep '\t' -in 'Lambert 2 ${2} ${3} 0' -out '<trkpt lat="${2.3}" lon="${2.2}" ></trkpt>\n' $1.conv2 >> $1.gpx
 
echo '</trkseg></trk></gpx>' >> $1.gpx
  • Ce script utilise le logiciel geoconv qui est à proscrire absolument car il n'utilise pas la grille de correction NTF, ce qui introduit une erreur variable (5 mètres en moyenne). Voyez l'outil d'import automatique des limites administratives de F. Rodrigo qui a remplacé geoconv par un autre programme utilisant cette grille.
  • Il faut ajuster 'Lambert 2 ${2} ${3} 0' (avant dernière ligne) en fonction du lieu. Lambert 1 pour le nord, 2 pour le centre, 3 pour le sud, et 4 pour la corse.
  • Ce script ne fonctionne que pour les communes au format vecteur (les 'deux' coordonnées sont positives). Pour les communes au format image, la conversion est impossible.
  • Le fichier gpx obtenu n'est pas strictement valide (pas de timestamps, présence d'un message d'erreur en plein milieu). Cependant, merkaartor et josm sont capables de l'importer (je n'ai pas testé pour potlatch).

Traitement du svg

TODO: mettre en ligne svg2osm.py un (début de) script permettant de convertir du svg provenant du cadastre en format xml osm.

Acronymes, abréviations

  • CDIF : Centre des Impôts Fonciers, organisme en charge du cadastre
  • PMC : Plan Minute de Conservation