Ошибка «не числовой аргумент для бинарного оператора» при использовании tmap для построения данных sf - PullRequest
0 голосов
/ 27 марта 2019

Когда я пытаюсь отобразить данные точек, используя tm_symbols, я получаю сообщение об ошибке: non-numeric argument to binary operator.

Я удалил свой код назад, чтобы попытаться определить проблему, и, конечно, я искалtmap и другая документация.

Некоторые ссылки на других людей, которые делают что-то вроде того, что я пытаюсь сделать:

См. Также:

Вот мой репрезент:

library(sf)
library(tmap)
library(leaflet)

item_data <- data.frame(
    name=c("Epping Forest District Citizens Advice (Epping)","Epping Forest District Citizens Advice (Loughton)","Epping Forest District Citizens Advice (Waltham Abbey)"),
    latitude=c("51.696921", "51.649158", "51.687181"),
    longitude=c("0.110474", "0.05899", "-0.004736"),
    stringsAsFactors = FALSE
)
items_sf <- st_as_sf(item_data, coords=c("longitude", "latitude"), crs=3857)

tmap_mode("view")
epmap <- tm_basemap(leaflet::providers$Stamen.TonerBackground) +
  tm_shape(items_sf, name="CA Locations") +
  tm_symbols(shape=21)
epmap

Это дает мне:

## Error in b[3:4] - b[1:2] : non-numeric argument to binary operator

Я пытаюсь использовать tmap каквидел, что это рекомендуется, но я подумал, что вместо этого я бы попробовал другие способы создания карты ... Если я сделаю:

plot(items_sf)

... это выдаст ошибку:

## Error in r[i1] - r[-length(r):-(length(r) - lag + 1L)] : non-numeric argument to binary operator

и если я сделаю:

library(mapview)
mapview(items_sf)

... я получаю вид карты с нанесенными на карту тремя точками, но в масштабе менее метра, в общем экстенте, поэтому координаты не обрабатываются какпо какой-то причине.

Я счастлив работать над решением проблем, но я думаю, что я действительно застрял здесь, потому что я не знаю, что делать с этими сообщениями об ошибках.

Я ожидаю график tmap из трех местоположений какточки (точки / символы) накладываются на базовую карту.Фактические результаты: сообщения об ошибках и карта не отображается.

** Редактировать: хорошо, ошибка цитирования числовых данных была довольно глупой с моей стороны, хорошее место респондента.Из-за того, что я печатал фрейм данных, а не просто копировал тот, который я фактически использовал.Как только это было исправлено, у меня все еще были некоторые ошибки с моим сценарием, но я в конечном итоге исправил их.

Проекция / ESPG была полезна, потому что я пока не очень понимаю их и в основном угадывал, что делать.Так что я тоже кое-чему там научился.**

1 Ответ

1 голос
/ 27 марта 2019

Кажется, с вашим кодом есть две проблемы:

  • ваши координаты хранятся в виде текста (т. Е. Не цифры)
  • вы используете метрику CRS (3857) с координатами, которые имеют больше смысла при просмотре в десятичных градусах (угловых единицах)

Рассмотрим этот код с небольшими изменениями (удалены кавычки и изменен CRS с 3857 на 4326 + изменен цвет)

library(sf)
library(tmap)
library(leaflet)

item_data <- data.frame(
  name=c("Epping Forest District Citizens Advice (Epping)","Epping Forest District Citizens Advice (Loughton)","Epping Forest District Citizens Advice (Waltham Abbey)"),
  latitude=c(51.696921, 51.649158, 51.687181),
  longitude=c(0.110474, 0.05899, -0.004736),
  stringsAsFactors = FALSE
)

items_sf <- st_as_sf(item_data, coords = c("longitude", "latitude"), crs = 4326)

tmap_mode("view")
epmap <- tm_shape(items_sf, name="CA Locations") + tm_symbols(shape = 21, col = "red") +
  tm_basemap(leaflet::providers$Stamen.TonerBackground)

epmap

enter image description here

...