রাস্টার প্রসেসিং ব্যবহার করে বিন্দুটি ঘিরে রয়েছে কিনা তা নির্ধারণ করা হচ্ছে


9

আমি একটি প্রাকৃতিক ঝুঁকিপূর্ণ মডেলের জন্য বর্তমানে অত্যন্ত চিকিত্সা ভেক্টর / পাইথন প্রক্রিয়াটিকে উন্নত করার চেষ্টা করছি। এই মুহুর্তে আমাদের কাছে একটি দীর্ঘ স্ক্রিপ্ট রয়েছে যা নির্ধারিত করার জন্য একটি নির্দিষ্ট বিন্দু থেকে দূরত্ব / ভারিং লাইন উত্পন্ন করে:

  1. বহুভুজের ধরণ যা এটি ছেদ করে (যেমন বন, ঘাস, জলাভূমি ইত্যাদি)
  2. বহুভুজের দূরত্ব
  3. এটি কতটা 'ঘিরে' রয়েছে তা নির্ধারণ করতে এই লাইনের কতগুলি বহুভুজকে ছেদ করে।

আরও অনেক কিছু জড়িত রয়েছে তবে এটির মূল বক্তব্য। আমি এটির উন্নতি করার একটি উপায় সন্ধান করার চেষ্টা করছি এবং বর্তমানে ৩ য় অংশে স্ট্যাম্পড করছি 200পয়েন্টএ চারদিকে রয়েছে, পয়েন্টবি চারদিকে কেবল ~ 50%

সুতরাং আমার সংযুক্ত ইমেজে, আমি পয়েন্ট এটিকে আমার বহুভুজ দ্বারা সম্পূর্ণরূপে ঘিরে থাকায় এটি বিন্দু বিয়ের চেয়ে বেশি ঝুঁকির হিসাবে চিহ্নিত হওয়ার জন্য চাই। এটি প্রায় 13 মিলিয়ন পয়েন্টের জন্য পুনরাবৃত্তি করা তাই কোনও ছোট কাজ নয় এবং আমার স্ক্রিপ্টটি চালানোর পরিবর্তে মানগুলি প্রাপ্ত করার জন্য আমার কাছে একটি পৃষ্ঠ রয়েছে। আমি ভাবছি এটি করার জন্য হাইড্রোলজি সরঞ্জামগুলির মূল্য বা ব্যয়-পথের একটি ভিন্নতা আছে তবে আমি আমার মাথাটি এটিকে ঘিরে ফেলতে পারি না।

আমি কিভাবে এই সম্পর্কে যেতে পারেন?


1
দেখানো টাস্কটি আপ তবে 13 মিলিয়ন পয়েন্ট প্রয়োগ করার সময় যথেষ্ট সহায়তার প্রয়োজন হবে! যার চারপাশে সহজেই পরীক্ষা করা সহজ পয়েন্টগুলি কীভাবে ঝাঁকানো যায় সে সম্পর্কে প্রথমে চিন্তা করুন, যেমন বহুভুজগুলির বাহ্যিক অঞ্চলে অবস্থিত পয়েন্টগুলি (যেগুলি) 200 মিটারের চেয়ে কম ব্যাসযুক্ত রয়েছে: এটি "এ" কে বাতিল করতে পারে তবে সম্ভবত "বি" কে নয়। "বি" কে কখনই অস্বীকার করা হবে না কারণ এর দর্শনগুলি (বহুভুজ অঞ্চলগুলিকে খুব "উঁচু" অবস্থান হিসাবে দেখা আটকাচ্ছে) এটি বি এর অবস্থান থেকে 200 মিটারেরও বেশি প্রসারিত।
হুড়হুড়ি করে

একটি ভাল পয়েন্ট @ শুভ। অবশ্যই আমি প্রকৃতির কাছাকাছি প্রক্রিয়াজাত মোট পয়েন্টগুলির সংখ্যা কমিয়ে আনতে সক্ষম এবং বাস্তবে অনন্য ল্যাট-ল্যাংসগুলিও (আমি জিওকোডড ঠিকানাগুলি বলছি যাতে অ্যাপার্টমেন্ট ব্লকগুলি 50 পয়েন্ট থেকে কমিয়ে 1 করা যেতে পারে) তবে আমি এখনও সন্ধান করব কয়েক মিলিয়ন লোকেশন। প্রয়োজনে আমি কেবল ওভারল্যাপিং ব্লকগুলিতে সমস্ত কিছু ভাঙ্গতে পারি। দেখেছে তদন্ত করবে। ধন্যবাদ!
লোজ

