Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Service identification Iris #103

Open
EmmanuelDemey opened this issue Jan 12, 2024 · 8 comments
Open

Service identification Iris #103

EmmanuelDemey opened this issue Jan 12, 2024 · 8 comments
Assignees

Comments

@EmmanuelDemey
Copy link

Service d’identification

Iris

L’Iris est un découpage infra-communal.

Seules les plus grandes communes (environ 2000) sont découpées en Iris. Le reste du territoire n’est pas couvert par ce zonage.

Toutefois, pour répondre au mieux aux besoins des utilisateurs, l’API devrait renvoyer une partition du territoire. Pour cela, en plus des Iris, elle renverra un faux Iris pour chaque commune non découpée, avec comme code le code de la commune suivi de « 0000 » (les code des Iris étant deux mêmes composés du code commune suivi de quatre chiffres). L’URI de ces faux Iris reste celui de communes, ainsi que leur nom et les autres informations qui les concernent.

Par ailleurs les Iris possèdent un « type d’Iris » qui est le plus généralement « H » (habitation) mais qui peut également être « A » (activité) ou « D » (divers).

Requête

Méthode Requête Description
GET /iris/{code} Récupérer les informations concernant l’Iris {code}

Paramètres

Paramètres Description Type
date Filtre pour renvoyer l’Iris activ à la date donnée. Par défaut, c’est la date courante. Date

Exemples de requête

/geo/iris/010040101

/geo/iris/0100401001?date=2023-01-01

Champs de la réponse

Champ Description
URI URI de l’Iris
Type « Iris » ou « Commune »
Code Code Insee de l’Iris
Intitule Nom de l’Iris (avec article)
IntituleSansArticle Nom de l’Iris sans article
TypeArticle Code article du nom de l’Iris. Attribut du champ IntituleSansArticle
TypeDIris Code du type d’Iris (H, A ou D)
DateCreation Date de création de l’Iris
DateSuppression Date de suppression de l’Iris s’il a été supprimé

Exemple de réponse en XML

<Iris code="010040101" uri="http://id.insee.fr/geo/iris/b8c772de-9551-4f13-81c5-eca5bb0f2f7d">
	<Intitule>Les Pérouses-Triangle d'Activités</Intitule>
	<IntituleSansArticle typeArticle="4">Pérouses-Triangle d'Activité</IntituleSansArticle>
	<TypeDIris>H</TypeDIris>
	<DateCreation>2008-01-01</DateCreation>
</Iris>

Exemple de réponse en JSON

{
	"type": "Iris",
	"code": "010040101",
	"uri": "http://id.insee.fr/geo/iris/b8c772de-9551-4f13-81c5-eca5bb0f2f7d",
	"intitule": "Les Pérouses-Triangle d'Activités",
	"intituleSansArticle": "Pérouses-Triangle d'Activité",
	"typeArticle": "4",
	"typeDIris": "H",
	"dateCreation": "2008-01-01"
}

Exemple de requête SPARQL

Sans le paramètre date, c’est la date courante

PREFIX igeo: <http://rdf.insee.fr/def/geo#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT DISTINCT ?uri ?type ?code ?nom ?nomSansArticle ?codeArticle ?typeDIris ?dateDebut ?dateFin
WHERE {
	{
		?s a igeo:Iris ;
			igeo:typeDIRIS ?uriTypeDIris ;
			igeo:codeINSEE '010040101';
			igeo:codeINSEE ?code .
		BIND(SUBSTR(STR(?uriTypeDIris ), STRLEN(STR(?uriTypeDIris )), 1) AS ?typeDIris)
	}
	UNION
	{
		BIND(SUBSTR('010040101', 1, 5) AS ?codeCommune)
		?s a igeo:Commune ;
			igeo:codeINSEE ?codeCommune .
		OPTIONAL {
			?iris igeo:subdivisionDirecteDe+ ?s ; a igeo:Iris .
			OPTIONAL {?iris ^igeo:creation/igeo:date ?dateDebutIris }
			OPTIONAL {?iris ^igeo:suppression/igeo:date ?dateFinIris }
			FILTER (!BOUND(?dateDebutIris) || ?dateDebutIris <= NOW() )
			FILTER (!BOUND(?dateFinIris) || ?dateFinIris > NOW() )
		}
		FILTER (!BOUND(?iris))
		BIND(CONCAT(?codeCommune, '0000') AS ?code)
		FILTER(?code = '010040101')
	}
	?s igeo:nom ?nom;
		igeo:codeArticle ?codeArticle ;
		igeo:nomSansArticle ?nomSansArticle ;
		a ?typeRDF .
	BIND(STR(?typeRDF) AS ?type).
	BIND(STR(?s) AS ?uri).
	OPTIONAL {?s ^igeo:creation/igeo:date ?dateDebut }
	OPTIONAL {?s ^igeo:suppression/igeo:date ?dateFin }
	FILTER (!BOUND(?dateDebut) || ?dateDebut <= NOW() )
	FILTER (!BOUND(?dateFin) || ?dateFin > NOW() )
}
ORDER BY ?code

