在下面的输入后进行编辑,例如here :传单必须在“非gis专家可理解的”和“正确的gis处理”之间做出折衷。我现在所了解的是,传单的重点是易于处理,因此无法真正实现预测。
原始问题:我的目标是正确显示“真实”密度,即事件/ m ^ 2。目前,我正在为传单的投影而苦苦挣扎。我必须怎么做才能正确显示所有crsClasses?我的数据在这里生成均匀的随机点。
我想我想转换数据吗?
library(leaflet)
n <- 10000
z <- 2*runif(n) - 1
phi <- 2*pi*runif(n) - pi
x <- sin(phi)*sqrt(1 - z^2)
y <- cos(phi)*sqrt(1 - z^2)
theta <- acos(z)
# lat / lng
lat <- theta*180/pi - 90
lng <- phi*180/pi
# Working fine:
# plot3D::polygon3D(x, y, z)
rgl::plot3d(x, y, z)
# rgl::plot3d(sin(phi)*sin(theta), cos(phi)*sin(theta), cos(theta)) # the same...
# EPSG:3857, also known as "Google Mercator" or "Web Mercator", the first in the following list
crsClasses <- c("L.CRS.EPSG3857", "L.CRS.EPSG4326", "L.CRS.EPSG3395", "L.CRS.Simple", "L.Proj.CRS")
epsg3857 <- leafletCRS(crsClass = crsClasses[1])
leaflet(options = leafletOptions(
crs = epsg3857, worldCopyJump = FALSE)) %>%
addTiles() %>%
addProviderTiles(providers$OpenStreetMap, group = "OSM") %>%
addProviderTiles(providers$Stamen.TonerLite, group = "Toner Lite") %>%
addLayersControl(baseGroups = c("OSM", "Toner Lite")) %>%
addCircleMarkers(lat = lat,
lng = lng,
radius = 1,
stroke = FALSE,
fillOpacity = 0.7)
使用crsClasses[1]
...看起来不错,但我不明白为什么它与worldCopyJump = FALSE
相对应。
使用crsClasses[2]
...看起来很奇怪
crsClasses[3...6]
看起来也很奇怪。很难为GIS新手找到好的教程
参考:
从IvanSanchez输入信息后的评论:以下策略正确吗?
new <- sp::spTransform(x, CRSobj, ...)
。看起来像
??spTransform
:“ x ...要转换的对象”和“ CRSobj ...类CRS的对象”。帮助指向sp::CRS(projargs, doCheckCRSArgs=TRUE)
。但是后来我被困住了... 您能否通过该丛林或至少针对上述情况之一提供指导?还是您有很好的参考资料来学习如何正确地做到这一点?
从Leaflet文档中:
crs ...使用的坐标参考系统。 如果不确定它的含义,请勿更改。
但是不幸的是,他们没有告诉您需要更改的位置。
答案 0 :(得分:1)
我的目标是正确显示“真实”密度,即在events / m 2
中
然后,您应该使用equal-area projection。
但是我不明白为什么它对应于
worldCopyJump = FALSE.
worldCopyJump
是一个交互选项,并且不是一个可视化选项。让我引用Leaflet的参考,重点是我的:
启用此选项后,地图会平移到世界的另一“副本”,并无缝跳转到原始世界,以便所有覆盖物(例如标记和矢量层)仍然可见。
换句话说:当用户平移地图时,该选项仅会影响地图的行为,以使地图的中心越过子午线。它没有任何其他作用。它不会像Leaflet.RepeatedMarkers那样复制数据的多个副本,而是像doesn't magically reposition your data so it looks nicer那样。
使用
crsClasses[2]
...看起来很奇怪
您正在使用带有EPSG:4326坐标系的地图,但背景图块仍位于EPSG:3857中。如elsewhere所述,Leaflet不会不重新投影栅格数据(与OpenLayers在某些特定情况下不同)。如果您更改地图的CRS,则也将负责更改地图的图块来源。
EPSG:4326是equirectangular projection的坐标系,基于CRS84 geoid。
它的性质是地球的范围看起来像一个比率为2:1的矩形; Leaflet假设服务于EPSG:4326中的图块的图块服务器具有两个两个图块,其缩放级别为零。将其与Leaflet关于EPSG:3857 having just one square tile at zoom level zero的假设进行比较。
不要盲目更改CRS,不要指望一切正常。选择地图投影,找到其EPSG代码,然后为该投影找到(或构建)底图。