আরেকটি দ্রুত স্ক্রিন হ'ল একটি বহুবর্ষসংক্রান্ত প্রতিবেশ ব্যবহার করে আপনার বহুভুজগুলির 0-1 ইন্ডিকেটর গ্রিডের কেন্দ্রিক গড় গণনা করা: যে কোনও কক্ষে যেখানে এর মান 1 হয় সেখানে আপনার বহুভুজ পুরো ঘেরটি ব্যাসার্ধের বাইরে থাকে, সেখান থেকে তাদের চারপাশে আবদ্ধ হওয়া আবশ্যক। এটি একটি দ্রুত গণনা এবং আপনার বহুগুণগুলি কোথায় রয়েছে এবং আপনার বহুভুজগুলি কীভাবে সংশ্লেষিত হয়েছে তার উপর নির্ভর করে আপনার পয়েন্টের বিস্তৃত অংশকে আগাছা ফেলে দিতে পারে। আপনি প্রথমে 25 থেকে 50 মিটার বা তার আশেপাশের জায়গাগুলির মতো কোনও মোটা রেজোলিউশনে আপনার গ্রিডটি পুনরায় মডেল করে প্রাথমিক স্ক্রিনিংয়ের গতি বাড়িয়ে দিতে পারেন।
হোবার

আর একটি সম্ভাব্য প্রসেসিং পদক্ষেপ বা প্রাক-প্রক্রিয়াজাতকরণ পদক্ষেপটি হ'ল পয়েন্টগুলির আশেপাশের প্রতিবেশীর পরিসংখ্যানগুলির তুলনা করে আপনার ডেটাসেটের একটি রাস্টারাইজড সংস্করণ দিয়ে আপনার পয়েন্টগুলি পাস করা। আপনি পয়েন্টের আশেপাশের পরিসংখ্যান হিসাবে আপনার 'ঘেরাও' প্রয়োজনীয়তাটি দূরে সরিয়ে ফেলতে পারেন, বা 'চারপাশে' আবশ্যক হলে আপনি রাস্টার পাড়া ব্যবহার করে 'সহজ' পয়েন্টগুলি (অর্থাত্ ঝুঁকিপূর্ণ অঞ্চলের মধ্যে একটি পয়েন্ট) খুঁজে পেতে পারেন, সমস্ত পয়েন্ট থেকে 'সহজ' পয়েন্টগুলি বিশ্লেষণ করুন, তারপরে বাকী পয়েন্টগুলির জন্য ভেক্টর বিশ্লেষণ ব্যবহার করুন।
ডিপিয়ার্স

বাহ আমার জিজ্ঞাসা অবশ্যই অনেক আগ্রহ তৈরি করেছে! পরামর্শ এবং মতামত অবদানকারী সবাইকে ধন্যবাদ। আমি তাদের সকলের মতোই আমার উপায়ে কাজ করতে যাচ্ছি এবং প্রতিক্রিয়া জানাতে চাই তবে তারা সবাই আমার পরীক্ষার জন্য কিছুটা সময় নিবে। আমি প্রতিশ্রুতি আমি শেষ পর্যন্ত সাড়া দেব!
লোজ

উত্তর:


6

একটি ব্যয়-পথের সমাধান রয়েছে তবে আপনাকে এটি নিজের কোড করতে হবে। প্রশ্নের চিত্রের প্রতিটি পয়েন্টে প্রয়োগ করার সময় এটি দেখতে কেমন লাগবে তা এখানে (গণনার গতি বাড়ানোর জন্য কিছুটা মোটা করা):

চিত্র 0

কৃষ্ণকোষগুলি আশেপাশের বহুভুজগুলির অংশ। হালকা কমলা (সংক্ষিপ্ত) থেকে নীল (দীর্ঘ) মাধ্যমে রঙগুলি, সর্বাধিক দূরত্ব (সর্বাধিক 50 কোষের বাইরে) দেখায় যা বহুভুজ কোষগুলি বাধা না দিয়ে লাইন অফ দর্শনীয় ট্র্যাভারসাল দ্বারা পৌঁছানো যায়। (এই চিত্রের সীমার বাইরে যে কোনও ঘরকে বহুভুজগুলির অংশ হিসাবে বিবেচনা করা হয়))

আসুন এটি করার একটি কার্যকরী উপায় নিয়ে ডেটাটির উপস্থাপক উপস্থাপনা ব্যবহার করে আলোচনা করি। এই উপস্থাপনায় সমস্ত "পার্শ্ববর্তী" বহুভুজ কোষের, বলুন, ননজারো মান এবং যে কোনও ঘর যা "মাধ্যমে দেখা যায়" তার শূন্য মান হবে।

পদক্ষেপ 1: একটি প্রতিবেশী ডেটা কাঠামো প্রাক্কলন করা

