অনিশ্চয়তার সাথে কীভাবে আজিমুথাল ডেটা ভিজ্যুয়ালাইজ করা যায়?


10

আমি প্রতিটি পয়েন্টে বিভিন্ন ধরণের অনিশ্চয়তার সাথে আজিমুথাল ডেটা দেখানোর একটি চিত্র তৈরির চেষ্টা করছি। 1991 সালের কাগজের এই পুরাতন স্কুলের চিত্রটি "বাউটি প্লট" ধারণাটি ধারণ করে যেটির জন্য আমি লক্ষ্য রেখেছি:

হিলহাউস এবং ওয়েলস, ১৯৯১ থেকে

আমি কীভাবে অনুরূপ চিত্র তৈরি করতে পারি তার কোনও পরামর্শ? আমি জিআইএস স্টাফের একটি আপেক্ষিক নবাগত, তবে আমার বিশ্ববিদ্যালয়ের মাধ্যমে আমার আর্কজিআইএসে অ্যাক্সেস রয়েছে। আমার অর্কের অভিজ্ঞতা ভূতাত্ত্বিক মানচিত্র তৈরির মধ্যে সীমাবদ্ধ হয়েছে, তাই আমাকে খুব বিদেশী কিছু করতে হয়নি।

আমি আর্ক এবং কিউজিআইএস-এ প্রতীকী বিকল্পগুলি দেখেছি কিন্তু এমন কোনও সেটিংস দেখিনি যা আমি ভেবেছিলাম কাজটি করবে। দ্রষ্টব্য যে এটি কেবল বাজির আকারের প্রতীকগুলি আজিমুথ দ্বারা ঘোরানোর বিষয় নয়; প্রতিটি "বাউটি" এর কৌনিক পরিসরটি আলাদা হওয়া দরকার।

আমি হিসাবে 'শক্তিশালী অন্তর্বর্তী' এবং হিসাবে 'কম অন্তর্বর্তী আমার আর দক্ষতা আমার পাইথন দক্ষতা রেট চাই তাই আমি একসাথে কিছু হ্যাকিং নিস্পৃহ নই matplotlibএবং mpl_toolkits.basemapবা প্রয়োজনে অনুরূপ লাইব্রেরি। তবে আমি ভেবেছিলাম যে জিআইএস-জমি সম্পর্কে আমি সবেমাত্র শুনিনি যে এরকম সহজ সমাধানের ক্ষেত্রে যদি রাস্তায় নামার আগে আমি এখানে পরামর্শ চাই।


প্রতিটি 'বাউটি' এর ডেটা কী? আমি ল্যাট / লম্বা / উচ্চতা ধরে নিচ্ছি, তবে অর্কগুলি কী? তারা বিন্দু সম্পর্কে মিরর করা হয়?
সিম্বামাঙ্গু

হ্যাঁ, প্রতিটি পয়েন্ট ল্যাট / লম্বা, আজিমুথ (ভূতত্ত্বের দিক থেকে "স্ট্রাইক"), এবং আজিমুথের মান সম্পর্কে কিছুটা অনিশ্চয়তা। উদাহরণস্বরূপ যদি আমার সাথে অ্যাজ = 110 এবং 10 ডিগ্রির একটি অনিশ্চয়তা রয়েছে তবে আমি এমন একটি 'বাউটি' চাই যা 100->120সমান পরিসীমা থেকে 180 ডিগ্রি দূরে এর মধ্যে কোণগুলিতে রঙ করে180->200
জরাসিক

উত্তর:


10

এর জন্য এক ধরণের "ক্ষেত্রের গণনা" দরকার যার মধ্যে মান গণনা করা (একটি অক্ষাংশ, দ্রাঘিমাংশ, কেন্দ্রীয় আজিমুথ, অনিশ্চয়তা এবং দূরত্বের উপর ভিত্তি করে) সংখ্যার পরিবর্তে বাউটি আকার হয়। কারণ এই জাতীয় ক্ষেত্র গণনা ক্ষমতা আরকভিউ ৩.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)
}

এটি এমন কোনও টেবিলে প্রয়োগ করার উদ্দেশ্যে যাঁর রেকর্ডগুলি আপনার কাছে ইতিমধ্যে কিছু আকারে থাকা উচিত: তাদের প্রত্যেকটির অবস্থান, অজিমুথ, অনিশ্চয়তা (প্রতিটি পক্ষের একটি কোণ হিসাবে) এবং ((চ্ছিকভাবে) কত বড় করা যায় তার ইঙ্গিত দেয় bowtie। আসুন পুরো গোলার্ধের পুরো অঞ্চল জুড়ে 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))

প্লটে আর

জিআইএসে আমদানির জন্য শেফফাইল আউটপুট তৈরি করতে, shapefilesপ্যাকেজটি ব্যবহার করুন :

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

এখন আপনি ফলাফলগুলি প্রজেক্ট করতে পারেন ইত্যাদি This (আপনি যদি 180 / -180 ডিগ্রি দ্রাঘিমাংশকে খুব সাবধানতার সাথে দেখেন তবে আপনি দেখতে পাবেন কোথায় এই জিআইএস এই লাইনটি অতিক্রম করে এমন ধনুকের বন্ধনগুলি ক্লিপ করেছে G এটি জিআইএসের সাথে একটি সাধারণ ত্রুটি; এটি কোডে কোনও বাগ প্রতিফলিত করে না R))

আর্কভিউতে প্লট করুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.