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 liste Iris #104

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

Service liste Iris #104

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

Comments

@EmmanuelDemey
Copy link
Collaborator

Service de liste

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 Récupérer les informations concernant les Iris

Paramètres

Paramètres Description Type
date La requête renvoie tous les iris actifs à la date donnée. Par défaut, c’est la date courante. Date

Exemples de requête

/geo/iris

/geo/iris?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

<Territoires>
	<Commune code="010010000" uri="http://id.insee.fr/geo/commune/166857ef-114f-4067-9d3d-f712562850c5">
		<Intitule>L'Abergement-Clémenciat</Intitule>
		<IntituleSansArticle typeArticle="5">Abergement-Clémenciat</IntituleSansArticle>
		<DateCreation>1943-01-01</DateCreation>
	</Commune>
	<Commune code="010020000" uri="http://id.insee.fr/geo/commune/43018c68-c278-433a-b285-3531e8d5347e">
		<Intitule>L'Abergement-de-Varey</Intitule>
		<IntituleSansArticle typeArticle="5">Abergement-de-Varey</IntituleSansArticle>
		<DateCreation>1943-01-01</DateCreation>
	</Commune>
	<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>
...
</Territoires>

Exemple de réponse en JSON

[
	{
		"type": "Commune",
		"code": "010010000",
		"uri": "http://id.insee.fr/geo/commune/166857ef-114f-4067-9d3d-f712562850c5",
		"intitule": "L'Abergement-Clémenciat",
		"intituleSansArticle": "Abergement-Clémenciat",
		"typeArticle": "5",
		"dateCreation": "1943-01-01"
	},
	{
		"type": "Commune",
		"code": "010020000",
		"uri": "http://id.insee.fr/geo/commune/43018c68-c278-433a-b285-3531e8d5347e",
		"intitule": "L'Abergement-de-Varey",
		"intituleSansArticle": "Abergement-de-Varey",
		"typeArticle": "5",
		"dateCreation": "1943-01-01"
	},
	{
		"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

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 ?code .
		BIND(SUBSTR(STR(?uriTypeDIris ), STRLEN(STR(?uriTypeDIris )), 1) AS ?typeDIris)
	}
	UNION
	{
		?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)
	}
	?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 ?code .
		BIND(SUBSTR(STR(?uriTypeDIris ), STRLEN(STR(?uriTypeDIris )), 1) AS ?typeDIris)
	}
	UNION
	{
		?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)
	}
	?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)
}
ORDER BY ?code
@ChristopheYon
Copy link

Il faudrait ajouter un paramètre pour pouvoir choisir d'avoir les Iris (et communes) des collectivités d'outre-mer (dont le code commence par 98) ou pas (il y a deux Iris à Saint-Pierre-et-Miquelon, le reste sont des communes).
Faire comme pour le service de liste des communes avec un paramètre "com", dont la valeur par défaut serait "false".
La manière de filtrer les collectivités d'outre-mer est d'utiliser le fait qu'elles ne sont pas des subdivision de http://id.insee.fr/geo/pays/france

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:subdivisionDirecteDe)+ <http://id.insee.fr/geo/pays/france>;
			igeo:codeINSEE ?code .
		BIND(SUBSTR(STR(?uriTypeDIris ), STRLEN(STR(?uriTypeDIris )), 1) AS ?typeDIris)
	}
	UNION
	{
        ?s a igeo:Commune ;
    		(igeo:subdivisionDirecteDe)+ <http://id.insee.fr/geo/pays/france>;
			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)
	}
	?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

@JeromeMBourgeois
Copy link
Contributor

JeromeMBourgeois commented Feb 8, 2024

@ChristopheYon J'ai crée le filtre dont tu parlais. Comme pour le service identification, c'est déployé en recette pour que tu me dises si c'est bien ce que tu voulais. J'ai limité la sortie à 100 observations pour éviter de faire planter le swagger....

@ChristopheYon
Copy link

@JeromeMBourgeois
Ça semble ok. Mais avec 100 échos, on ne voit pas la différence avec ou sans les COM (qui sont plutôt tout à la fin).

@JeromeMBourgeois
Copy link
Contributor

JeromeMBourgeois commented Feb 8, 2024

@ChristopheYon j'ai ôté la limite des 100 observations

@ChristopheYon
Copy link

@JeromeMBourgeois
C'est tout bon. Par contre il faudrait enlever de la doc que le paramètre "*" permet de renvoyer tout l'historique. On peut même refuser cette valeur pour ce service (ie renvoyer un 400 plutôt qu'un 404)

@JeromeMBourgeois
Copy link
Contributor

@ChristopheYon d'ac je regarde pour faire cette modification

@JeromeMBourgeois
Copy link
Contributor

@ChristopheYon j'ai ôté le paramètre "" dans la doc pour le service Iris mais tu pensais peut-être qu'il fallait l’ôter pour l'ensemble des services ? Par contre, si on doit changer le code retour ça va nécessiter qu'on reprenne les requêtes car le "" était utilisé comme déclencheur de certaines conditions. On peut envisager de mettre ça dans une autre carte pour un prochain sprint.

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