আপনাকে প্রথমে সিদ্ধান্ত নিতে হবে যে একটি কক্ষের জন্য অন্য কোনও ব্লককে কী বোঝায়। আমি খুঁজে পেতে পারি এমন সবচেয়ে নিখুঁত নিয়মগুলির মধ্যে একটি হ'ল: সারি এবং কলামগুলির জন্য অবিচ্ছেদ্য স্থানাঙ্কগুলি ব্যবহার করে (এবং বর্গক্ষেত্রগুলি অনুমান করে), আসুন বিবেচনা করা যাক কোন কোষগুলি সেল (i, j) কে অরিজিনের (0,0) ভিউ থেকে আটকাতে পারে। আমি ঘরটি (i ', j') মনোনীত করি যা লাইন বিভাগের নিকটবর্তী (i, j) থেকে (0,0) সংযুক্ত হয় এমন সমস্ত কোষের মধ্যে যার স্থানাঙ্কগুলি i এবং j এর চেয়ে বেশি 1 এর চেয়ে আলাদা হয় কারণ এটি সর্বদা নয় একটি অনন্য সমাধান উত্পন্ন করুন (উদাহরণস্বরূপ, (i, j) = (1,2) উভয় (0,1) এবং (1,1) সমানভাবে ভাল কাজ করবে), সম্পর্কগুলি সমাধানের জন্য কিছু উপায়ের প্রয়োজন। গ্রিডগুলির মধ্যে বিজ্ঞপ্তি প্রতিবেশগুলির প্রতিসাম্যগুলির প্রতি সম্মান জানাতে সম্পর্কের এই রেজোলিউশনটির জন্য চমৎকার হবে: স্থানাঙ্কগুলিকে সমন্বয় করা বা স্যুইচিং করা এই পাড়াগুলি সংরক্ষণ করে। সুতরাং আমরা সিদ্ধান্ত নিতে পারি কোন কোষগুলি ব্লক করে (i,

এই বিধিটি চিত্রিত করে নীচে লেখা প্রোটোটাইপ কোড R। এই কোডটি এমন একটি ডেটা কাঠামো দেয় যা গ্রিডে স্বেচ্ছাসেবী কোষগুলির "চারপাশে" নির্ধারণের জন্য সুবিধাজনক হবে।

screen <- function(k=1) {
  #
  # Returns a data structure:
  #   $offset is an array of offsets
  #   $screened is a parallel array of screened offset indexes.
  #   $distance is a parallel array of distances.
  # The first index always corresponds to (0,0).
  #
  screened.by <- function(xy) {
    uv <- abs(xy)
    if (reversed <- uv[2] > uv[1]) {
      uv <- rev(uv)
    }
    i <- which.min(c(uv[1], abs(uv[1]-uv[2]), uv[2]))
    ij <- uv + c(floor((1-i)/3), floor(i/3)-1)
    if (reversed) ij <- rev(ij)
    return(ij * sign(xy))
  }
  #
  # For each lattice point within the circular neighborhood,
  # find the unique lattice point that screens it from the origin.
  #
  xy <- subset(expand.grid(x=(-k:k), y=(-k:k)), 
               subset=(x^2+y^2 <= k^2) & (x != 0 | y != 0))
  g <- t(apply(xy, 1, function(z) c(screened.by(z), z)))
  #
  # Sort by distance from the origin.
  #
  colnames(g) <- c("x", "y", "x.to", "y.to")
  ij <- unique(rbind(g[, 1:2], g[, 3:4]))
  i <- order(abs(ij[,1]), abs(ij[,2])); ij <- ij[i, , drop=FALSE]
  rownames(ij) <- 1:length(i)
  #
  # Invert the "screened by" relation to produce the "screened" relation.
  #
  # (Row, column) offsets.
  ij.df <- data.frame(ij, i=1:length(i))
  #
  # Distances from the origin (in cells).
  distance <- apply(ij, 1, function(u) sqrt(sum(u*u)))
  #
  # "Screens" relation (represented by indexes into ij).
  g <- merge(merge(g, ij.df), ij.df, 
             by.x=c("x.to", "y.to"), by.y=c("x","y"))
  g <- subset(g, select=c(i.x, i.y))
  h <- by(g$i.y, g$i.x, identity)

  return( list(offset=ij, screened=h, distance=distance) )
}

এর screen(12)স্ক্রিনিং সম্পর্কের এই চিত্রটি তৈরি করতে এর মান ব্যবহৃত হত: তীরগুলি সেগুলি থেকে সেগুলি নির্দেশ করে যা তত্ক্ষণাত তাদের স্ক্রীন করে। বর্ণগুলি মূলটির দূরত্ব অনুসারে অনুপাত করা হয়, যা এই পাড়ার মাঝখানে অবস্থিত:

চিত্র 1

এই গণনাটি দ্রুত এবং প্রদত্ত প্রতিবেশীর জন্য একবারে করা দরকার। উদাহরণস্বরূপ, 5 মিটার সেল সহ গ্রিডে 200 মিটার সন্ধান করার সময়, পার্শ্ববর্তী আকারটি 200/5 = 40 ইউনিট হবে।

পদক্ষেপ 2: নির্বাচিত পয়েন্টগুলিতে গণনা প্রয়োগ করা