Avec le paramètre date :

PREFIX igeo: <http://rdf.insee.fr/def/geo#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT DISTINCT ?uri ?type ?code ?nom ?nomSansArticle ?codeArticle ?typeDIris ?dateDebut ?dateFin
WHERE {
	{
		?s a igeo:Iris ;
			igeo:typeDIRIS ?uriTypeDIris ;
			igeo:codeINSEE '010040101';
			igeo:codeINSEE ?code .
		BIND(SUBSTR(STR(?uriTypeDIris ), STRLEN(STR(?uriTypeDIris )), 1) AS ?typeDIris)
	}
	UNION
	{
		BIND(SUBSTR('010040101', 1, 5) AS ?codeCommune)
		?s a igeo:Commune ;
			igeo:codeINSEE ?codeCommune .
		OPTIONAL {
			?iris igeo:subdivisionDirecteDe+ ?s ; a igeo:Iris .
			OPTIONAL {?iris ^igeo:creation/igeo:date ?dateDebutIris }
			OPTIONAL {?iris ^igeo:suppression/igeo:date ?dateFinIris }
			FILTER (!BOUND(?dateDebutIris) || ?dateDebutIris <= '2023-01-01'^^xsd:date )
			FILTER (!BOUND(?dateFinIris) || ?dateFinIris > '2023-01-01'^^xsd:date )
		}
		FILTER (!BOUND(?iris))
		BIND(CONCAT(?codeCommune, '0000') AS ?code)
		FILTER(?code = '010040101')
	}
	?s igeo:nom ?nom;
		igeo:codeArticle ?codeArticle ;
		igeo:nomSansArticle ?nomSansArticle ;
		a ?typeRDF .
	BIND(STR(?typeRDF) AS ?type).
	BIND(STR(?s) AS ?uri).
	OPTIONAL {?s ^igeo:creation/igeo:date ?dateDebut }
	OPTIONAL {?s ^igeo:suppression/igeo:date ?dateFin }
	FILTER(!BOUND(?dateCreation) || ?dateCreation <= '2023-01-01'^^xsd:date)
	FILTER(!BOUND(?dateSuppression) || ?dateSuppression > '2023-01-01'^^xsd:date)
}
@ChristopheYon
Copy link

  • Le code d'un "pseudo-iris" doit se terminer par "0000" (ie quand on demande "010020000", l'objet retourné doit avoir un champ code qui vaut "010020000" même si en fait c'est une commune)
  • Seules les communes non découpées en Iris (ie qui n'ont pas de subdivision directes ou indirectes de type Iris) doivent renvoyer un "pseudo-iris". Par exemple "010040000" devrait renvoyer une erreur 404. Et "691230000" aussi.

@JeromeMBourgeois
Copy link
Contributor

@ChristopheYon c'est corrigé et déployé pour que tu me dises si cela te convient. J'aurai surement des choses à reprendre au niveau du code, c'est pour ça que je laisse cette carte dans la colonne revue de code.

@ChristopheYon
Copy link

@JeromeMBourgeois
J'ai une erreur 404 sur /geo/iris/693870103 qui pourtant existe bien. Par contre, c'est un Iris qui est un découpage d'un arrondissement municipal et pas directement d'une commune.
Le reste semble bien.

@JeromeMBourgeois
Copy link
Contributor

@ChristopheYon c'est corrigé et déployé en QF.

@ChristopheYon
Copy link

@JeromeMBourgeois
Là je pense que j'ai tout ce qu'il me faut.
Par contre j'en ai peut-être même un peu trop :
La requête /geo/iris/010030000 me renvoie une réponse bizarre :

{
  "code": "010030000",
  "type": "Commune"
}

010030000, ça correspondrait au faux-iris de la commune 01003 (Amareins), qui a disparu depuis 1974. Et ça a l'air systématique pour les communes disparues. Il manque probablement un filtre sur la date quelque part (ou le filtre sur la date laisse passer quelque chose).

@JeromeMBourgeois
Copy link
Contributor

@ChristopheYon Zut, je regarde le filtre sur la date

@JeromeMBourgeois
Copy link
Contributor

@ChristopheYon c'est corrigé

@ChristopheYon
Copy link

@JeromeMBourgeois
C'est tout bon pour moi. Je passerai dans la colonne recette ok dès que ça sera passé par la colonne "code joli"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants