अनिश्चितताओं के साथ अज़ीमुथल डेटा की कल्पना कैसे करें?


10

मैं प्रत्येक बिंदु पर अनिश्चितताओं की एक अलग श्रेणी के साथ एक आंकड़ा दिखाने वाला एक डेटा बनाने की कोशिश कर रहा हूं। 1991 के पेपर का यह सुनहरा आंकड़ा "बोटी प्लॉट" के विचार को दर्शाता है जिसका मैं लक्ष्य रख रहा हूं:

हिलहाउस और वेल्स, 1991 से। "एरिज़ोना, कैलिफ़ोर्निया और नेवादा में लोअर मियोसीन पीच स्प्रिंग्स टफ के चुंबकीय क्षेत्र, प्रवाह दिशा और स्रोत क्षेत्र"

कैसे मैं एक समान आंकड़ा बना सकता है पर कोई सुझाव? मैं जीआईएस सामान में एक रिश्तेदार नौसिखिया हूं, लेकिन मेरे विश्वविद्यालय के माध्यम से आर्कजीआईएस तक मेरी पहुंच है। मेरा आर्क अनुभव भूगर्भीय मानचित्र बनाने तक सीमित रहा है, इसलिए मुझे बहुत अधिक विदेशी कुछ भी नहीं करना पड़ा है।

मैंने आर्क और QGIS में सिम्बॉलॉजी विकल्पों में चारों ओर पसरा हुआ है, लेकिन ऐसी कोई भी सेटिंग नहीं देखी है जो मुझे लगता है कि यह काम करेगा। ध्यान दें कि यह सिर्फ azimuth द्वारा आंत्र के आकार के प्रतीकों को घुमाने की बात नहीं है; प्रत्येक "बोटी" की कोणीय सीमा अलग होने की आवश्यकता है।

मैं, के रूप में 'मजबूत मध्यवर्ती' और 'के रूप में कम मध्यवर्ती' मेरी आर कौशल मेरी अजगर कौशल दर चाहते हैं तो मैं साथ साथ कुछ हैकिंग के खिलाफ नहीं हूँ matplotlibऔर mpl_toolkits.basemapया यदि आवश्यक हो तो इसी तरह के पुस्तकालयों। लेकिन मैंने सोचा कि मैं उस सड़क से नीचे जाने से पहले यहाँ पर सलाह लेना चाहता हूँ क्योंकि जीआईएस-भूमि से एक आसान समाधान है जिसके बारे में मैंने अभी नहीं सुना है।


प्रत्येक 'बॉल' के लिए डेटा क्या हैं? मैं लेट / लोन / एलीवेशन मानता हूं, लेकिन आर्क्स क्या हैं? क्या वे बिंदु के बारे में प्रतिबिंबित हैं?
Simbamangu

हाँ, प्रत्येक बिंदु अव्यक्त / लंबा है, अजीमथ (भूविज्ञान शब्दों में "हड़ताल"), साथ ही अजीमथ के मूल्य में कुछ अनिश्चितता है। उदाहरण के लिए अगर मेरे पास az = 110 है और 10 डिग्री की अनिश्चितता है, तो मैं 'बोटी' चाहता हूं, जिसमें कोणों के बीच के रंग 100->120समतुल्य हों, साथ ही 180 डिग्री दूर180->200
जुरासिक

जवाबों:


10

इसके लिए एक प्रकार की "फ़ील्ड गणना" की आवश्यकता होती है, जिसमें गणना की गई (एक अक्षांश, देशांतर, केंद्रीय अज़ीमथ, अनिश्चितता और दूरी के आधार पर) एक संख्या के बजाय बोटी आकार है। क्योंकि ऐसी फ़ील्ड गणना क्षमताओं को ArcView 3.x से ArcGIS 8.x में संक्रमण में बहुत अधिक कठिन बना दिया गया था और कभी भी पूरी तरह से बहाल नहीं किया गया है, आजकल हम पायथन, आर या जो भी इसके बजाय स्क्रिप्टिंग का उपयोग करते हैं: लेकिन विचार प्रक्रिया अभी भी है वही।

मैं काम कर रहे Rकोड के साथ वर्णन करूंगा । इसके मूल में एक धनुषी आकार की गणना है, जिसे हम एक फ़ंक्शन के रूप में संलग्न करते हैं। फ़ंक्शन वास्तव में बहुत सरल है: धनुष के सिरों पर दो आर्क उत्पन्न करने के लिए, इसे नियमित अंतराल (अज़ीमथ) पर एक अनुक्रम का पता लगाने की आवश्यकता है। इसके लिए प्रारंभ (लोन, लाट) और तय की गई दूरी के आधार पर किसी बिंदु के (लोन, लाट) निर्देशांक को खोजने की क्षमता की आवश्यकता होती है। यह सबरूटीन के साथ किया जाता है goto, जहां सभी भारी अंकगणित उठाने होते हैं। बाकी सिर्फ आवेदन करने gotoऔर फिर उसे लागू करने के लिए सब कुछ तैयार कर रहा है।