বাকিগুলি সোজা: এই প্রতিবেশী ডেটা কাঠামোর ক্ষেত্রে (x, y) (সারি এবং কলাম স্থানাঙ্কের) অবস্থিত একটি ঘর "ঘিরে" আছে কিনা তা নির্ধারণ করার জন্য, পরীক্ষাটি পুনরাবৃত্তভাবে (i, j) এর অফসেট দিয়ে শুরু করুন = (0,0) (আশেপাশের উত্স)। (X, y) + (i, j) এ বহুভুজ গ্রিডের মান যদি ননজারো হয় তবে সেখানে দৃশ্যমানতা অবরুদ্ধ থাকে। অন্যথায়, আমাদের সমস্ত অফসেটগুলি বিবেচনা করতে হবে যা অফসেটে অবরুদ্ধ করা যেতে পারে (i, j) (যেগুলি O (1) এর মাধ্যমে প্রাপ্ত ডেটা কাঠামো ব্যবহার করে সময় পাওয়া যায় screen)। যদি অবরুদ্ধ কোনও কিছুই না থাকে তবে আমরা ঘেরে পৌঁছে গিয়ে পৌঁছেছি যে (x, y) চারপাশে নেই, তাই আমরা গণনাটি বন্ধ করি (এবং আশেপাশের কোনও অবশিষ্ট পয়েন্ট পরিদর্শন করতে বিরক্ত করব না)।

অ্যালগরিদমের সময় সর্বাধিক দূরবর্তী দৃষ্টির দূরত্বের ট্র্যাক রেখে আমরা আরও দরকারী তথ্য সংগ্রহ করতে পারি। এটি যদি কাঙ্ক্ষিত ব্যাসার্ধের চেয়ে কম হয় তবে ঘরটি ঘিরে থাকে; অন্যথায় এটি হয় না।

Rএই অ্যালগরিদমের একটি প্রোটোটাইপ এখানে । এটি মনে হয় তার চেয়ে বেশি দীর্ঘ, কারণ Rপুনরাবৃত্তি বাস্তবায়নের জন্য প্রয়োজনীয় (সহজ) স্ট্যাক কাঠামোটি স্থানীয়ভাবে সমর্থন করে না, তাই একটি স্ট্যাককেও কোডিং করতে হবে। আসল অ্যালগরিদম প্রায় দুই তৃতীয়াংশ পথ দিয়ে শুরু হয় এবং তার জন্য মাত্র এক ডজন লাইন প্রয়োজন। (এবং তাদের অর্ধেকগুলি কেবল গ্রিডের প্রান্তের চারপাশের পরিস্থিতি পরিচালনা করে, পার্শ্ববর্তী অঞ্চলে সীমার বাইরে থাকা সূচিগুলির জন্য অনুসন্ধান করে। বহুভুজ গ্রিডটিকে kতার ঘেরের চারপাশে সারি এবং কলামগুলি প্রসারিত করে আরও কার্যকর করা যায় , যেকোনও সমস্যা দূর করে inating বহুভুজ গ্রিডটি ধরে রাখতে আরও কয়েকটি র‌্যামের দামে সূচক পরিসীমা চেক করা দরকার))

#
# Test a grid point `ij` for a line-of-sight connection to the perimeter
# of a circular neighborhood.  
#   `xy` is the grid.
#   `counting` determines whether to return max distance or count of stack ops.
#   `perimeter` is the assumed values beyond the extent of `xy`.
#
# Grid values of zero admit light; all others block visibility
# Returns maximum line-of-sight distance found within `nbr`.
#
panvisibility <- function(ij, xy, nbr=screen(), counting=FALSE, perimeter=1) {
  #
  # Implement a stack for the algorithm.
  #
  count <- 0 # Stack count
  stack <- list(ptr=0, s=rep(NA, dim(nbr$offset)[1]))
  push <- function(x) {
    n <- length(x)
    count <<- count+n         # For timing
    stack$s[1:n + stack$ptr] <<- x
    stack$ptr <<- stack$ptr+n
  }
  pop <- function() {
    count <<- count+1         # For timing
    if (stack$ptr <= 0) return(NULL)
    y <- stack$s[stack$ptr]
    #stack$s[stack$ptr] <<- NA # For debugging
    stack$ptr <<- stack$ptr - 1
    return(y)
  }
  #
  # Initialization.
  #
  m <- dim(xy)[1]; n <- dim(xy)[2]
  push(1) # Stack the *indexes* of nbr$offset and nbr$screened.
  dist.max <- -1
  #
  # The algorithm.
  #
  while (!is.null(i <- pop())) {
    cell <- nbr$offset[i, ] + ij
    if (cell[1] <= 0 || cell[1] > m || cell[2] <= 0 || cell[2] > n) {
      value <- perimeter
    } else {  
      value <- xy[cell[1], cell[2]]
    }
    if (value==0) {
      if (nbr$distance[i] > dist.max) dist.max <- nbr$distance[i]
      s <- nbr$screened[[paste(i)]]
      if (is.null(s)) {
        #exited = TRUE
        break
      }
      push(s)
    }
  }
  if (counting) return ( count )
  return(dist.max)
}

চিত্র 2: উদাহরণ

এই উদাহরণে, বহুভুজ কোষগুলি কালো। দীর্ঘতম দূরত্বের জন্য স্বল্প দূরত্বের থেকে হালকা কমলা থেকে গা dark় নীল পর্যন্ত রঙগুলি সর্বাধিক লাইন অফ দর্শনীয় দূরত্ব (50 কোষের বাইরে) দেয় non (কোষগুলি এক একক প্রশস্ত এবং উচ্চতর)) দৃশ্যমান স্পষ্ট লাইনগুলি "নদীর" মাঝখানে ছোট বহুভুজ "দ্বীপপুঞ্জ" দ্বারা তৈরি করা হয়েছিল: প্রত্যেকে অন্য কোষের দীর্ঘ লাইনকে অবরুদ্ধ করে।

