Как я могу использовать и понимать crsClasses листовки (R-)?

Изменить после ввода ниже и, например. здесь: буклет должен найти компромисс между "понятным для неспециалистов по ГИС" и "правильным обращением с ГИС". Насколько я понимаю сейчас, буклет ориентирован на простоту использования, поэтому прогнозы не могут быть реализованы.

Оригинальный вопрос: Моя цель — правильно отображать «настоящую» плотность, то есть в событиях/м^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 листовки (R-)?

Использование crsClasses[2]... выглядит странно

Как я могу использовать и понимать crsClasses листовки (R-)?

crsClasses[3...6] тоже выглядят странно. Очень сложно найти хорошие учебники для новичка в ГИС.

Использованная литература:

Комментарий после ввода Ивана Санчеса: Верна ли следующая стратегия?

  • С помощью crsClass L.CRS.EPSG4326 карта изменилась, но данные остались без изменений. Таким образом, я также должен преобразовать данные. Это означает, что я должен использовать new <- sp::spTransform(x, CRSobj, ...). Это выглядит как
    • Мне нужно вычислить код EPSG, здесь вы мне уже сказали (и вы могли догадаться), что это EPSG:4326. Есть ли системный способ получить такой результат?
    • Мне нужно преобразовать (широта, длина) в правильный объект. Из ??spTransform: "x... объект для преобразования" и "CRSobj... объект класса CRS". Помощь приводит к sp::CRS(projargs, doCheckCRSArgs=TRUE). Но потом я застреваю...
    • Вызовите новую широту/долготу в addCircleMarkers().
  • Как вы указали, я должен искать равновеликую проекцию для плотности
    • Из здесь я бы поискал азимутальный равновеликий по Ламберту (LAEA), как они рекомендуют. Я полагаю, что из здесь я беру EPSG:3575(??) для Европы, но, возможно, "WGS 84/Северный полюс LAEA Europe" неверен?
    • Я потерялся: ... найти (или построить) базовые карты для этой проекции. Я думаю, это означает для карты и данных?

Можете ли вы дать ориентир в этих джунглях или хотя бы в одном из вышеперечисленных случаев? Или у вас есть хорошая ссылка, чтобы узнать, как это сделать правильно?

Из документов листовки:

crs ... Coordinate Reference System to use. Don't change this if you're not sure what it means.

Но, к сожалению, они не говорят вам, где искать, если вам нужно изменить.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
570
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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, затем найдите (или создайте) базовые карты для этой проекции.

Смотрите мою правку. Моя проблема в том, что я новичок в этом. До сих пор я использовал только основы Leaflet...

Christoph 14.06.2019 16:35

См. также gis.stackexchange.com/questions/310091/…. Листовка сама обрабатывает широту-длину → проекцию координат пикселей. Не меняйте координаты широты и долготы и пытайтесь создавать свои собственные базовые карты.

IvanSanchez 14.06.2019 17:00

Смотрите мое редактирование - я также включаю вашу ссылку в начало моего вопроса. Спасибо за вашу поддержку...

Christoph 11.07.2019 09:07

Другие вопросы по теме