リアルタイムデータで地理的ダッシュボードを構築する方法

この投稿では、 DisplayrPlotly、およびRを使用してインタラクティブな地理ダッシュボードを構築する方法を紹介します 特に興味深いのは、リアルタイムで軍用機の位置を追跡することです。 これを行うには、2つの異なるソース(空軍のサイズと航空機の位置のリアルタイム追跡に基づく地域)からデータを取得します。 観測パネルには、動的データが2つの方法で表示されます。 地域陰影 (国内の空軍の数を示すため)とマーカーポイント (航空機の位置の場合)です。 次に、これらすべてのデータを正確かつ美しく表示するマップを作成します。



ネットワークから表形式のデータを読み取る



空軍の規模に応じて、地図上の各国を色分けします。 これを行うには、各国の航空機のリストが必要です。 幸いなことに、ウィキペディアは常に私たちのサービスにあり、まさにあなたが必要とするものがあります( こちら )。 以下のコードは、データを読み取り、便利なテーブルに表示するためにデータを消去します。



library(httr) library(XML) #    URL url <- "https://en.wikipedia.org/wiki/List_of_countries_by_level_of_military_equipment#List" r <- GET(url) airforces <- readHTMLTable(doc = content(r, "text"))[[2]] #    airforces <- airforces[-1, c("Country[note 1]", "Military aircraft[note 3]")] colnames(airforces) <- c("Country", "MilitaryAircraft") remove.bracket.content <- function(s) { return(gsub("\\[.+\\]", "", s)) } airforces <- data.frame(apply(airforces, 2, remove.bracket.content)) airforces$MilitaryAircraft <- as.numeric(gsub(",", "", airforces$MilitaryAircraft)) airforces
      
      





世界中のリアルタイムデータプーリング



上記と比較して、2番目のデータソースはより動的です。 私はADS-Bを使用します。これは、世界中のフライトに関するリアルタイム情報を提供します。 すべての軍事作戦が極秘ではありません。 実際、一部の軍用機は、パブリックドメインでの位置を伝達しています。



この情報に一致するように、軍用機に関する情報を含むJSONオブジェクトを取得するURL作成します (JSONはデータ交換のための柔軟なテキスト形式です)。 次に、 data.frameの JSONを読み取ります。



 library(jsonlite) url <- "http://public-api.adsbexchange.com/VirtualRadar/AircraftList.json?" url <- paste0(url, "fMilQ=TRUE") positions <- fromJSON(url)$acList if (length(positions) != 0) { positions <- positions[positions$Type != "TEST", ] positions <- positions[!is.na(positions$Lat), ] } positions
      
      





地図上の国を着色



以下のコードは、世界のプロットマップを作成します。 国は空軍のサイズに応じて色分けされ、スケールは凡例に示されています。 プロット用語では各マップレイヤーはトレースと呼ばれます



 library(plotly) library(flipFormat) #      g <- list(scope = "world", showframe = FALSE, showcoastlines = TRUE, projection = list(type = 'mercator'), lonaxis = list(range = c(-140, 179)), lataxis = list(range = c(-55, 70)), resolution = 50) #   #      p <- plot_geo(airforces) add_trace(data = airforces, name = "Airforce", z = ~MilitaryAircraft, color = ~MilitaryAircraft, colors = 'Blues', locations = ~Country, marker = list(line = list(color = toRGB("grey"), width = 0.5)), showscale = TRUE, locationmode = "country names", colorbar = list(title = 'Airforce', separatethousands = TRUE)) config(displayModeBar = F) layout(geo = g, margin = list(l=0, r=0, t=0, b=0, pad=0), paper_bgcolor = 'transparent')
      
      





航空機マーカーの追加



最後に、別のトレースとして、航空機の位置を示すマーカーを追加します。 速度が200ノット未満、高さが610メートル未満の場合は、さまざまな色を使用します。 飛行機に関する詳細情報はツールヒントにあります。



 aircolors = rep("airborne", nrow(positions)) #       aircolors[positions$Spd < 200 & positions$Alt < 2000] <- "ground/approach" hovertext = paste0("Operator:", positions$Op, "\nModel:", positions$Mdl, "\nAltitide(ft):", sapply(positions$Alt, FormatAsReal)) hoverinfo = rep("all", nrow(positions)) p = add_trace(p, data = positions, x = positions$Long, y = positions$Lat, color = aircolors, hovertext = hovertext, showlegend = FALSE)
      
      





これが最終結果です。



いくつかの仕上げ



上記のマップには必要なものがすべて表示されていますが、より便利で美しいものにするのは簡単です。 Displayrでは、テキストとグラフィックの注釈と背景を切り替えるコントロール追加できます 。 以下は、ダッシュボードの最終バージョンへのリンクとスクリーンショットです。










All Articles