Изменение кластеризации маркеров по уровню масштабирования в Shiny / Leaflet / R

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

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

При низких уровнях масштабирования я хочу объединить эти точки в количество по состоянию (соответствующий размер / цвет символов, указывающий на более высокую интенсивность, с точкой, расположенной в центре центра тяжести состояния). при немного более высоких уровнях масштабирования они будут разделены на счетчики меньшими полигонами. с еще большим масштабом, но с меньшими полигонами. Если без агрегирования количество точек на карте будет меньше ~ 500, тогда просто нанесите точки.

Эти многоугольники уже определены, и каждая точка имеет в своих данных идентификатор многоугольника для каждого многоугольника, под которым она находится.

Так как точки изначально располагаются в пределах соответствующих полигонов случайным образом, фактическое распределение точек внутри полигонов не имеет значения. Или, скорее, любое агрегирование, которое игнорирует, в каком многоугольнике были нанесены точки, уничтожит информацию. По этой причине я не могу использовать markercluster (по крайней мере, с теми параметрами, которые я видел. Если есть простые средства для агрегирования таким образом, который я ищу, сообщите мне)

По разным причинам (я не программист javascript, я программист R) я работаю в рамках пакета листовок в R. Есть ли средство, с помощью которого я могу изменить уровень агрегации в зависимости от увеличения таким образом ?

Я собрал игрушечный набор данных, содержащий относительно небольшое подмножество (1 объект, 3 штата, ~ 10 000 наблюдений) вместе с центроидами для участков переписи и округов для этих штатов.

http://s000.tinyupload.com/index.php?file_id=00048836337627834343


person Faydey    schedule 08.11.2015    source источник
comment
уже есть возможность кластеризации по масштабированию, если пользователь cluster=clusterOptions(). Вы пытаетесь сделать больше?   -  person Rorschach    schedule 08.11.2015
comment
Да ... Как объяснялось в параграфе 5, я не могу использовать существующий кластер с помощью масштабирования, потому что он стирает / игнорирует границы многоугольника. В какой многоугольник попала конкретная точка, это действительно все, что имеет значение ... стирание этих границ или группирование точек, случайно упавших рядом друг с другом, является нежелательным поведением.   -  person Faydey    schedule 08.11.2015
comment
Не могли бы вы дать набор данных об игрушке с несколькими точками, чтобы мы могли поиграть?   -  person NicE    schedule 08.11.2015
comment
Я собрал одну. ~ 10 тыс. Наблюдений в Калифорнии, Неваде и Аризоне.   -  person Faydey    schedule 09.11.2015


Ответы (1)


Это не совсем ответ, но вряд ли он уместится в комментарии.

Вы хотите показать агрегированные данные (количество точек / маркеров?) По заранее определенным географическим областям, при этом эти области объединяются при более низких уровнях масштабирования (скажем, это может быть по городам, затем по округам, штатам и т. Д.).

Даже в JavaScript мне не известно о каких-либо готовых решениях для этого варианта использования. Есть несколько возможных обходных путей, но я не уверен, что они легко выполнимы в R.

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

К сожалению, это означает, что вы не получите анимацию и отображение покрытия из MarkerCluster.

Возможно, вас заинтересует эта ветка [вопрос] Построение кластеров в зависимости от географической единицы # 521 со страницы проблем Leaflet.markercluster на GitHub. Вариант использования чем-то похож, и вы можете увидеть несколько примеров реализаций, но, к сожалению, он не дал ни одного общего и надежного решения.

person ghybs    schedule 15.11.2015
comment
Спасибо за ваш вклад. Мне нравится результат в их ссылке, но я не уверен, как я могу реализовать это в R. Я согласен, что это сложная идея. У меня была идея, что я сделаю агрегацию перед добавлением на карту на различных уровнях агрегации, а затем добавлю на карту (в зависимости от уровня масштабирования) только те точки, которые есть на карте в этот момент времени. (ну, в идеале, те, которые есть на карте + немного окружающей области, затем перерисовываются только тогда, когда границы карты выходят за пределы этой окружающей области.) Я все еще работаю над этим. Возникли странные ошибки. - person Faydey; 25.11.2015