Изменить после ввода ниже и, например. здесь: буклет должен найти компромисс между "понятным для неспециалистов по ГИС" и "правильным обращением с ГИС". Насколько я понимаю сейчас, буклет ориентирован на простоту использования, поэтому прогнозы не могут быть реализованы.
Оригинальный вопрос: Моя цель — правильно отображать «настоящую» плотность, то есть в событиях/м^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]
тоже выглядят странно. Очень сложно найти хорошие учебники для новичка в ГИС.
Использованная литература:
Комментарий после ввода Ивана Санчеса: Верна ли следующая стратегия?
new <- sp::spTransform(x, CRSobj, ...)
. Это выглядит как
??spTransform
: "x... объект для преобразования" и "CRSobj... объект класса CRS". Помощь приводит к sp::CRS(projargs, doCheckCRSArgs=TRUE)
. Но потом я застреваю...Можете ли вы дать ориентир в этих джунглях или хотя бы в одном из вышеперечисленных случаев? Или у вас есть хорошая ссылка, чтобы узнать, как это сделать правильно?
Из документов листовки:
crs ... Coordinate Reference System to use. Don't change this if you're not sure what it means.
Но, к сожалению, они не говорят вам, где искать, если вам нужно изменить.
My goal is to display "real" densities correctly, that is in events/m2
Тогда вам следует использовать равновеликая проекция.
but I don't understand why this corresponds to
worldCopyJump = FALSE.
worldCopyJump
— это вариант взаимодействие и вариант не визуализация. Позвольте мне процитировать ссылку на Листовку, подчеркнув мою:
With this option enabled, the map tracks when you pan to another "copy" of the world and seamlessly jumps to the original one so that all overlays like markers and vector layers are still visible.
Другими словами: этот параметр влияет на поведение карты только тогда, когда пользователь перемещает карту так, что центр карты пересекает антимеридиан. Никакого другого эффекта у него нет. Он не делает несколько копий данных, как это делает Leaflet.RepeatedMarkers, а не волшебным образом перемещает ваши данные, чтобы они выглядели лучше.
Using
crsClasses[2]
... looks strange
Вы используете карту с системой координат EPSG:4326, но фрагменты фона по-прежнему имеют формат EPSG:3857. Как поясняется в другом месте, Leaflet нет перепроецирует растровые данные (в отличие от того, что делает OpenLayers в некоторых очень специфических сценариях). Если вы меняете CRS карты, вы также отвечаете за изменение источника(ов) фрагментов карты.
EPSG:4326 — это система координат для равноугольная проекция, основанная на геоид CRS84.
Он обладает тем свойством, что размеры земли выглядят как прямоугольник с отношением 2:1; Листовка делает предположение, что сервер тайлов, обслуживающий тайлы в EPSG:4326, имеет тайлы два для нулевого уровня масштабирования. Сравните это с предположением Leaflet о EPSG:3857 имеет только одну квадратную плитку с нулевым уровнем масштабирования.
Не меняйте CRS вслепую и не ждите, что все заработает. Выберите проекцию карты, найдите ее код EPSG, затем найдите (или создайте) базовые карты для этой проекции.
См. также gis.stackexchange.com/questions/310091/…. Листовка сама обрабатывает широту-длину → проекцию координат пикселей. Не меняйте координаты широты и долготы и пытайтесь создавать свои собственные базовые карты.
Смотрите мое редактирование - я также включаю вашу ссылку в начало моего вопроса. Спасибо за вашу поддержку...
Смотрите мою правку. Моя проблема в том, что я новичок в этом. До сих пор я использовал только основы Leaflet...