অ্যালগরিদমের বিশ্লেষণ

স্ট্যাকের গঠন কার্যকরী প্রমাণ একটি সেল হয় আশপাশ দৃশ্যমানতা গ্রাফ গভীরতায়-প্রথম সার্চ না বেষ্টিত। যেখানে কোষগুলি কোনও বহুভুজ থেকে অনেক দূরে রয়েছে, এই অনুসন্ধানের জন্য ব্যাসার্ধ-কে বৃত্তাকার প্রতিবেশের জন্য কেবল ও (কে) কোষগুলির পরিদর্শন প্রয়োজন। সবচেয়ে খারাপ পরিস্থিতি তখন ঘটে যখন আশেপাশে খুব কম সংখ্যক ছড়িয়ে ছিটিয়ে বহুভুজ কোষ থাকে তবে তবুও প্রতিবেশীর সীমানা পৌঁছানো যায় না: এগুলিতে প্রতিটি পাড়ার প্রায় সমস্ত কক্ষ পরিদর্শন করা প্রয়োজন যা একটি হে (কে ^ 2) অপারেশন.

নিম্নলিখিত আচরণটি যা সম্মুখীন হবে তা সাধারণ। কে এর ছোট মানগুলির জন্য, বহুভুজগুলি বেশিরভাগ গ্রিড পূরণ না করে, বেশিরভাগ নন-বহুভুজ কোষগুলি স্পষ্টতই অসম্পূর্ণ হবে এবং ও (কে) এর মতো অ্যালগোরিদম স্কেলগুলি। মধ্যবর্তী মানগুলির জন্য, স্কেলিংটি ও (কে ^ 2) এর মতো দেখতে শুরু হয়। যেহেতু কে সত্যিই বড় আকার ধারণ করেছে, বেশিরভাগ কোষকে ঘিরে রাখা হবে এবং পুরো পাড়াটি পরিদর্শন করার আগে এই বাস্তবতাটি ভালভাবে নির্ধারণ করা যেতে পারে: অ্যালগরিদমের গণনার প্রচেষ্টা যার ফলে ব্যবহারিক সীমাতে পৌঁছে যায়। এই সীমাটি তখনই পাওয়া যায় যখন গ্রিডের বৃহত্তম সংযুক্ত অ-বহুভুজীয় অঞ্চলের ব্যাসার কাছাকাছি ব্যাসার্ধটি পৌঁছায়।

উদাহরণস্বরূপ, আমি প্রতিটি কলে ব্যবহৃত স্ট্যাক অপারেশনগুলির সংখ্যা ফিরিয়ে দেওয়ার জন্য countingপ্রোটোটাইপটিতে কোডড বিকল্পটি ব্যবহার করি screen। এটি গণনার প্রচেষ্টা পরিমাপ করে। নিম্নলিখিত গ্রাফটি প্রতিবেশী ব্যাসার্ধের ক্রিয়া হিসাবে স্ট্যাক অপের গড় সংখ্যাকে প্লট করে। এটি পূর্বাভাসিত আচরণ প্রদর্শন করে।

চিত্র 3

আমরা গ্রিডে 13 মিলিয়ন পয়েন্ট মূল্যায়নের জন্য প্রয়োজনীয় গণনাটি অনুমান করতে এটি ব্যবহার করতে পারি। মনে করুন যে কে = 200/5 = 40 এর একটি পাড়া ব্যবহার করা হয়েছে। তারপরে গড়ে কয়েক শতাধিক স্ট্যাক অপারেশন প্রয়োজন হবে (বহুভুজ গ্রিডের জটিলতার উপর নির্ভর করে এবং যেখানে বহুভুজগুলির তুলনায় ১৩ মিলিয়ন পয়েন্ট রয়েছে) এটি বোঝায় যে একটি দক্ষ সংকলিত ভাষায়, কমপক্ষে কয়েক হাজার সরল সংখ্যাসূচক ক্রিয়াকলাপ প্রয়োজন হবে (যোগ, গুণ, পড়া, লিখুন, অফসেট, ইত্যাদি)। বেশিরভাগ পিসি সেই হারে প্রায় দশ মিলিয়ন পয়েন্টের আশেপাশের মূল্যায়ন করতে সক্ষম হবে। (দ্যRবাস্তবায়ন এর চেয়ে অনেক ধীর, কারণ এ ধরণের অ্যালগরিদমে এটি ক্ষীণ, কারণ এটিকে কেবল প্রোটোটাইপ হিসাবে বিবেচনা করা যেতে পারে)) তদনুসারে, আমরা আশা করতে পারি যে একটি যুক্তিসঙ্গত দক্ষ এবং উপযুক্ত ভাষায় একটি কার্যকর বাস্তবায়ন - সি ++ এবং পাইথন মাথায় আসে - পুরো বহুভুজ গ্রিডটি র‌্যামে থাকে বলে ধরে নিয়ে এক মিনিট বা তারও কম সময়ে 13 মিলিয়ন পয়েন্টের মূল্যায়ন সম্পন্ন করতে পারে ।

