Как я могу использовать и понимать (R-) листовки crsClasses? - PullRequest
0 голосов
/ 14 июня 2019

Изменить после ввода ниже и, например, здесь : листовка должна найти компромисс между «понятным для не ГИС-экспертов» и «правильной обработкой ГИС».Теперь я понимаю, что брошюра сфокусирована на простоте обработки, поэтому проекции не могут быть реально реализованы.

Первоначальный вопрос: Моя цель - правильно отображать «реальные» плотности, то есть в событиях /м ^ 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.

enter image description here

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

enter image description here

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 ... Система координат., Не меняйте это, если вы не уверены, что это значит.

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

1 Ответ

1 голос
/ 14 июня 2019

Моя цель - правильно отображать «реальные» плотности, то есть в событиях / м 2

Вы должны использовать проекцию равной площади , затем.

но я не понимаю, почему это соответствует worldCopyJump = FALSE.

worldCopyJump - это опция взаимодействия , а не опция визуализации . Позвольте мне процитировать ссылку на брошюру, акцент мой:

Если этот параметр включен, карта отслеживает при перемещении на другую «копию» мира и плавно переходит на исходную, так что все наложения, такие как маркеры и векторные слои все еще видны.

Другими словами: эта опция влияет только на поведение карты, когда пользователь перемещает карту вокруг нее так, что центр карты пересекает антимеридиан. Это не имеет никакого другого эффекта. Он не делает несколько копий данных, как Leaflet.RepeatedMarkers , и он не изменяет положение ваших данных, поэтому он выглядит лучше .

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

Вы используете карту с системой координат EPSG: 4326, но фоновые фрагменты все еще находятся в EPSG: 3857. Как объяснено в другом месте , Leaflet не перепроектирует растровые данные (в отличие от OpenLayers в некоторых очень специфических сценариях). Если вы измените CRS карты, вы также должны изменить источник (и) тайлов карты.

EPSG: 4326 - это система координат для равносторонней проекции , основанная на CRS84 .

.

Он обладает тем свойством, что границы Земли выглядят как прямоугольник с соотношением 2: 1; Листовка предполагает, что сервер плиток, обслуживающий плитки в EPSG: 4326, имеет две плитки для нулевого уровня масштабирования. Сравните это с предположением, что Leaflet составляет около EPSG: 3857, имея только одну квадратную плитку с нулевым уровнем масштабирования .


Не меняйте CRS вслепую и ожидайте, что все заработает. Выберите проекцию карты, найдите ее код EPSG, а затем найдите (или создайте) базовые карты для этой проекции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...