-
-
Save tylermorganwall/b222fcebcac3de56a6e144d73d166322 to your computer and use it in GitHub Desktop.
library(geojsonsf) | |
library(sf) | |
library(rayrender) | |
#Data source: https://github.com/telegeography/www.submarinecablemap.com | |
cables = geojson_sf("cable-geo.json") | |
cablescene = list() | |
counter = 1 | |
for(i in 1:length(cables$geometry)) { | |
for(j in 1:length(cables$geometry[[i]])) { | |
temp = cables$geometry[[i]][[j]] | |
cableval = data.frame(x=sinpi(temp[,1]/180)*cospi(temp[,2]/180), | |
y=sinpi(temp[,2]/180), | |
z=cospi(temp[,1]/180)*cospi(temp[,2]/180)) | |
#Don't lower start of line at the 180/0 longitude border | |
if(abs(temp[1,1] - 180) > 0.001 && abs(temp[1,1] + 180) > 0.001) { | |
cableval[1,] = cableval[1,] * 1/1.02 | |
} | |
nr = nrow(temp) | |
#Don't lower end of line at the 180/0 longitude border | |
if(abs(temp[nr,1] - 180) > 0.001 && abs(temp[nr,1] + 180) > 0.001) { | |
nr = nrow(cableval) | |
cableval[nr,] = cableval[nr,] * 1/1.02 | |
} | |
cablescene[[counter]] = path(cableval, width = 0.005,material=diffuse(color=cables$color[i])) | |
counter = counter + 1 | |
} | |
} | |
fullcablescene = do.call(rbind,cablescene) | |
for(i in seq(1,720,by=1)) { | |
group_objects(fullcablescene,scale=c(1,1,1)*1.02) %>% | |
add_object(sphere(radius=0.99,material=diffuse(image_texture = "2k_earth_daymap.jpg"),angle=c(0,-90,0))) %>% | |
group_objects(angle=c(0,-i/2,0)) %>% | |
add_object(sphere(y=5,z=5,x=5,material=light(intensity = 80,color="lightblue"))) %>% | |
add_object(sphere(y=5,z=5,x=-5,material=light(intensity = 10,color="orange"))) %>% | |
add_object(sphere(y=-10,material=light(intensity = 3,color="white"))) %>% | |
render_scene(samples=64,width=1200,height=1200,fov=0,aperture=0, ortho_dimensions = c(2.3,2.3), | |
sample_method = "sobol_blue",filename=sprintf("smallcables%d.png",i)) | |
} |
cables = geojson_sf("cable-geo.json")
"Error in rcpp_geojson_to_sf(geojson, expand_geometries) : Invalid JSON"
I guess that you're supposed to do the installation of the cable map first as described here, but after doing so, how do I export this map into a .json file like you did ("cable-geo.json")?
EDIT: oh boy it was all simple I was supposed to just download & save a file linked here
I think the Earth is running in the opposite direction, but I haven't identified where to put the - to push the fix.
Btw: awesome!!!
I think need some changes in 32 line:
for(i in seq(1,720,by=1))
but I don't know what exactly :)
maybe seq(720, 1, by=1) or seq(1,720,by=-1) or seq(720,1,by=-1)
Error in group_objects(., angle = c(0, -i/2, 0)) :
unused argument (angle = c(0, -i/2, 0))
It's because the function argument is actually called group_angle, not angle
The same goes for argument called "scale" which is in reality called "group_scale"
Also worth adding a link (as a comment) to download the 2k_earth_daymap.jpg image texture,
Error in group_objects(., angle = c(0, -i/2, 0)) :
unused argument (angle = c(0, -i/2, 0))It's because the function argument is actually called group_angle, not angle
The same goes for argument called "scale" which is in reality called "group_scale"
You just need to update to the latest version of rayrender on github (here, via R-Universe):
options(repos = c(
tylermorganwall = 'https://tylermorganwall.r-universe.dev',
CRAN = 'https://cloud.r-project.org'))
install.packages('rayrender')
2spoopy4me a skeleton planet!
I guess the texture didn't stick to the sphere, huh? Outdated version os rayrender again, huh?
https://user-images.githubusercontent.com/13952639/134770781-5398924c-02de-4826-929c-42fb9fea4ae5.mov
2spoopy4me a skeleton planet!
I guess the texture didn't stick to the sphere, huh? Outdated version os rayrender again, huh?
https://user-images.githubusercontent.com/13952639/134770781-5398924c-02de-4826-929c-42fb9fea4ae5.mov
Yes, update to the latest version via the code above (JPEG texture support was added after the CRAN upload)
Como se puede ejecutar este archivo?
Como se puede ejecutar este archivo?
- Descarga los archivos a los que hace referencia el código R (1 archivo GeoJSON, 1 archivo JPG) usando los enlaces mencionados líneas arriba (en los comentarios)
- En el código R, ajusta la referencia de ruta de los archivos descargados (según tu definición)
- Ejecuta el código R en tu ambiente favorito (e.g, R-Studio). Prepárate para esperar. En mi caso tomó 40 horas en completar.
- La salida es grupo de imágenes PNG que visualizadas juntas pueden animarse como un video. Yo utilicé ffmpeg para hacer esa combinación.
The SFU link for the JPG doesn't work, here's the wikimedia source file.
https://upload.wikimedia.org/wikipedia/commons/c/c3/Solarsystemscope_texture_2k_earth_daymap.jpg
Hi,
I was wondering if anyone still had access to a repo of the Telegeography submarine cable map. They no longer maintain their public github as of 2 weeks ago, and I wanted to look at their source code. Thank you!
I was looking for it as well, I think you get it from the attachments here,
https://observablehq.com/@ariellemartinez/submarine-cable-map
Good Luck!
I have consolidated and modified a little there :
Some pointers for beginners to R:
- You'll need three R packages: "geojsonsf", "sf", and "rayrender"
- "sf" expects some libraries to be installed on your system, see its readme on how to do this, for example for Linux
- You'll need a Fortran compiler. If you're on Arch Linux:
pacman -S gcc-fortran
- After installing R and opening its command line, install the packages with
install.packages(c("geojsonsf", "sf", "rayrender"))
- Then run the script with
source("submarine_cable_map.R")
I'm offering the PNGs of the cable map via the following torrent magnet link since rendering them can take a few hours, depending on your hardware:
magnet:?xt=urn:btih:d3d832c365c5f7ec88d0bea1a4d3906a064950f9&dn=submarine_cables_map_pngs
Turn the PNGs into a video using, for example:
ffmpeg -i smallcables%03d.png -vf scale=720:720 -crf 55 globe.webm
ffmpeg -i smallcables%03d.png -vf scale=720:720 -pix_fmt yuv420p -crf 26 globe.mp4
Reduce the value of -crf
for higher quality or set the resolution to something else, for example: scale=1024:1024
cables = geojson_sf("cable-geo.json")
"Error in rcpp_geojson_to_sf(geojson, expand_geometries) : Invalid JSON"I guess that you're supposed to do the installation of the cable map first as described here, but after doing so, how do I export this map into a .json file like you did ("cable-geo.json")?
EDIT: oh boy it was all simple I was supposed to just download & save a file linked here
Hey ! If available, can you please send me the dataset for the cables-map, unfortunately telegeography stopped maintaining their public github repo for downloads. Would really like to work on this dataset. If anyone can help, i would really appreciate the support !
The Internet Archive is your friend. https://web.archive.org/web/20220325102119/https://github.com/telegeography/www.submarinecablemap.com
https://www.submarinecablemap.com/api/v3/cable/cable-geo.json https://www.submarinecablemap.com/api/v3/landing-point/landing-point-geo.json https://www.submarinecablemap.com/api/v3/cable/all.json
Does anyone know if this API is maintained and up-to-date?
https://www.submarinecablemap.com/api/v3/cable/cable-geo.json https://www.submarinecablemap.com/api/v3/landing-point/landing-point-geo.json https://www.submarinecablemap.com/api/v3/cable/all.json
Does anyone know if this API is maintained and up-to-date?
These json files are used to plot https://www.submarinecablemap.com as can be seen from browser developer tools, so I'm assuming it should be up-to-date and consistent with the website?
I think the Earth is running in the opposite direction, but I haven't identified where to put the - to push the fix.
Btw: awesome!!!