Skip to content

Instantly share code, notes, and snippets.

@phileas-condemine
Last active November 25, 2020 15:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save phileas-condemine/2cd586cd9b264130038e07a804a302b9 to your computer and use it in GitHub Desktop.
Save phileas-condemine/2cd586cd9b264130038e07a804a302b9 to your computer and use it in GitHub Desktop.
Génération de fichiers avec une ligne par établissement géographique, coordonnées en WGS84 longitude latitude (EPSG:4326) et encodage en UTF-8
library(data.table)
library(sf)
library(tidyr)
library(leaflet)
library(dplyr)
# télécharger le fichier FINESS géocodé le plus récent et le renommer finess_geocoded_latest.csv
fi1 = fread("finess_geocoded_latest.csv",encoding="Latin-1",colClasses = "character")
n = nrow(fi1)
fi2 = fread("finess_geocoded_latest.csv",encoding="Latin-1",colClasses = "character",skip = n+1,sep=";")
nm1 = c(
'section',
'nofinesset',
'nofinessej',
'rs',
'rslongue',
'complrs',
'compldistrib',
'numvoie',
'typvoie',
'voie',
'compvoie',
'lieuditbp',
'commune',
'departement',
'libdepartement',
'ligneacheminement',
'telephone',
'telecopie',
'categetab',
'libcategetab',
'categagretab',
'libcategagretab',
'siret',
'codeape',
'codemft',
'libmft',
'codesph',
'libsph',
'dateouv',
'dateautor',
'maj',
'numuai'
)
nm2 = c(
'type',
'nofinesset',
'coordxet',
'coordyet',
'sourcecoordet',
'datemaj'
)
names(fi1) <- nm1
names(fi2) <- nm2
fi2 <- fi2 %>%
separate(sourcecoordet,c("s1","s2","s3","s4","s5","s6","CRS"),sep=",")%>%
select(nofinesset,coordxet,coordyet,CRS)%>%
data.table
table(fi2$CRS)
finess_geoloc = merge(fi1,fi2,by="nofinesset")
finess_geoloc[,coordxet:=as.numeric(coordxet)]
finess_geoloc[,coordyet:=as.numeric(coordyet)]
finess_geoloc = finess_geoloc[!is.na(coordxet)&!is.na(coordyet)]
# https://geodesie.ign.fr/contenu/fichiers/documentation/pedagogiques/TransformationsCoordonneesGeodesiques.pdf
code_crs = data.table(CRS = c("LAMBERT_93","UTM_N20","UTM_N21","UTM_N22","UTM_S38","UTM_S40"),
EPSG = c(2154,4559,4467,2972,4471,2975))
i=6
finess_geoloc_lonlat = lapply(1:nrow(code_crs),function(i){
one_crs = code_crs$CRS[i]
epsg = code_crs$EPSG[i]
sub = finess_geoloc[CRS==one_crs]%>%
st_as_sf(coords=c("coordxet","coordyet"),crs=epsg)%>%
st_transform(4326)
# #Pour une vérification visuelle. Si tous les points sont sur la terre ferme et sur les bonnes îles, c'est bon signe.
# leaflet(data=sub)%>%addTiles()%>%addMarkers(label = ~rs)
sub
})
finess_geoloc_lonlat = do.call("rbind",finess_geoloc_lonlat)
# Vérification sur qqpoints
leaflet(data=finess_geoloc_lonlat[sample(nrow(finess_geoloc_lonlat),1000),])%>%
addTiles()%>%addMarkers(label = ~rs)
# Tous les points ont bien des géocoordonnées, c'est important de toujours le vérifier sinon on induit un décalage sans erreur sur la carte !!!
nrow(finess_geoloc_lonlat)
finess_geoloc_lonlat = finess_geoloc_lonlat[!sf::st_is_empty(finess_geoloc_lonlat),]
nrow(finess_geoloc_lonlat)
# to UTF-8
finess_geoloc_lonlat = finess_geoloc_lonlat%>%
mutate_if(is.character,iconv,to="UTF-8")%>%
mutate(CRS="WGS84")
save(finess_geoloc_lonlat,file = "clean_finess_geoloc.RData")
fwrite(finess_geoloc_lonlat,"clean_finess_geoloc.csv")
# finess_geoloc_lonlat = fread("clean_finess_geoloc.csv",encoding = "UTF-8")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment