Réponse courte

Un fichier .prj est le petit fichier compagnon d'un jeu de données shapefile qui enregistre le système de coordonnées de référence (SCR) de la couche sous forme de Well-Known Text (WKT). Il ne stocke pas de géométrie ; c'est le fichier .shp qui contient les coordonnées. Le .prj est ce qui indique au logiciel ce que signifient ces coordonnées : le datum, l'ellipsoïde, les unités et la projection, afin que les entités puissent être placées sur la Terre et transformées correctement. Perdez-le, et il vous reste la géométrie mais aucune idée de l'endroit du globe auquel elle appartient.

Un shapefile est un ensemble de fichiers

Un « shapefile » n'est pas un seul fichier. C'est une petite famille qui doit voyager ensemble, et chaque membre a un rôle :

  • .shp — la géométrie (points, lignes, polygones) sous forme de paires de coordonnées brutes.
  • .shx — un index de position dans le .shp.
  • .dbf — la table attributaire (format dBASE).
  • .prj — la définition du SCR, en WKT.
  • Facultatif : .cpg (encodage du texte des attributs), .qix/.sbn (index spatiaux), .shp.xml (métadonnées).

Les trois premiers sont obligatoires et contiennent les données elles-mêmes. Le .prj est techniquement facultatif dans le format, ce qui explique précisément pourquoi il disparaît si souvent : quelqu'un compresse .shp/.shx/.dbf et oublie le reste. Mais sans lui les coordonnées sont ambiguës : les nombres 450000, 5400000 pourraient être des mètres UTM dans des dizaines de zones, et 2.35, 48.85 pourraient être des degrés sur l'un de plusieurs datums.

Que contient un fichier .prj

Ouvrez un .prj dans un éditeur de texte et vous voyez une seule ligne de WKT (Well-Known Text), une description lisible par l'humain et analysable par la machine du SCR. Pour des coordonnées géographiques WGS84 (EPSG:4326), cela ressemble à :

GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",
SPHEROID["WGS_1984",6378137.0,298.257223563]],
PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]

