Ошибка при составлении картограммы - «Эта функция не дает правильных центроидов и расстояний для данных долготы / широты». - PullRequest
1 голос
/ 19 января 2020

Я пытаюсь использовать данные wrld_simple из пакета maptools для построения картограммы, в которой участвуют некоторые европейские страны, исходя из их населения в 2005 году:

countries = c('Austria', 'Belgium', 'Bulgaria', 'Cyprus', 'Czech Republic', 'Denmark', 'Estonia', 'Finland', 'France', 'Germany', 'Greece', 'Hungary', 'Iceland', 'Ireland', 'Italy', 'Latvia', 'Lithuania', 'Luxembourg', 'Malta', 'Netherlands', 'Norway', 'Poland', 'Portugal', 'Slovenia', 'Spain', 'Sweden', 'United Kingdom')

Используя пакет maptools, я получил wrld_simpl данные и извлекли данные для этих конкретных стран:

data(wrld_simpl)

mapsimple = wrld_simpl[wrld_simpl$NAME %in% countries]

plot(mapsimple)

Пока все хорошо, но когда я готовлю их:

cartogram= cartogram(mapping1, "POP2005", itermax = 7)

Please use cartogram_cont() instead of cartogram().

Error: Using an unprojected map. This function does not give correct centroids and distances for longitude/latitude data:
Use "st_transform()" to transform coordinates to another projection.

Я пытаюсь использовать cartogram_cont:

> cartogram= cartogram_cont(mapping1, "POP2005", itermax = 7)

Error: Using an unprojected map. This function does not give correct centroids and distances for longitude/latitude data:
Use "st_transform()" to transform coordinates to another projection.

Я попытался преобразовать его в sf и затем выполнить st_transform (), но безрезультатно:

sfno = st_as_sf(mapping1)

sfnoproj = st_transform(sfno, coords = c("lon", "lat"), crs = "+proj=longlat +datum=WGS84", agr = "constant")

cartogram= cartogram_cont(sfnoproj, "POP2005", itermax = 7)

Error: Using an unprojected map. This function does not give correct centroids and distances for longitude/latitude data:

Use "st_transform()" to transform coordinates to another projection.

Я предполагаю, что у меня нет правильных значений для правильного проецирования. Как бы я знал, чтобы установить его лучше? Если бы я использовал другие значения, кроме «POP2005», как мне go узнать об этом? Что означает «itermax» в картограмме (я не совсем понимаю данное определение)

Любая помощь будет принята с благодарностью, так как я новичок в этом. Спасибо !!!!

1 Ответ

1 голос
/ 19 января 2020

Некоторые несоответствия в ваших образцах данных (mapsimple v. mapping1 и пропущенная запятая), поэтому обновлены ниже:

library(maptools)
library(sf)
library(ggplot2)

countries = c('Austria', 'Belgium', 'Bulgaria', 'Cyprus', 'Czech Republic', 'Denmark', 'Estonia', 'Finland', 'France', 'Germany', 'Greece', 'Hungary', 'Iceland', 'Ireland', 'Italy', 'Latvia', 'Lithuania', 'Luxembourg', 'Malta', 'Netherlands', 'Norway', 'Poland', 'Portugal', 'Slovenia', 'Spain', 'Sweden', 'United Kingdom')

data(wrld_simpl)

mapsimple = wrld_simpl[wrld_simpl$NAME %in% countries,]

Как указала ошибка, ваши данные не были спроецированы. Он использует широту / долготу, которая не работает для cartogram_cont().

sfno <- st_as_sf(mapsimple)
st_crs(sfno)

Coordinate Reference System:
  EPSG: 4326 
  proj4string: "+proj=longlat +datum=WGS84 +no_defs"

Ваш st_transform() перепроектировал sfno как то же самое: EPSG 4326:

sfnoproj <- st_transform(sfno, coords = c("lon", "lat"), 
                        crs = "+proj=longlat +datum=WGS84", 
                        agr = "constant")
st_crs(sfnoproj)

Coordinate Reference System:
  EPSG: 4326 
  proj4string: "+proj=longlat +datum=WGS84 +no_defs"

Вместо этого выберите проекционную систему координат для Европы, например 23038 .

sfproj <- st_transform(sfno, crs = 23038)
st_crs(sfproj)

Coordinate Reference System:
  EPSG: 23038 
  proj4string: "+proj=utm +zone=38 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs"

Затем мы можем составить и построить картограмму:

cartogram <- cartogram_cont(sfproj, "POP2005", itermax = 7)

ggplot() +
  geom_sf(data = cartogram, aes(fill = POP2005))

enter image description here

...