যখন কোনও গ্রিডটি র‍্যামের সাথে ফিট করার জন্য খুব বড় হয়, এই পদ্ধতিটি গ্রিডের টাইল অংশগুলিতে প্রয়োগ করা যেতে পারে। তাদের কেবল kসারি এবং কলামগুলিতে ওভারল্যাপ করতে হবে ; ফলাফলগুলি মোসাক করার সময় ওভারল্যাপে ম্যাক্সিমা নিন।

অন্যান্য অ্যাপ্লিকেশন

জল একটি শরীরের "আনা" ঘনিষ্ঠভাবে তার পয়েন্ট "surroundedness" সাথে সম্পর্কিত হয়। প্রকৃতপক্ষে, আমরা যদি ওয়াটারবডি ব্যাসের সমান বা তার চেয়েও বেশি আশেপাশের ব্যাসার্ধ ব্যবহার করি তবে আমরা জলরক্ষার প্রতিটি পয়েন্টে (অ-দিকনির্দেশক) আনার গ্রিড তৈরি করব। একটি ছোট প্রতিবেশী ব্যাসার্ধ ব্যবহার করে আমরা কমপক্ষে সমস্ত সর্বোচ্চ-আনয়ন পয়েন্টগুলিতে আনার জন্য নিম্ন সীমাটি অর্জন করব, যা কিছু অ্যাপ্লিকেশনগুলিতে যথেষ্ট ভাল হতে পারে (এবং এটি গণনার প্রচেষ্টাকে হ্রাস করতে পারে)। এই অ্যালগরিদমের একটি বৈকল্পিক যা নির্দিষ্ট দিকগুলির সাথে সম্পর্কিত "স্ক্রিন করা" সীমাবদ্ধ করে সেই দিকগুলিতে দক্ষতার সাথে আনার গণনা করার এক উপায় হবে। নোট করুন যে এই ধরণের রূপগুলির জন্য কোডটি সংশোধন করা প্রয়োজন screen; কোডটি panvisibilityমোটেও বদলায় না।


2

আমি অবশ্যই দেখতে পাচ্ছি যে একজন রাস্টার সমাধানের মাধ্যমে কীভাবে এটি করতে চায়, তবে একটি কম পয়েন্ট থাকলেও আমি খুব বড় / উচ্চ-রেজোলিউশন আশা করতে পারি এবং গ্রিড বা গ্রিডের সেট প্রক্রিয়া করা শক্ত। এটি দেওয়া, আমি আশ্চর্য হই যে কোনও জিডিবিতে টপোলজি শোষণ করা আরও কার্যকর হতে পারে কিনা। আপনি কিছু অভ্যন্তরীণ voids এর মতো কিছু সহ সন্ধান করতে পারেন:

