2015-12-28 3 views
9

वर्तमान में मैं निम्नलिखित कोड का उपयोग कर देशों के बीच एक सीधी रेखा खींचना कर सकती हूं:आर के पत्रक पैकेज का उपयोग कर घुमावदार उड़ान पथ को जोड़ने

library(leaflet) 
leaflet() %>% addTiles() %>% addPolylines(lat=c(38.8833, 35.00), lng=c(-77.0167, 103.00)) 

enter image description here

क्या मैं उत्पादन करने के लिए कोशिश कर रहा हूँ एक अधिक है यथार्थवादी उड़ान मार्ग, जहां सीधी रेखा वास्तव में घुमावदार है। इस के समान:

Curved Path Example

इस सवाल के लिए, मैं Leaflet पैकेज के भीतर जवाब तैयार करना चाहते हैं। कोई भी सहायताकाफी प्रशंसनीय होगी।

उत्तर

10

mrub पर निम्नलिखित, बस वस्तु आप पत्रक को gcIntermediate से प्राप्त पारित । इस तरह कुछ:

library(leaflet) 
library(geosphere) 
gcIntermediate(c(5,52), c(-120,37), 
       n=100, 
       addStartEnd=TRUE, 
       sp=TRUE) %>% 
leaflet() %>% 
addTiles() %>% 
addPolylines() 
+0

शानदार! आप gcIntermediate को पुस्तिका में पास करने के बारे में कैसे जानते थे? –

+3

जीसीइंटरडिएट द्वारा लौटाए गए ऑब्जेक्ट का वर्ग "स्पैटियललाइन" है। और पुस्तिका उस वर्ग को पसंद करती है (या कोई अन्य "स्थानिक ..." बहुत अधिक :-) – einar

1

आप कुछ इस तरह की तलाश में हैं: समारोह gcIntermediate() साथ How to draw great circles जवाब में, पैकेज geosphere प्रयोग किया जाता है:

inter <- gcIntermediate(c(lon_1, lat_1), c(lon_2, lat_2), n=50, addStartEnd=TRUE) 
lines(inter) 
+1

मैं कुछ है कि 'Leaflet' पैकेज के भीतर रहता है की तलाश में हूँ। क्या उस समारोह को 'पत्रक' के अंदर बुलाया जा सकता है? –

+0

मुझे नहीं पता था कि आप विशेष रूप से 'पुस्तिका' का उपयोग करना चाहते थे। इसके लिए आप पुस्तिका पुस्तिका [arc] (https://github.com/springmeyer/arc.js) का उपयोग कर सकते हैं। – mrub

+0

क्या आप उस प्लगइन का उपयोग आर में उपयोग कर सकते हैं? ऐसा लगता है कि आपके द्वारा प्रदान की गई प्लगइन केवल जावास्क्रिप्ट के लिए है। –

2

ईनार द्वारा पोस्ट की गई विधि से एक से अधिक पंक्तियां दिखाने की कोशिश करते समय, मैं दोनों को एक साथ नहीं दिखा सका। खुदाई के बाद, मैं this और this पदों पर आया। यहां दो अलग-अलग लाइनों के लिए एक छोटा कोड है।

library(geosphere) 
library(leaflet) 
library(dplyr) 

lat_ny <- 40.73 
lng_ny <- -73.9 
lat_del <- 28.63 
lng_del <- 77.21 
lng_ca <- -121.6406 
lat_ca <- 39.16414 

inter1 <- gcIntermediate(c(lng_ny, lat_ny), c(lng_del, lat_del), n=10, addStartEnd=TRUE, sp = TRUE, breakAtDateLine = TRUE) 
lines(inter1) 

inter2 <- gcIntermediate(c(lng_ca, lat_ca), c(lng_del, lat_del), n=10, addStartEnd=TRUE, sp = TRUE, breakAtDateLine = TRUE) 
lines(inter2) 

inters <- c(inter1,inter2) 

ll0 <- lapply(inters , function(x) `@`(x , "lines")) 
ll1 <- lapply(unlist(ll0) , function(y) `@`(y,"Lines")) 
Sl <- SpatialLines(list(Lines(unlist(ll1) , ID = 1))) 

leaflet(Sl) %>% addTiles() %>% addPolylines() 

हार्डकोड अक्षांश और देशांतर एक अच्छा विचार नहीं है, लेकिन जैसा कि मैंने केवल जगह शीर्ष 5 कनेक्ट लेने के लिए किया था, मैं एक सूची का अनुक्रमण के लिए ज्यादा समय समर्पित नहीं किया। इसके अलावा मैं अभी भी जांच कर रहा हूं कि यह चमकदार के साथ एकीकृत है या नहीं।

Output

संबंधित मुद्दे