bowtie <- function(azimuth, delta, origin=c(0,0), radius=1, eps=1) {
  #
  # On entry:
  #   azimuth and delta are in degrees.
  #   azimuth is east of north; delta should be positive.
  #   origin is (lon, lat) in degrees.
  #   radius is in meters.
  #   eps is in degrees: it is the angular spacing between vertices.
  #
  # On exit:
  #   returns an n by 2 array of (lon, lat) coordinates describing a "bowtie" shape.
  #
  # NB: we work in radians throughout, making conversions from and to degrees at the
  #   entry and exit.
  #--------------------------------------------------------------------------------#
  if (eps <= 0) stop("eps must be positive")
  if (delta <= 0) stop ("delta must be positive")
  if (delta > 90) stop ("delta must be between 0 and 90")
  if (delta >= eps * 10^4) stop("eps is too small compared to delta")
  if (origin[2] > 90 || origin[2] < -90) stop("origin must be in lon-lat")
  a <- azimuth * pi/180; da <- delta * pi/180; de <- eps * pi/180 
  start <- origin * pi/180
  #
  # Precompute values for `goto`.
  #
  lon <- start[1]; lat <- start[2]
  lat.c <- cos(lat); lat.s <- sin(lat)
  radius.radians <- radius/6366710
  radius.c <- cos(radius.radians); radius.s <- sin(radius.radians) * lat.c
  #
  # Find the point at a distance of `radius` from the origin at a bearing of theta.
  # http://williams.best.vwh.net/avform.htm#Math
  #
  goto <- function(theta) {
    lat1 <- asin(lat1.s <- lat.s * radius.c + radius.s * cos(theta))
    dlon <- atan2(-sin(theta) * radius.s, radius.c - lat.s * lat1.s)
    lon1 <- lon - dlon + pi %% (2*pi) - pi
    c(lon1, lat1)
  }
  #
  # Compute the perimeter vertices.
  #
  n.vertices <- ceiling(2*da/de)
  bearings <- seq(from=a-da, to=a+da, length.out=n.vertices)
  t(cbind(start,
        sapply(bearings, goto),
          start,
        sapply(rev(bearings+pi), goto),
          start) * 180/pi)
}

यह एक ऐसी मेज पर लागू करने का इरादा है जिसका रिकॉर्ड आपके पास पहले से ही किसी न किसी रूप में होना चाहिए: उनमें से प्रत्येक स्थान, अज़ीमथ, अनिश्चितता (प्रत्येक पक्ष के कोण के रूप में) देता है, और (वैकल्पिक रूप से) कितना बड़ा बनाने का संकेत है। बो टाई। आइए उत्तरी गोलार्ध में 1,000 धनुषों को स्वस्थ करके ऐसी तालिका का अनुकरण करें:

n <- 1000
input <- data.frame(cbind(
  id = 1:n, 
  lon = runif(n, -180, 180),
  lat = asin(runif(n)) * 180/pi,
  azimuth = runif(n, 0, 360),
  delta = 90 * rbeta(n, 20, 70),
  radius = 10^7/90 * rgamma(n, 10, scale=2/10)
  ))

इस बिंदु पर, चीजें लगभग किसी भी क्षेत्र की गणना के समान सरल हैं। यह रहा:

  shapes <- as.data.frame(do.call(rbind, 
         by(input, input$id, 
            function(d) cbind(d$id, bowtie(d$azimuth, d$delta, c(d$lon, d$lat), d$radius, 1)))))

(समय परीक्षण से संकेत मिलता है कि Rप्रति सेकंड लगभग 25,000 कोने उत्पन्न हो सकते हैं। डिफ़ॉल्ट रूप से, अज़ीमुथ के प्रत्येक डिग्री के लिए एक शीर्ष है, जो epsतर्क के माध्यम से उपयोगकर्ता-निपटाने योग्य है bowtie।)

आप Rचेक के रूप में परिणाम का एक सरल प्लॉट बना सकते हैं :

colnames(shapes) <- c("id", "x", "y")
plot(shapes$x, shapes$y, type="n", xlab="Longitude", ylab="Latitude", main="Bowties")
temp <- by(shapes, shapes$id, function(d) lines(d$x, d$y, type="l", lwd=2, col=d$id))

आर में प्लॉट

GIS को आयात करने के लिए एक आकृति उत्पादन तैयार करने के लिए, shapefilesपैकेज का उपयोग करें :

require(shapefiles)
write.shapefile(convert.to.shapefile(shapes, input, "id", 5), "f:/temp/bowties", arcgis=T)

अब आप परिणामों को प्रोजेक्ट कर सकते हैं, आदि यह उदाहरण उत्तरी गोलार्ध के एक स्थैतिक प्रक्षेपण का उपयोग करता है और धनुष संबंध अनिश्चितता की मात्राओं द्वारा रंगीन होते हैं। (यदि आप 180 / -180 डिग्री देशांतर पर बहुत ध्यान से देखते हैं, तो आप देखेंगे कि इस जीआईएस ने धनुष संबंधों को कहां से हटा दिया है, इस रेखा को पार कर रहा है। यह जीआईएस के साथ एक सामान्य दोष है; यह Rकोड में बग को प्रतिबिंबित नहीं करता है।)

ArcView में प्लॉट

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.