বাইনারি রাস্টারগুলিতে প্রচুর পরিমাণে এলোমেলো পয়েন্ট তৈরি করছেন?


9

আমি বাইনারি রাস্টারগুলির মধ্যে 10000 পয়েন্টের (বা আরও বড়) একটি পয়েন্ট ভেক্টর ডেটাসেট তৈরি করতে চাই, যেখানে পয়েন্টগুলি সেই অঞ্চলে সীমাবদ্ধ হওয়া উচিত যেখানে রাস্টারের মান 1 হয়।

আমি নিম্নলিখিত পদক্ষেপ চেষ্টা করেছিলাম।

  1. পলিগোনাইজ রাস্টার
  2. কিউজিআইএস: ভেক্টর -> গবেষণা সরঞ্জাম -> এলোমেলো পয়েন্টস

এটি 2000 পয়েন্ট পর্যন্ত সূক্ষ্ম কাজ করে তবে উপরের যে কোনও কিছুই কেবল QGIS কে ক্র্যাশ করে।

বাইনারি রাস্টার দ্বারা আবদ্ধ বিপুল সংখ্যক পয়েন্ট বৈশিষ্ট্য (বা এর বহুভুক্ত সংস্করণ) সহ ভেক্টর ডেটাসেট তৈরি করার কোনও উপায় আছে কি?

নিম্নলিখিত সরঞ্জামগুলি আমার নিষ্পত্তি হয়, সবচেয়ে কম থেকে কম অনুকূল হয়ে থাকে: QGIS, পাইথন, আর, আর্কজিআইএস

এটিই আমি যাচ্ছি, কেবলমাত্র 10x পয়েন্ট বৈশিষ্ট্যগুলির সাথে।

1k এলোমেলো পয়েন্ট


আপনার রাস্টার সাধারণত কত বড়?
স্পেসডম্যান

উপরের উদাহরণগুলির মধ্যে একটি হ'ল 19200 x 9600 The সাধারণ রাস্টারটি প্রায় 10000 x 10000 পিক্সেল।
কার্স্টেন

ঠিক আছে, আপনার মেশিনের যত বেশি র‌্যাম রয়েছে তত ভাল। আমি এখানে আমার ছোট্ট পিসিতে 10,000x10,000 রাস্টার পরীক্ষা করার সাহস পাচ্ছি না, যদিও আপনি সর্বদা রাস্টারটিকে ভাগ করে নিতে পারেন, অংশগুলিতে নমুনা যোগ করতে এবং যোগদান করতে পারেন ...
স্পেসডম্যান

কেন রাস্টার বহুভুক্ত? আপনি কি উত্তর দিচ্ছেন যে এই উত্তরটি আপনার পক্ষে কার্যকর? gis.stackexchange.com/questions/22601/…
লুইজি

কারণ তখন আমি "পলগন মধ্যে র‌্যান্ডম পয়েন্টস" ফাংশনটি ব্যবহার করতে পারি, অন্যদিকে কিউজিআইএসের "একটি রাস্টার নির্দিষ্ট বৈশিষ্ট্যের অভ্যন্তরে র্যান্ডম পয়েন্টস" নেই।
কার্স্টেন

উত্তর:


7

এখানে আরে উপায় আছে:

একটি পরীক্ষার রাস্টার, 20x30 সেল তৈরি করুন, 1/10 তে সেট করা ঘরগুলির 1/10 তৈরি করুন:

> require(raster)
> m = raster(nrow=20, ncol=30)
> m[] = as.numeric(runif(20*30)>.9)
> plot(m)

কোনও ফাইলে বিদ্যমান রাস্টারের জন্য উদাহরণস্বরূপ একটি জিওটিআইএফএফ, আপনি কেবল এটি করতে পারেন:

> m = raster("mydata.tif")

এখন 1 টি ঘরের xy স্থানাঙ্কের একটি ম্যাট্রিক্স পান, এই পয়েন্টগুলি প্লট করুন এবং আমরা দেখতে পাই যে আমাদের সেল কেন্দ্র রয়েছে:

> ones = xyFromCell(m,1:prod(dim(m)))[getValues(m)==1,]
> head(ones)
       x    y
[1,] -42 85.5
[2,] 102 85.5
[3,] 162 85.5
[4,]  42 76.5
[5,] -54 67.5
[6,]  30 67.5
> points(ones[,1],ones[,2])

পদক্ষেপ 1. 1000 (xo, yo) জোড়া তৈরি করুন যা একটি বাক্সে 0 টি কেন্দ্র করে একটি একক ঘরের আকার তৈরি করে। resকক্ষের আকার পেতে ব্যবহারের নোট :

> pts = data.frame(xo=runif(1000,-.5,.5)*res(m)[1], yo=runif(1000,-.5,.5)*res(m)[2])

পদক্ষেপ 2. উপরের পয়েন্টগুলির মধ্যে প্রতিটি কোষটি এলোমেলোভাবে 1 টি থেকে 1 টি কোষের সংখ্যায় 1000 মানকে নমুনা দিয়ে চলেছে:

> pts$cell = sample(nrow(ones), 1000, replace=TRUE)

অফসেটে সেল সেন্টারটি যোগ করে শেষ পর্যন্ত স্থানাঙ্কটি গণনা করুন। চেক করার প্লট:

