Hi Benjamin,
please respond to the list as well. Other people may have similar issues
and this way we can find the solutions online.
If you want to extract the data along with the geometries, here's how you
could do it:
library(leaflet)
library(jsonlite)
library(sf)
url <- "
http://www.georisques.gouv.fr/api/v1/sis?rayon=1000&latlon=4.854899%2C%2045.763079&page=1&page_size=10
"
geojson <- jsonlite::fromJSON(url)
# convert coordinate arrays to matrices
geom = lapply(geojson$data$geom$coordinates, matrix, ncol = 2)
# create multipolygon from coordinate matrices
geom = lapply(geom, function(i) st_polygon(list(i)))
# overwrite the geom column of data in geojson
geojson$data$geom = st_sfc(geom, crs = 4326)
# exract data from geojson and turn into an sf object
dat = st_as_sf(geojson$data)
leaflet() %>%
addTiles()%>%
setView(lng = 4.854899, lat = 45.763079, zoom = 14) %>%
addMarkers(lng = 4.872536, lat = 45.758321)%>%
addPolygons(data = dat, popup = ~nom)
This way, as you can see, you can use the tilde (~) notation to include
popups referring to a column of the data.
I don't think that what you get using RSONIO is any closer to a valid
geojson.
Best
Tim
On Tue, Jul 9, 2019 at 3:28 PM Benjamin Pauget <benjamin.pauget at tesora.fr>
wrote:
Dear Tim,
Tanks you soooo much for your response !
I am a beginner and working with geospatial is still unclear.
I have tried to open my json file with ?from_JSON? and I have another
format of my data :
url <- "
http://www.georisques.gouv.fr/api/v1/sis?rayon=5000&latlon=4.854899%2C%2045.763079&page=1&page_size=10
"
geojson4 <- RJSONIO::fromJSON(url)
Do you think this format is more relevant and will allow to display the
pop?up info ?
Thank you again for your code (I just pass the two last day on trying to
display the polygons) !
Best regards,
*Benjamin PAUGET*
Responsable R&D
[image: cid:image005.png at 01D4F3BB.3531D840]
+33 (0)1 81 94 13 70
+33 (0)6 47 01 85 92
Le Visium
22 Av Aristide Briand
94110 ARCUEIL
https://tesora.fr/
Linkedin <https://www.linkedin.com/company/tesora-france>
*De :* Tim Salabim <tim.appelhans at gmail.com>
*Envoy? :* mardi 9 juillet 2019 15:14
*? :* Benjamin Pauget <benjamin.pauget at tesora.fr>
*Cc :* r-sig-geo at r-project.org
*Objet :* Re: [R-sig-Geo] geoJSON and leaflet
Hi Benjamin,
What you get back from the jsonlite::fromJSON() call is a simplified list
with the data (including the geometry information) as a data frame in one
of the list slots. GeoJson is usually a character string. Therefore, if you
open your map in the browser and open the console (Ctrl + i) you will see
the error message: "Invalid GeoJson object".
I am no expert on geojson structure, but it seems that the data that you
request is not in standard format. I tried a few different ways of parsing
the data to a valid GeoJson string but did not have success. Maybe someone
else with more insight has some helpful ideas how to achieve this.
However, I found a workaround to get the polygons shown on the map using
library(sf) - see code below. Note, this only visualises the geometry
information only, so direct popup queries via "~" are not possible.
library(leaflet)
library(jsonlite)
library(sf)
url <- "
http://www.georisques.gouv.fr/api/v1/sis?rayon=1000&latlon=4.854899%2C%2045.763079&page=1&page_size=10
"
geojson <- jsonlite::fromJSON(url)
# convert coordinate arrays to matrices
geom = lapply(geojson$data$geom$coordinates, matrix, ncol = 2)
# create multipolygon from coordinate matrices
geom = st_cast(st_polygon(geom), "MULTIPOLYGON")
leaflet() %>%
addTiles()%>%
setView(lng = 4.854899, lat = 45.763079, zoom = 14) %>%
addMarkers(lng = 4.872536, lat = 45.758321)%>%
addPolygons(data = geom)
HTH,
Tim
On Tue, Jul 9, 2019 at 1:49 PM Benjamin Pauget <benjamin.pauget at tesora.fr>
wrote:
Hi,
I?m writting because I have some trouble with a geoJSON file and a leaflet.
I?m trying to display polygon on a leaflet map, but nothing append ?
I have no error message.
Do you have some advice/ideas?
Best regards
Here is my code :
library(leaflet)
library(jsonlite)
url <- "
http://www.georisques.gouv.fr/api/v1/sis?rayon=1000&latlon=4.854899%2C%2045.763079&page=1&page_size=10
"
geojson <- jsonlite::fromJSON(url)
leaflet() %>%
addTiles()%>%
setView(lng = 4.854899, lat = 45.763079, zoom = 14) %>%
addMarkers(lng = 4.872536, lat = 45.758321)%>%
addGeoJSON(geojson) # doesn?t work by using geojson$data or
geojson$data$geom
*Benjamin PAUGET*
Responsable R&D
[image: cid:image005.png at 01D4F3BB.3531D840]
+33 (0)1 81 94 13 70
+33 (0)6 47 01 85 92
Le Visium
22 Av Aristide Briand
94110 ARCUEIL
https://tesora.fr/
Linkedin <https://www.linkedin.com/company/tesora-france>
Hi Tim,
Thanks again for your response !
It fit perfectly !
Best
Ben
De : Tim Salabim <tim.appelhans at gmail.com>
Envoy? : mardi 9 juillet 2019 16:25
? : Benjamin Pauget <benjamin.pauget at tesora.fr>; r-sig-geo <r-sig-geo at r-project.org>
Objet : Re: [R-sig-Geo] geoJSON and leaflet
Hi Benjamin,
please respond to the list as well. Other people may have similar issues and this way we can find the solutions online.
If you want to extract the data along with the geometries, here's how you could do it:
library(leaflet)
library(jsonlite)
library(sf)
url <- "http://www.georisques.gouv.fr/api/v1/sis?rayon=1000&latlon=4.854899%2C%2045.763079&page=1&page_size=10"
geojson <- jsonlite::fromJSON(url)
# convert coordinate arrays to matrices
geom = lapply(geojson$data$geom$coordinates, matrix, ncol = 2)
# create multipolygon from coordinate matrices
geom = lapply(geom, function(i) st_polygon(list(i)))
# overwrite the geom column of data in geojson
geojson$data$geom = st_sfc(geom, crs = 4326)
# exract data from geojson and turn into an sf object
dat = st_as_sf(geojson$data)
leaflet() %>%
addTiles()%>%
setView(lng = 4.854899, lat = 45.763079, zoom = 14) %>%
addMarkers(lng = 4.872536, lat = 45.758321)%>%
addPolygons(data = dat, popup = ~nom)
This way, as you can see, you can use the tilde (~) notation to include popups referring to a column of the data.
I don't think that what you get using RSONIO is any closer to a valid geojson.
Best
Tim
On Tue, Jul 9, 2019 at 3:28 PM Benjamin Pauget <benjamin.pauget at tesora.fr<mailto:benjamin.pauget at tesora.fr>> wrote:
Dear Tim,
Tanks you soooo much for your response !
I am a beginner and working with geospatial is still unclear.
I have tried to open my json file with ?from_JSON? and I have another format of my data :
url <- "http://www.georisques.gouv.fr/api/v1/sis?rayon=5000&latlon=4.854899%2C%2045.763079&page=1&page_size=10"
geojson4 <- RJSONIO::fromJSON(url)
Do you think this format is more relevant and will allow to display the pop?up info ?
Thank you again for your code (I just pass the two last day on trying to display the polygons) !
Best regards,
Ben
De : Tim Salabim <tim.appelhans at gmail.com<mailto:tim.appelhans at gmail.com>>
Envoy? : mardi 9 juillet 2019 15:14
? : Benjamin Pauget <benjamin.pauget at tesora.fr<mailto:benjamin.pauget at tesora.fr>>
Cc : r-sig-geo at r-project.org<mailto:r-sig-geo at r-project.org>
Objet : Re: [R-sig-Geo] geoJSON and leaflet
Hi Benjamin,
What you get back from the jsonlite::fromJSON() call is a simplified list with the data (including the geometry information) as a data frame in one of the list slots. GeoJson is usually a character string. Therefore, if you open your map in the browser and open the console (Ctrl + i) you will see the error message: "Invalid GeoJson object".
I am no expert on geojson structure, but it seems that the data that you request is not in standard format. I tried a few different ways of parsing the data to a valid GeoJson string but did not have success. Maybe someone else with more insight has some helpful ideas how to achieve this.
However, I found a workaround to get the polygons shown on the map using library(sf) - see code below. Note, this only visualises the geometry information only, so direct popup queries via "~" are not possible.
library(leaflet)
library(jsonlite)
library(sf)
url <- "http://www.georisques.gouv.fr/api/v1/sis?rayon=1000&latlon=4.854899%2C%2045.763079&page=1&page_size=10"
geojson <- jsonlite::fromJSON(url)
# convert coordinate arrays to matrices
geom = lapply(geojson$data$geom$coordinates, matrix, ncol = 2)
# create multipolygon from coordinate matrices
geom = st_cast(st_polygon(geom), "MULTIPOLYGON")
leaflet() %>%
addTiles()%>%
setView(lng = 4.854899, lat = 45.763079, zoom = 14) %>%
addMarkers(lng = 4.872536, lat = 45.758321)%>%
addPolygons(data = geom)
HTH,
Tim
On Tue, Jul 9, 2019 at 1:49 PM Benjamin Pauget <benjamin.pauget at tesora.fr<mailto:benjamin.pauget at tesora.fr>> wrote:
Hi,
I?m writting because I have some trouble with a geoJSON file and a leaflet.
I?m trying to display polygon on a leaflet map, but nothing append ?
I have no error message.
Do you have some advice/ideas?
Best regards
Here is my code :
library(leaflet)
library(jsonlite)
url <- "http://www.georisques.gouv.fr/api/v1/sis?rayon=1000&latlon=4.854899%2C%2045.763079&page=1&page_size=10"
geojson <- jsonlite::fromJSON(url)
leaflet() %>%
addTiles()%>%
setView(lng = 4.854899, lat = 45.763079, zoom = 14) %>%
addMarkers(lng = 4.872536, lat = 45.758321)%>%
addGeoJSON(geojson) # doesn?t work by using geojson$data or geojson$data$geom
Benjamin PAUGET
Responsable R&D
[cid:image005.png at 01D4F3BB.3531D840]
+33 (0)1 81 94 13 70
+33 (0)6 47 01 85 92
Le Visium
22 Av Aristide Briand
94110 ARCUEIL
https://tesora.fr/
Linkedin<https://www.linkedin.com/company/tesora-france>
_______________________________________________
R-sig-Geo mailing list
R-sig-Geo at r-project.org<mailto:R-sig-Geo at r-project.org>
https://stat.ethz.ch/mailman/listinfo/r-sig-geo
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://stat.ethz.ch/pipermail/r-sig-geo/attachments/20190709/8037ee6a/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image001.png
Type: image/png
Size: 5152 bytes
Desc: image001.png
URL: <https://stat.ethz.ch/pipermail/r-sig-geo/attachments/20190709/8037ee6a/attachment.png>