arcpy.env.workspace = 'myGDB'
arcpy.CreateTopology_management('myGDB', 'myTopology', '')    
arcpy.AddFeatureClassToTopology_management('myTopology', 'myFeatures', '1','1')    
arcpy.AddRuleToTopology_management ('myToplogy', 'Must Not Have Gaps (Area)', 'myFeatures', '', '', '')    
arcpy.ValidateTopology_management('myTopology', 'Full_Extent')
arcpy.ExportTopologyErrors_management('myTopology', 'myGDB', 'topoErrors')
arcpy.FeatureToPolygon_management('topoErrors_line','topoErrorsVoidPolys', '0.1')`

তারপরে topoErrorsVoidPolysআপনি আপনার সাধারণ প্যাটার্নে Intersect_analysis()বা যা কিছু নিয়ে কাজ করতে পারেন । আপনার কাছ থেকে আগ্রহের পোলগুলি বের করার সাথে আপনার গোলমাল করতে হবে topoErrorsVoidPolys। gis.stackex بدل.com এ এখানে অন্য ধরণের স্টাফগুলিতে @ হুবারের বেশ কয়েকটি দুর্দান্ত পোস্ট রয়েছে।


এটি একটি আকর্ষণীয় প্রাক প্রক্রিয়াজাতকরণ ধারণা। আমি মনে করি 200 মিটার সীমা (বাফারিং এবং ছেদ ইত্যাদি দ্বারা অন্তর্ভুক্ত করার জন্য এটি সহজেই খাপ খাইয়ে নেওয়া যেতে পারে) গ্রিডগুলি সম্পর্কে আপনার বিশাল আকারটি বড় হওয়া সম্পর্কে নিশ্চিতভাবেই সত্যিকারের উদ্বেগ। জিআইএস-এ কোনও নিয়ম নেই যা বলে যে কোনও সমস্যার সমাধানের জন্য সম্পূর্ণরূপে রাস্টার-ভিত্তিক বা খাঁটি ভেক্টর-ভিত্তিক থাকতে হবে (যদিও এমন একটি নীতি রয়েছে যা বলেছে যে আপনাকে একটি প্রতিনিধিত্ব থেকে অন্যটিতে উপস্থাপনের জন্য বেশ ভাল কারণ থাকতে হবে) একটি বিশ্লেষণ; এখানে, আপনি যেমন পরামর্শ দিয়েছেন ঠিক তেমনটি করার থেকে যথেষ্ট উপকার হতে পারে)।
whuber

0

যদি আপনি সত্যিই রাস্টার যেতে চান ... আমি এই ছদ্ম কোডের লাইনের সাথে কিছু করব (কেবল ক্রিংস করবেন না কারণ এটি স্পষ্টতই আমি একটি এএমএল থ্রোব্যাক!: পি)

  1. রাস্টারাইজ পয়েন্ট ("pts_g") এবং পলিস ("পলিস_জি") (
  2. ভয়েডস = অঞ্চলগোষ্ঠী (কন (ইসনুল (পলিজ_জি), 1))
  3. অযাচিত বাহ্যিক বহুভুজ / উন্মুক্ত মহাবিশ্ব অঞ্চলটি অপসারণ করতে ভয়েডগুলি পরিমার্জন করতে কিছু করার প্রয়োজন হতে পারে
  4. pts_surrounded = কন (voids, pts_g)

এটি তৈরির জন্য কেবল এক ধরণের প্রয়োজন, তাই সংশোধন করার প্রয়োজন হতে পারে।


আপনার সমাধানটি সীমাবদ্ধ দূরত্বের (কোনও, 200 মি) বলতে কোনও রেফারেন্স দেয় না, সুতরাং এটি প্রশ্নের সঠিক উত্তর দেয় বলে মনে হয় না।
হোয়বার

তুমি ঠিক বলছো. এটি আমার অন্যান্য উত্তরের ক্ষেত্রেও প্রযোজ্য। আমি মনে করি যে কেউ এটি ব্যবহার করতে পারে Expand()তবে আমি সেই মুহূর্তে ভাবব যে @radouxju এর উত্তর কার্যকারিতা সমতুল্য এবং সম্ভবত দ্রুততর হবে। (ভিজেডের বিপরীতে কিছুই নয়, কেবল এটি বেশি ব্যবহার করবেন না)।
রোল্যান্ড

সময় ফুরিয়ে যাওয়ার সময় সম্পাদনার চেষ্টা করছিলাম। প্রসারিত করতে চান Expand()উপর যে কি বলতে pts_gএবং মাত্র ব্যবহার Con()সঙ্গে ছেদ polys_g
রোল্যান্ড

0

যদি আপনি একটি প্রান্তিক দূরত্ব মান ব্যবহার করেন (এখানে আপনি 200 মিটারের বিষয়ে কথা বলছেন), তবে সর্বোত্তম সমাধানটি ভেক্টর বিশ্লেষণ ব্যবহার করা:

1) প্রতিটি বিন্দুর চারপাশে 200 মিটার বাফার তৈরি করুন (চিত্রের কালো রঙে)

২) বাফার এবং বহুভুজের (ছেলের চিত্রের নীলে) ছেদ করার সরঞ্জাম (বিশ্লেষণ) ব্যবহার করুন। আপনি যদি আশেপাশের বহুভুজগুলির সীমানা এবং বাফারগুলির মধ্যে এটি করেন তবে এটি দেখতে আরও ভাল লাগবে, তবে চূড়ান্ত ফলাফলটি একই।

৩) বহুভুজ তৈরি করার জন্য বহুভুজ (পরিচালনা) এর বৈশিষ্ট্যটি ব্যবহার করুন যেখানে আপনার পয়েন্টগুলি সম্পূর্ণরূপে ঘিরে রয়েছে (চিত্রের উপরে লাল)

4) চারপাশে অবস্থিত পয়েন্টগুলি সনাক্ত করতে অবস্থান (পরিচালনা) বা স্থানিক যোগ (বিশ্লেষণ) দ্বারা স্তরগুলি নির্বাচন করুন। স্থানিক যোগদানের ব্যবহার আপনাকে এম্বেডিং বহুভুজ (বহুভুজের ক্ষেত্রফল, অঞ্চল সংক্রান্ত পরিসংখ্যান ...) সম্পর্কে তথ্য রাখতে সহায়তা করে যা আরও প্রক্রিয়াজাতকরণের জন্য দরকারী হতে পারে।

বিকল্প 2 বি) আপনার প্রয়োজনের উপর নির্ভর করে আপনি 200 মিটার দূরত্বে আশেপাশের বহুভুজগুলি অবস্থানের মাধ্যমে নির্বাচন করতে পারেন, তারপরে আপনি কিছু ধরণের "ঘের" সনাক্ত করতে পারেন তবে 2 এর মতো কঠোরভাবে নয়)।

এখানে চিত্র বর্ণনা লিখুন

"গোলকধাঁধা মামলা" বিবেচনা করে, এটি সহায়তা করতে পারে: অবস্থান থেকে "পালাতে" কতক্ষণ সময় লাগবে তা মূল্যায়ন করুন।

  • আপনি ইতিমধ্যে বিশ্লেষণ থেকে সম্পূর্ণভাবে অন্তর্ভুক্ত বা সম্পূর্ণ বিনামূল্যে যে পয়েন্টগুলি বাদ দিতে পারেন

  • তারপরে আপনি নিজের বাধাগুলিকে কোনও রেস্টার হিসাবে রূপান্তরিত করে নোডাটাতে যেখানে আপনার বহুভুজ রয়েছে সেটিকে মান নির্ধারণ করুন এবং যেখানে আপনি নেই সেমি কোষের আকারে (এটি আপনার ব্যয়কে রাস্টার করে তুলবে)।

  • তৃতীয়, আপনি সদ্য উত্পন্ন খরচ রাস্টার ব্যবহার করে ব্যয়ের দূরত্ব গণনা করতে পারেন

  • অবশেষে, আপনি রাস্টারকে রূপান্তরিত বাফার সীমানার উপর ভিত্তি করে সারণী হিসাবে একটি জোনাল পরিসংখ্যান ব্যবহার করেন (একটি এনালুস গঠন করে)। আপনি যদি সমস্ত দিক থেকে পালাতে পারেন তবে সর্বনিম্ন আনুমানিক 200 হওয়া উচিত (আপনার বিশ্লেষণের ঘরের আকারের উপর নির্ভর করে)। তবে আপনি যদি গোলকধাঁধায় পড়ে থাকেন, সর্বাধিক 200 এর চেয়ে বড় হবে So


আপনার "সংবেদী" এর সংজ্ঞাটি পরিষ্কার করুন। প্রশ্নের বর্ণনামূলক পরামর্শ দেয় যে বহুভুজের কিছু অংশ সেই বিন্দুর চারপাশে (200 মিটার দূরত্বে) সমস্ত দিক থেকে দৃশ্যমান হলে একটি বিন্দুটিকে "ঘিরে" বিবেচনা করা উচিত । আপনি কিভাবে ধাপে (3) এটি পরীক্ষা করেন? (এটি সহজ একটি ভেক্টর বিশ্লেষণ ব্যবহার করছেন না!)
whuber

আমি একটু উদাহরণ দিয়েছি, এর মতো ব্যাখ্যা করা সহজ explain যদি বাফার সমস্ত দিক থেকে বহুভুজকে ছেদ না করে তবে লুপটি বন্ধ হবে না। এবং যদি লুপটি কাছে না থাকে তবে এটি বহুভুজ তৈরি করবে না।
Radouxju

আপনি "লুপ" বা "বন্ধ" বলতে কী বুঝছেন তা আমি নিশ্চিত নই। দ্রষ্টব্য যে একটি বিন্দু "চারপাশে" থাকতে পারে এমনকি যখন তার চারপাশে ব্যাসার্ধের আর (200 মিটারের কম) কোনও বৃত্ত সম্পূর্ণরূপে বহুভুজের মধ্যে থাকে না। একটি গোলকধাঁধার কথা চিন্তা করুন: বহুভুজ হ'ল ধাঁধার মধ্যে করিডোরগুলি ব্যতীত সমস্ত কিছু । এর মধ্যবর্তী যে কোনও বিন্দুতে শুরু হওয়া গোলকধাঁধা থেকে কেউ পালাতে পারে তবে বেশিরভাগ পয়েন্টগুলি "ঘিরে থাকবে" এই অর্থে যে গোলকধাঁটির বাহ্যিক অংশটি তাদের থেকে দৃশ্যমান হবে না।
whuber

আমার বোঝাপড়া থেকে, অভিভূত মানে কোথাও আপনি পালাতে পারবেন না। ইলাস্ট্রেশনটিতে আপনি বি থেকে পালাতে পারবেন তবে এ থেকে নয়, অন্যদিকে, আপনি ভিউ ব্যবহার করেন তবে বি চারদিকে ঘিরে থাকবে বলে মনে হচ্ছে (ভাল, ছবিতে কোনও স্কেল বার না থাকায় 200 মিটারে সম্ভবত নয়, তবে আপনি সমস্ত দিক সন্ধান করার সময় বহুভুজ সীমানা দেখুন)। আমি মনে করি আমাদের @ লোজ
রডউক্সজু

"পালাতে না পারলে" যদি এটি পরীক্ষা করার মাপদণ্ড হয় তবে এটি মোটেও কঠিন প্রশ্ন হবে না: কেবল বহুভুজের পরিপূরককে অঞ্চলবদ্ধ করুন, কেবল অনন্য বাহ্যিক উপাদান রাখুন এবং এর মধ্যে অন্তর্ভুক্তির জন্য যাচাই করুন। আমি মনে করি এই প্রশ্নের ঘনিষ্ঠভাবে পড়া - বিশেষত এর সম্ভাব্য সমস্ত বিয়ারিংয়ের দিকে তাকানোর প্রসঙ্গে - "ঘিরে থাকা" এর অর্থটি কী তা বোঝায় তা স্পষ্ট করে, যদিও আমি সম্মত হই যে এটি বেশ অস্পষ্টভাবে বলা হয়েছে।
whuber
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.