Отображение количества точек в радиусе каждого местоположения в R

В R я пытаюсь создать карту хороплет. Я создал базу данных предприятий, некоторые из которых являются частью сетей (например, McDonalds), а другие независимы. Я хочу подсчитать, сколько предприятий находится в пределах 30 км от каждой точки на карте, но рассматривать разные местоположения сетей как единый бизнес.

Например, если ваша точка:

  • 5 км от McDonalds,
  • В 10 км от Taco Bell
  • 15 км от Чик-Фил-А
  • В 20 км от KFC
  • В 25 км от McDonalds
  • В 35 км от Five Guys

Цвет покажет, что в пределах 30 км есть 4 заведения быстрого питания.

Я счастлив использовать любой пакет R, но в основном я знаком с картами tmaps и ggplot2.

На этом этапе лучший подход, который я могу придумать, - это создать многоугольники для каждой цепочки и сложить их как прозрачные слои одного цвета. Я не думаю, что это было бы очень эффективно и не получилось бы создать очень красивую хороплету.

Другие ответы, которые я мог найти, были либо подсчетом очков (например, https://gis.stackexchange.com/questions/229066/counting-how-many-times-a-point-is-inside-a-set-of-crosscting-polygons-in-r) или для ГИС.

РЕДАКТИРОВАТЬ: Мне удалось создать радиус 30 км от каждого местоположения каждой цепи (используя rgeos gIntersection). Теперь у меня есть серия многоугольников.

Чтобы решить мой вопрос, мне нужно еще создать многоугольники, где:

  • Только один многоугольник покрывает территорию,
  • Два полигона покрывают территорию,
  • и т.п.

Чтобы попытаться наглядно представить это, я использовал ответ от https://gis.stackexchange.com/questions/229066/counting-how-many-times-a-point-is-inside-a-set-of-crosscting-polygons-in-r

введите описание изображения здесь

В связанном вопросе они пытаются подсчитать, сколько полигонов покрывают пронумерованные точки (изображение справа). Я пытаюсь создать изображение слева, где есть многоугольники без перекрытия (1), два перекрывающихся многоугольника (2) и так далее.


person Novo88    schedule 07.12.2020    source источник
comment
Технический вопрос: точки, вокруг которых вы хотите нарисовать многоугольники, отличаются от местоположений предприятий?   -  person Justin Landis    schedule 07.12.2020
comment
Привет, Джастин, я в основном хочу карту Новой Зеландии, где она раскрашена в зависимости от того, сколько точек быстрого питания в пределах 30 км от каждой точки. Я думаю, что практически это означает создание радиуса вокруг каждого бизнеса в каждой цепочке (я могу это сделать). Затем меняю цвет каждый раз, когда происходит перекрытие разных цепочек - я этого не понял. Я подумал, что может быть способ получше.   -  person Novo88    schedule 08.12.2020
comment
Судя по комментарию, вы хотите создать сетку и занести в таблицу удаленные рестораны в каждой ячейке. Здесь более уместны растровые методы.   -  person Brian Fisher    schedule 08.12.2020
comment
Привет, Брайан! Не могли бы вы указать мне, где я могу найти учебник или пример использования растровых методов?   -  person Novo88    schedule 08.12.2020
comment
Geocomputing в R Робина Лавлейса - хороший справочник geocompr.robinlovelace.net/spatial- class.html # raster-data   -  person Brian Fisher    schedule 08.12.2020
comment
Я разместил пример ниже. Было бы легче помочь, если вы включили некоторые образцы данных, чтобы мы могли видеть, с чем вы работаете.   -  person Brian Fisher    schedule 08.12.2020


Ответы (1)


Я думаю, что то, что вы пытаетесь достичь, лучше всего подойти с использованием растрового подхода, а не хлороплетения. Чтобы создать хорлоплет, вы определяете набор (обычно неправильных) многоугольников, суммируете что-то в каждом многоугольнике, а затем раскрашиваете многоугольники в зависимости от атрибутов. Это был бы хороший подход, если бы вы хотели сказать, сколько ресторанов быстрого питания есть в каждом штате или округе или сколько ресторанов быстрого питания на душу населения по штатам.
Однако из вашего описания вы ищете, сколько закуски быстрого питания в пределах установленного радиуса для всех точек. Это скорее вопрос о растре, поскольку вы можете представить свои данные в виде регулярной сетки.
Пакет raster - хорошее начало для работы с растровыми данными и хорошо работает с пакетом sf.

Вам нужно определить, какая плотность вам нужна для достижения вашей цели, а затем использовать ее для определения разрешения вашего растра. Как только вы это получите, вы можете использовать raster :: rasterize () для суммирования ваших (я предполагаю) точечных данных.

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

library(raster)
library(sf)

# create raster template with 30km resolution (I'm assuming your projection is in meters)
raster_template = raster((extent(points), 
                         resolution = 30000,
                         crs = st_crs(points)
                         )
# rasterize your point data
r = rasterize(points, raster_template, fun = "count")

Это должно создать сетку, в которой каждая ячейка имеет количество точек в каждой 30-километровой ячейке. После этого вы сможете построить растр, но, возможно, захотите либо обрезать, либо замаскировать его, чтобы просто показать части, которые находятся в Новой Зеландии.

person Brian Fisher    schedule 08.12.2020