2016-10-26 8 views
1

У меня есть карта GeoJSON, которая отлично отображает листы и открытую уличную карту из Rstudio IDE локально, однако на карте не отображаются функции и свойства (встроенные в файл jeojson) при нажатии в разных регионах карты. При размещении файла в github github автоматически подбирает его и реагирует на клики - как видно на рисунке. Посмотрел информацию в справочных документах для R и не смог найти никакой информации.R geojson дисплей функций с листочкой

enter image description here

leaflet() %>% 
     addProviderTiles("Hydda.Full") %>% 
     setView(lng = -77.03687, lat = 38.90719, zoom = 12) %>% 
     addGeoJSON(topoData, weight = 4, color = "red",fill = TRUE) 
+0

любой шанс, что вы могли бы поделиться некоторыми своими данными, чтобы сделать пример воспроизводимым? – epo3

+0

Я думаю, вам нужно добавить 'popup = ...' в ваш вызов 'addGeoJSON()'. – TimSalabim

+0

epo3 - файл слишком большой, чтобы делиться здесь. Но вы можете искать в сети для любого файла geojson (их много), вы можете использовать это для репликации. TimSalabim - можете ли вы быть более конкретным? – Antex

ответ

1

Вот воспроизводимый пример, который производит что-то подобное к изображению:

library(mapview) 
library(geojsonio) 

## write data to disk as GeoJSON 
geojson_write(breweries91, file = "breweries91.geojson") 

## read back into R as Spatial* object 
dat <- geojson_read("breweries91.geojson", what = "sp") 

## plot using mapview 
mapview(dat) 

## or use leaflet with mapview::popupTable 
leaflet() %>% 
    addProviderTiles("Hydda.Full") %>% 
    addCircleMarkers(data = dat, popup = popupTable(dat)) 

Очевидно, что письменность в GeoJSON части необходимо только, чтобы показать правильную стратегию импорта, чтобы получить popupTable совместимый структура данных. В общем, при работе с пространственными данными я предлагаю использовать правильные пространственные классы для R, предоставляемые пакетами sp, а теперь также sf для векторных данных и raster для растровых данных.

+0

TimSalabim - So исходный вопрос заключается в том, чтобы отобразить интерактивную карту с помощью буклета с «фреймом данных geojson».Встроенные данные в файле geojson должны появляться по щелчку мыши или мыши, как в случае с размещением на github. Пример, который вы мне дали, преобразует geojson df в пространственный df. Листовка не читает пространственный df со следующей ошибкой «не знает, как получить данные о местоположении из объекта класса SpatialPolygonsDataFrame». В то время как мне нравится пример mapview, это не решает проблему, почему листочка + GeoJson не выдает всплывающие подсказки из RStudio IDE, когда она размещается в github. – Antex

+0

ОК, точнее, в ** листовке ** нет способа по умолчанию для отображения всплывающих окон для любого из методов 'add *'. Пользователь должен предоставить подходящую строку символов или строку html аргументу 'popup = ...'. На самом деле функция 'addGeoJSON' даже не имеет всплывающего аргумента. У Github, скорее всего, есть сценарий, работающий в фоновом режиме, который при реализации данных в формате geojson будет отображаться определенным образом и предоставлять данные во всплывающих окнах. Но это не имеет никакого отношения к пакету ** ** **. Предполагая, что это будет одно и то же, немного оптимистично. – TimSalabim

+0

Кроме того, вы должны указать код, выделяющий, как вы читаете данные в R, так как это действительно важный бит. Почему чтение его как пространственного * DF не подходит? Вы упомянули ошибку, описанную выше, в приведенном выше примере? – TimSalabim

4

Есть 3 способа, которыми вы можете это сделать.

1) У вас есть свойство под названием «всплывающее окно» для каждой функции вашего геойсона. Если есть одна листовка будет связывать всплывающее окно для этой функции с содержимым, равным значению «всплывающего окна» свойство https://github.com/rstudio/leaflet/blob/master/javascript/src/methods.js#L493

Проблема заключается в том, если вы не один, и большинство GeoJSON не будет иметь 'popup' свойство, то вы должны добавить на стороне R. т.е. преобразовать строку geojson в список и итеративно добавить всплывающее свойство к каждой функции и преобразовать ее обратно в строку geojson.

2) Преобразование geojson в sp-объект в R и использование всплывающих функций add (PolyLines/Polygons/Markers) и т. Д. Это не плохой вариант, так как обработка sp-объектов более элегантна, чем geojson string или список.

Demo http://rpubs.com/bhaskarvk/leaflet-geojson (У меня нет всплывающих окон, там есть только ярлык, но вы получаете идею).

3) Среднее основание, используйте https://github.com/bhaskarvk/leaflet.extras addGeoJsonChoropleth(), который позволяет указать любое свойство или пользовательский JS-код для определения вашего всплывающего содержимого. , например. http://rpubs.com/bhaskarvk/geojson-choropleth

Мне нравится 3, это лучшее, что позволяет мне добавить GeoJSON без каких-либо модификаций или преобразования, требуемых на стороне R. Единственная проблема заключается в том, что окраска выполняется на стороне JS, и она использует поставляемые поддоны chroma.js, в то время как 1 и 2 позволяют использовать технику окраски, которая согласуется с другими методами добавления (Shape).

+0

Bhaskar - спасибо за подробный ответ. Три варианта, которые вы предоставили, являются полезными и будут содержать информацию о том, как добавить всплывающее окно. Тем не менее, я искал следующее: geojson поставляется со следующей встроенной информацией: {«type»: «Feature», «properties»: {«OBJECTID»: 1, «WARD»: 8, «NAME»: Ward 8 "," REP_NAME ":" "," WEB_URL ":" "," REP_PHONE ":" ", - есть способ извлечь эту информацию и отобразить ее как всплывающее окно, используя собственный графический элемент листовки (например, addMarker) ? Кажется, что github делает именно это. – Antex

+0

Не уверен, что вы извлекли и отобразили контент из геоинформационных данных в этом примере rpubs.com/bhaskarvk/leaflet-weather. Если это то, что я ищу, оцените, если вы можете поделиться этим кодом. Еще раз спасибо. – Antex

+0

Если я правильно прочитал, вы хотите отобразить все свойства функции в таблице HTML в качестве всплывающего окна? Это не должно быть сложно, но вам нужно будет построить таблицу HTML самостоятельно, либо в R, используя подход 1 или 2, либо в подходе к использованию Javascript 3. Пример погоды использует данные из data.frame, полученные как результат вызова API. Если вы можете поделиться своим geojson, я могу показать вам, как это сделать, спасибо –