Pour un SCR projeté tel que l'UTM 31N (EPSG:32631), c'est plus long : le SCR géographique sous-jacent est imbriqué dans un bloc PROJCS qui ajoute la projection Transverse Mercator, ses paramètres (méridien central, false easting 500000, facteur d'échelle) et UNIT["Metre",1.0].

Deux choses comptent ici. Premièrement, le WKT décrit le SCR par paramètres, et non par numéro EPSG, de sorte qu'un .prj peut porter ou non le code d'autorité EPSG ; les outils le rattachent à un code en comparant les paramètres, ce qui échoue parfois pour des définitions quasi identiques (le classique WKT Esri « GCS_WGS_1984 » contre le WKT EPSG). Deuxièmement, il existe des dialectes de WKT (l'ancien WKT ESRI et le plus récent OGC WKT2). La plupart des logiciels lisent les deux, mais de subtiles différences dans les noms de datum peuvent amener un outil à signaler le SCR comme « inconnu » même lorsque la géométrie est correcte.

Ce qui casse quand le .prj est manquant

La géométrie survit, mais les conséquences se propagent en cascade :

  • SCR inconnu. QGIS marque la couche d'un avertissement de SCR inconnu et peut appliquer le SCR par défaut du projet pour l'affichage, qui est généralement erroné.
  • Mauvais placement. Si le logiciel devine ou applique une valeur par défaut, la couche peut apparaître dans l'océan, à null island (0,0), ou tout simplement ne pas se superposer à vos autres données.
  • Pas de reprojection. Vous ne pouvez pas transformer une couche dont le SCR source est inconnu, car la transformation a besoin d'un point de départ défini. Chaque étape en aval est bloquée ou fausse.
  • Mesures faussées. Les résultats de distance, de surface et de tampon dépendent des unités que le .prj manquant aurait déclarées.

Exemple concret : diagnostiquer, puis réparer

Un collègue vous envoie boreholes.shp (avec .shx et .dbf) et aucun .prj. Ne devinez pas. Diagnostiquez :

# Que voit GDAL ? Notez l'étendue des coordonnées et tout SRS.
ogrinfo -al -so boreholes.shp

Lisez l'étendue (extent). Supposons qu'il indique Extent: (399000, 5398000) - (412000, 5411000). Ces valeurs à six chiffres dans les centaines de milliers et les millions sont des mètres, ce qui signifie un SCR projeté (de type UTM), et non des degrés. Comparez avec l'endroit où les forages devraient se trouver : si le projet est en France autour de 2,5°E, c'est la zone UTM 31N, donc le vrai SCR est presque certainement EPSG:32631.

Confirmez maintenant avant de valider. La confirmation la plus solide consiste à définir temporairement le SCR candidat et à superposer aux données de référence fiables (un fond de carte national, des points de calage connus). Si les entités tombent au bon endroit, le candidat est correct.

Une fois confirmé, écrivez le .prj en définissant le SCR, une opération qui ne modifie aucune coordonnée :

# Écrire un .prj correct en définissant le SCR source (aucune coordonnée ne bouge)
ogr2ogr -a_srs EPSG:32631 boreholes_fixed.shp boreholes.shp

Dans QGIS, l'équivalent est Propriétés de la couche → Source → définir le SCR, ou clic droit → Exporter → Enregistrer les entités sous, avec le bon SCR choisi comme SCR source (et non comme cible de reprojection). Pour inspecter ou générer directement le WKT :

gdalsrsinfo -o wkt EPSG:32631 > boreholes.prj

Si vous avez réellement besoin des données dans un autre SCR par la suite (disons WGS84 pour une carte web), il s'agit d'une étape de reprojection distincte avec une source connue :

ogr2ogr -t_srs EPSG:4326 boreholes_wgs84.shp boreholes_fixed.shp

Comment lire les plages de coordonnées comme une empreinte

Lorsque le .prj a disparu, les valeurs de coordonnées elles-mêmes sont votre meilleure preuve, car différentes familles de SCR produisent des signatures numériquement distinctes. Apprendre à les lire transforme les conjectures en diagnostic :

  • Degrés de longitude/latitude (par ex. EPSG:4326) : petits nombres, longitude dans [−180, 180], latitude dans [−90, 90], généralement avec plusieurs décimales (2.3522, 48.8566). Si vous voyez des valeurs bornées par ±180/±90, il s'agit presque certainement de coordonnées géographiques.
  • Mètres UTM (EPSG:326##/327##) : des eastings d'environ 100 000 à 900 000 (centrés près de 500 000 à cause du false easting), des northings de 0 jusqu'à ~9 300 000 dans l'hémisphère sud. Des entiers à six et sept chiffres sont l'indice révélateur.
  • Grilles nationales : des décalages distinctifs intégrés. Les eastings/northings du British National Grid vont de 0 à 700 000 / 0 à 1 300 000 ; le Lambert-93 (France) se situe autour de 600 000–1 200 000 en easting et 6 000 000–7 200 000 en northing. La plage de magnitude spécifique pointe vers la grille.
  • State Plane (États-Unis, en pieds) : des nombres très grands, souvent en millions de pieds, à cause des grandes origines fictives.

Combinez la signature de magnitude avec l'endroit où vous savez que les données devraient se trouver. Si l'étendue indique easting ~600 000, northing ~6 800 000 et que le site est en France, le Lambert-93 (EPSG:2154) est un candidat solide ; si les mêmes eastings apparaissent mais que le site est en Grande-Bretagne, le British National Grid (EPSG:27700) convient. Il s'agit de génération d'hypothèses, pas de preuve : confirmez toujours par une superposition de référence avant d'écrire le .prj.

Pièges courants et leurs causes

  • Copier un .prj depuis une couche sans rapport. Cela ne fait que réétiqueter ; cela ne déplace jamais les coordonnées. Si le SCR source diffère du SCR réel des données, chaque entité est désormais mal étiquetée. Les gens le font parce que le fichier manquant ressemble à une lacune insignifiante, mais c'est une assertion sur le SCR, pas un espace réservé.
  • Deviner d'après le nom de fichier ou de dossier. « utm.shp » ne vous dit rien de fiable ; seules les valeurs de coordonnées et une vérification de référence le font.
  • Attribuer EPSG:4326 à des données projetées. Le réflexe « il suffit de le mettre en WGS84 » appose des degrés sur des coordonnées en mètres et projette les données à des milliers de kilomètres.
  • Incompatibilités de dialecte WKT. Un .prj de style Esri peut être signalé « inconnu » par un lecteur plus strict même si les données sont correctes ; régénérez un WKT propre à partir du code EPSG.
  • Ignorer la différence entre définir et transformer. Définir (écrire le .prj) s'applique à des métadonnées manquantes/erronées sur des coordonnées correctes ; transformer s'applique au déplacement de coordonnées entre des systèmes connus. Les confondre est à la racine de la plupart des bugs de placement de shapefile.

AQ et validation

  • Après avoir écrit un .prj, superposez la couche aux données de référence fiables et confirmez qu'elle tombe là où se trouvent physiquement les entités.
  • Effectuez une vérification de mesure : une clôture, un segment de route ou une surface de parcelle connue doit correspondre à sa longueur/surface réelle dans la tolérance.
  • Relisez le SCR avec gdalsrsinfo boreholes.shp et confirmez qu'il se résout au code EPSG que vous visiez, et non simplement à « inconnu ».
  • Si vous envisagez d'abandonner les shapefiles, pensez à GeoPackage ou GeoJSON, où le SCR est intégré au fichier et ne peut être ni séparé ni perdu.

Le point de vue Bathyl

Nous traitons un .prj manquant d'abord comme un problème de diagnostic et ensuite seulement comme un problème de fichier : confirmer le vrai SCR à partir des plages de coordonnées et d'une superposition de référence avant d'écrire quoi que ce soit, et ne jamais copier un .prj entre jeux de données par confiance aveugle. Comme le SCR peut être physiquement détaché d'un shapefile, nous préférons les formats qui le portent en interne pour tout ce qui sera réutilisé ou transmis.

Lectures complémentaires

Sources