Изменить после ввода ниже и, например, здесь : листовка должна найти компромисс между «понятным для не ГИС-экспертов» и «правильной обработкой ГИС».Теперь я понимаю, что брошюра сфокусирована на простоте обработки, поэтому проекции не могут быть реально реализованы.
Первоначальный вопрос: Моя цель - правильно отображать «реальные» плотности, то есть в событиях /м ^ 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]
тоже выглядят странно.Очень трудно найти хорошие учебники для новичка ГИС
Ссылки:
Комментарий после ввода от IvanSanchez : правильна ли следующая стратегия?
- Использование crsClass L.CRS.EPSG4326,карта изменилась, но данные остались без изменений.Таким образом, я также должен преобразовать данные.Это означает, что я должен использовать
new <- sp::spTransform(x, CRSobj, ...)
.Похоже, - Я должен выяснить код EPSG, здесь вы уже сказали мне (и вы можете догадаться), что это EPSG: 4326.Есть ли системный способ получить этот результат?
- Мне нужно преобразовать (lat, lng) в подходящий объект.С
??spTransform
: «x ... объект, который будет преобразован» и «CRSobj ... объект класса CRS».Помощь приводит к sp::CRS(projargs, doCheckCRSArgs=TRUE)
.Но затем я застреваю ... - Вызовите новый lat / lng в addCircleMarkers ().
- Как вы указали, я должен искать проекцию равной площадидля плотностей
- С здесь Я бы искал азимутальную равную область Ламберта (LAEA), как они рекомендуют.Начиная с здесь , я полагаю, я беру EPSG: 3575 (??) для Европы, но, возможно, "WGS 84 / Северный полюс LAEA Europe" не так?
- Я естьlost: ... найти (или построить) базовые карты для этой проекции.Я думаю, что это означает для карты и данных?
Можете ли вы предоставить ориентир через эти джунгли или хотя бы в одном из случаев выше?Или у вас есть хороший справочник, чтобы узнать, как это сделать правильно?
Из документации Leaflet:
crs ... Система координат., Не меняйте это, если вы не уверены, что это значит.
Но, к сожалению, они не говорят вам, где искать, если вам нужно измениться.