> pts$x = ones[pts$cell,1]+pts$xo
> pts$y = ones[pts$cell,2]+pts$yo
> plot(m)
> points(pts$x, pts$y)

এখানে 10,000 পয়েন্ট রয়েছে (10000 দিয়ে উপরে 1000 প্রতিস্থাপন করুন), এর সাথে প্লট করা হয়েছে pch=".":

পয়েন্টগুলি

অর্ধেকটি পয়েন্ট হিসাবে 200x300 রাস্টারটিতে 10,000 পয়েন্টের জন্য খুব তাত্ক্ষণিক । রাস্টারে কয়জন রয়েছে তার সাথে সামঞ্জস্য রেখে সময় বাড়বে, আমার ধারণা।

শেফফাইল হিসাবে সংরক্ষণ করতে, কোনও SpatialPointsবস্তুতে রূপান্তর করুন , এটিকে সঠিক সমন্বয় ব্যবস্থা রেফারেন্স দিন (আপনার রাস্টার হিসাবে একই) এবং সংরক্ষণ করুন:

> coordinates(pts)=~x+y
> proj4string(pts)=CRS("+init=epsg:4326") # WGS84 lat-long here
> shapefile(pts,"/tmp/pts.shp")

এটি এমন একটি শেফফাইল তৈরি করবে যাতে সেল নম্বর এবং বৈশিষ্ট্য হিসাবে অফসেট অন্তর্ভুক্ত থাকে।


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

সম্পাদনাগুলি কীভাবে একজন রাস্টার পড়তে এবং
পিটিএসকে শেফফাইলে

3

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

যাইহোক, কিউজিআইএস-এর বাইরে একটি সরঞ্জাম চালনা করার জন্য ( আপনার OSGeo4W ইনস্টলারটির মাধ্যমে কিউজিআইএস ইনস্টল করা দরকার ছিল ), এই পোস্টে @gcarrillo দ্বারা বর্ণিত প্রথম 2 টি পদক্ষেপ অনুসরণ করুন : স্ট্যান্ড-একলা পাইকিজিআইএস স্ক্রিপ্ট লেখার সময় ইম্পোর্ট Qgis.core নিয়ে সমস্যা (আমি তার .bat ফাইলটি ডাউনলোড এবং ব্যবহার করার পরামর্শ দিই)।

PATHS সেট pythonহয়ে গেলে কমান্ড লাইনে টাইপ করুন । সুবিধার্থে, নীচের কোডটি কোনও নোটপ্যাডের মতো কোনও পাঠ্য সম্পাদকে অনুলিপি করুন, আপনার শেফফিলের প্যাথনাম ইত্যাদি পরামিতিগুলি সম্পাদনা করুন এবং তারপরে ডান-ক্লিক> পেস্ট করে কমান্ড লাইনে পুরো জিনিসটি পেস্ট করুন :

import os, sys
from qgis.core import *
from qgis.gui import *
from PyQt4.QtGui import *

from os.path import expanduser
home = expanduser("~")

QgsApplication( [], False, home + "/AppData/Local/Temp" )

QgsApplication.setPrefixPath("C://OSGeo4W64//apps//qgis", True)
QgsApplication.initQgis()
app = QApplication([])

sys.path.append(home + '/.qgis2/python/plugins')
from processing.core.Processing import Processing
Processing.initialize()
from processing.tools import *

shape = home + "/Desktop/Polygon.shp"
result = home + "/Desktop/Point.shp"
general.runalg("qgis:randompointsinlayerbounds", shape, 10000, 0, result)

স্ক্রিপ্টটি ব্যবহার করে, আমি বেশ বড় আকারের শেফফিলের জন্য লেয়ার বাউন্ডস সরঞ্জামে র‌্যান্ডম পয়েন্টগুলি চালিয়েছিলাম এবং 10 কে পয়েন্ট উত্পন্ন করতে 20 সেকেন্ডের মধ্যে লেগেছিল। কিউজিআইএস-এর ভিতরে এটি চালানো আমার পক্ষে কমপক্ষে 2 মিনিট সময় নিয়েছিল, একটি উল্লেখযোগ্য পার্থক্য রয়েছে।


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

@ কার্স্টেন - চমত্কার, আনন্দিত এটি কাজ করে :)
জোসেফ

1

আপনি সরাসরি এই কাজের জন্য গ্রাস জিআইএসও ব্যবহার করতে পারেন - স্ট্র্যাটিফাইড এলোমেলো নমুনা: স্থানিক সীমাবদ্ধতার সাথে ভেক্টর ম্যাপ থেকে র্যান্ডম নমুনা :

https://grass.osgeo.org/grass72/manuals/v.random.html#stratified-random-sampling:-random-sampling-from-vector-map-with-spatial-constraints

অতিরিক্তভাবে, বৈশিষ্ট্য অনুসারে ভেক্টর মানচিত্র থেকে এলোমেলো নমুনা এবং কমান্ডে আরও কয়েকটি পদ্ধতি প্রয়োগ করা হয়।

দ্রষ্টব্য: প্রসেসিংয়ের মাধ্যমে কিউজিআইএস-এ প্রকাশিত v.random সংস্করণটি সম্পূর্ণ কার্যকারিতা প্রতিফলিত করে না তবে কেবল একটি সরলীকৃত দর্শন।

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