您好,登錄后才能下訂單哦!
本篇內容介紹了“json素材操縱與圖層面板控制的方法是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
json地圖數據結構和變量操控:
library(jsonlite)
library(leaflet)
library(dplyr)
library(geojsonio)
library(rgdal)
library(sf)
library(ggplot2)
library(maptools)
library(plyr)
library(htmltools)
options(stringsAsFactors=FALSE,warn=FALSE)
#這樣的全局預設可以為你省卻很多麻煩,強烈建議
setwd("D:/R/mapdatanew/")
###1
以下數據導入json原生數據格式的三種方式:(2,3兩種是沒啥區別的,但是simplifyVector=FALSE參數設定與否則至關重要,他決定著輸入的json數據是經過平整的向量化數據還是原生的list數據,這里的leaflet需要原生格式的json數據)
geojson1<-fromJSON(url) #在同一層級對象長度一致,便會被自動視作數據框。
geojson2<-fromJSON(url,simplifyVector=FALSE) #不強轉化為數據框。
geojson3<-readLines(url,warn=FALSE,encoding="UTF-8")%>%paste(collapse="\n")%>%fromJSON(simplifyVector=FALSE)
設置隨機中非常必要,否則容易導致每次的效果都不一樣:
set.seed(1234)
#向list對象中添加數據(隨機數據)
geojson3$features<-lapply(geojson3$features,function(feat){
feat$properties$scale<-runif(1,0,10)
feat
})
#從list對象中讀取數據(主要讀取我們可做更改與擴展的行政區劃列表信息)
mydata<-ldply(geojson3$features,function(feat){
name<-feat$properties$name
id<- feat$properties$id
scale<-as.numeric(feat$properties$scale)
mydata<-data.frame(name,id,scale)
})
# Default styles for all features
#it has higher precedence compare with the style in a function of GeoJSON
geojson3$style=list(weight=1,color="#555555",opacity=1,fillOpacity=0.8)
# Color by scale using quantiles
pal<-colorQuantile("Greens",mydata$scale)
# Add a properties$style list to each feature
geojson3$features <- lapply(geojson3$features, function(feat) {
feat$properties$style<-list(
fillColor=pal(feat$properties$scale)
)
feat
})
關于屬性設置的三個優先級:
按照由高到低的順序排列為:
feature-specific styles #(也就是設置在 simple featrue的style)
the top-level style object #(設置在features中的style)
style-related arguments passed to the function #(設置在GeoJSON內的各種參數)
#這是通過增加地圖圖層來進行圖層控制的簡單案例:
leaflet()%>%
addTiles(group ="OSM (default)")%>%
setView(lng=116.435889,lat=39.932642,zoom=8)%>%
addGeoJSON(geojson3,group="GeoJSON")%>%
addProviderTiles(providers$CartoDB.Positron,group="CartoDB")%>%
addProviderTiles(providers$Stamen.TonerLines,options=providerTileOptions(opacity=0.35),group="TonerLines")%>%
addProviderTiles(providers$Stamen.TonerLabels,group="TonerLabels")%>%
addLayersControl(
baseGroups = c("OSM (default)", "CartoDB", "TonerLines","TonerLabels"),
overlayGroups = c("GeoJSON"),
options=layersControlOptions(collapsed = FALSE)
)
以下這段代碼是之前leaflet系列教程的線圖篇里面的案例,這里剛好應用一下:
data<-read.table("D:/R/File/subwayline.txt",header=TRUE,stringsAsFactors = FALSE)
data$size<-runif(47,10,25)
data$Type<-as.factor(data$Type)
data1<-filter(data,Type=="NO1")
data2<-filter(data,Type=="NO5")
pal <- colorFactor(topo.colors(2),data$Type)
leaflet()%>%
addTiles()%>%
addPolylines(data=data1,~lon,~lat,color="blue")%>%
addPolylines(data=data2,~lon,~lat,color="green")%>%
addCircleMarkers(data=data,~lon, ~lat,popup = ~address,radius=~size,group=~Type)
這是一個高度綜合的案例,包含底圖圖層的多分類控制;數據圖層的多分類控制以及點線面三種數據圖層的綜合運用。
leaflet()%>%
addTiles(group ="OSM (default)")%>%
setView(lng=116.435889,lat=39.932642,zoom=8)%>%
addGeoJSON(geojson3,group="GeoJSON")%>%
addProviderTiles(providers$CartoDB.Positron,group="CartoDB")%>%
addProviderTiles(providers$Stamen.TonerLines,options=providerTileOptions(opacity=0.35),group="TonerLines")%>%
addProviderTiles(providers$Stamen.TonerLabels,group="TonerLabels")%>%
addPolylines(data=data1,~lon,~lat,color="red",group="line1")%>%
addPolylines(data=data2,~lon,~lat,color="orange",group="line2")%>%
addCircleMarkers(data=data,~lon, ~lat,popup = ~address,radius=~size,group="address",color = "#1843F9")%>%
addLayersControl(
baseGroups = c("OSM (default)", "CartoDB", "TonerLines","TonerLabels"),
overlayGroups = c("GeoJSON","line1","line2","address"),
options=layersControlOptions(collapsed = FALSE)
)
“json素材操縱與圖層面板控制的方法是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。