বড় রাস্টারকে আর বা পাইথন ব্যবহার করে পললিনে রূপান্তর করার দ্রুততম উপায়?


14

আমার কাছে বৈশ্বিক জলাশয়গুলির সাথে একটি বড় রাস্টার ফাইল (129600 বাই 64800 পিক্সেল) রয়েছে (1 বিট মান 0 এবং 1) এবং সমুদ্র এবং অভ্যন্তরীণ জলের তীরগুলি সরানোর চেষ্টা করুন।

আমি আর্কজিআইএস এবং কিউজিআইএস দিয়ে রাস্টার থেকে পললিনে রূপান্তরিত করার চেষ্টা করেছি, তবে এটি যুগে যুগে সময় নেয়।

কেউ কি এই কাজের জন্য আরও ভাল / দ্রুততর উপায় (পাইথন বা আর) বা আরও ভাল সরঞ্জাম জানেন?

হালনাগাদ

  • আর: রাস্টার টোকন্টোরটি দ্রুত এবং সুনির্দিষ্ট হতে পারে তবে আপনার মতো আমার মতো খুব বড় ডেটাসেট থাকলে (৮,৯৯৮,০৮০,০০০ পিক্সেল) আপনার খুব হয় প্রচুর পরিমাণে র‌্যাম (১GB গিগাবাইটের বেশি) প্রয়োজন হয় অথবা আপনি হার্ড ড্রাইভে আরও প্রসেসিং করতে আরকে বাধ্য করেন এবং এটি যুগে যুগেও লাগবে।
  • পাইথন / জিডিএল: gdal_poligonize পলিনগুলির পরিবর্তে বহুভুজ তৈরি করে

আপডেট 2

  • আর রেস্টার টোকা কনট্যুর: রাস্টার টোকা কনট্যর পছন্দসই ফলাফল সরবরাহ করে না। আর্কজিআইএস এর সাথে তুলনা করা হয়েছে (রাস্টার থেকে বহুভুজের পরে ফিচারে রেখা) এটি নীচের উদাহরণগুলিতে যেমন সঠিক পিক্সেল বাহ্যরেখাটি বের করে না।

rasterToContour ফলাফল rasterToContour ফলাফল

আর্কজিআইএস ফলাফল আর্কজিআইএস ফলাফল

আপডেট 3

পাইথন / জিডিএল: আমি একটি পরীক্ষা ডেটাসেটে আর্কজিআইএসের বিরুদ্ধে কমান্ড লাইন থেকে জিডিএল_পলিজোনাইজ চালিয়েছি এবং ফলাফলগুলি অত্যন্ত স্পষ্ট ছিল:

  • gdal: 49 সেকেন্ড
  • আর্কজিআইএস: 1.84 সেকেন্ড

এটি করেছেন, আপডেট 3 দেখুন
জেনেরিক ওয়েভারস

আপনি কি সেই পরীক্ষার ডেটাসেট সরবরাহ করতে পারেন, তাই আমরা প্রস্তাবিত বিকল্পগুলি দ্রুততর এবং / অথবা প্রয়োজনীয় ফলাফল উত্পন্ন করতে পারি কিনা তা আমরা দেখতে পারি?
কার্স্টেন

এ জাতীয় বিশাল রাস্টারটির জন্য, আপনি জিডিএল লাইব্রেরি সহ সি / সি ++ ব্যবহার করে আরও ভাল হতে পারবেন।
রদ্রিগো

উত্তর:


8

আমি আর এর সাথে কাজ করছি এবং অতীতে প্যাকেজ rasterToPolygonsথেকে ব্যবহার করেছি raster, তবে এখন আমি gdal_polygonizeRজন বামগার্টনার পছন্দ করি । এটি ভিত্তি করে gdal_polygonize.pyএবং আরও দ্রুত। জন বামগার্টনার কোডটি প্রকাশ করেছেন এবং তার ব্লগে ব্যবহারের জন্য একটি উদাহরণ দিয়েছেন ।

আপনি যদি অজগরটির সাথে পরিচিত হন তবে আপনি gdal_polygonize.pyসরাসরি ব্যবহার করতে পারেন ।


1
আমি চেষ্টা করব। গতবার আমি gdal_polygonize.py অর্কিজিআইএস ব্যবহার করেছি এখনও দ্রুত ছিল।
জেনেরিক ওয়েভার্স

আমি আশা করিনি যে আর্কিগিস সেই জিডিএল দ্রুততর হতে পারে। @ জেনেরিক মিলিৎজার
আইরিস

আহ অপেক্ষা করুন, এটি বহুভুজ তৈরি করবে তবে আমার পলাইন দরকার।
জেনেরিক ওয়েভার্স

আপনি যদি কোনও ফাইল জিওডাটাবেজে আপনার ডেটা রাখেন তবে তা বেশ দ্রুত। কিন্তু এখনও যথেষ্ট দ্রুত না। এজন্য আমি বিকল্পগুলি অনুসন্ধান করছি।
জেনেরিক ওয়েভার্স

2
আপনি বহুভুজ পাবেন এমনটি অগত্যা কোনও সমস্যা নয়, আপনি সর্বদা সেগুলি পলিনগুলিতে রূপান্তর করতে পারেন (যদিও এর সাথে এটি অবশ্যই কিছুটা সময় নিতে পারে)।
মার্টিন

7

উত্তরসূরীদের জন্য, এই ধরণের অপারেশন দ্রুত করার জন্য আমি stars::প্যাকেজটির সাথে সাফল্য পেয়েছি R

library(raster)
library(stars)
library(sf)
library(magrittr)

f <- system.file("external/test.grd", package="raster")
r <- raster(f)
r[r[] < 750] <- 0
r[r[] >= 750] <- 1

x <- st_as_stars(r) %>% 
  st_as_sf() %>% # this is the raster to polygons part
  st_cast("MULTILINESTRING") # cast the polygons to polylines

plot(x)

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

plot(r)
plot(x, add = TRUE)

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


5

রাস্টার প্যাকেজ rasterToContourথেকে চেষ্টা করুন ।

f <- system.file("external/test.grd", package="raster")
r <- raster(f)
r[r[] < 750] <- 0
r[r[] >= 750] <- 1

x <- rasterToContour(r)
class(x)
> [1] "SpatialLinesDataFrame"
> attr(,"package")
> [1] "sp"

plot(r)
plot(x, add=TRUE)

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

এরপরে আপনি স্থানীয় ফোল্ডারে খুব সহজেই ফাইলগুলি লিখতে পারেন, যেমন 'ESRI শেফিল' (.shp) হিসাবে নীচের কোডটি ব্যবহার করে। আপনার সিস্টেমটি কোন ড্রাইভারের সাথে সামঞ্জস্যপূর্ণ তা জানতে rgdalogrDrivers থেকে একবার দেখুন ।

library(rgdal)
writeOGR(x, dsn = getwd(), layer = "coastlines", driver = "ESRI Shapefile")

আমি চেষ্টা করব এবং আঙ্গুলগুলি অতিক্রম করতে পারব এটি আমার র্যামকে হত্যা করবে না। যদিও আমার কাছে 16 জিবি রয়েছে, যা আশাকরি যথেষ্ট, R কখনও কখনও বড় রাস্টার ফাইলগুলির সাথে এতটা দক্ষ হয় না। তবে দেখা যাক।
জেনেরিক ওয়েভার্স

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

হাহা, আমি অবশ্যই আপনার বক্তব্য দেখতে পাচ্ছি। উপরের আপডেট দেখুন।
fdetsch

2
অন্য একটি ইঙ্গিত: rasterToContourকিছু উচ্চ মানের যেমন '1e + 9 ' তে 'ম্যাক্সপিক্সেল' সেট করার চেষ্টা করুন । আপনি আরও বিশদ সঙ্গে শেষ করতে হবে। ডিফল্ট সেটিংটি বেশ সাধারণীকরণ করা কনট্যুর লাইন তৈরি করে।
fdetsch

1
যদি আপনি resampleকোনও উপায়ে স্থানিক রেজোলিউশনে আপনার ডেটাতে রাজি না হন তবে একমাত্র সমাধান আমি তখন কল্পনা করতে পারি তা হ'ল আপনার ডেটাটিকে একাধিক টাইলগুলিতে বিভক্ত করা (উদাহরণস্বরূপ 16 সাব-রেস্টার), তারপরে rasterToContourপ্রতিটি টাইলকে পৃথকভাবে পুনরাবৃত্তি পদ্ধতিতে সঞ্চালন করা এবং অবশেষে, mergeফলস্বরূপ শেফফিলগুলি একটি বিশাল আকারের ফাইলে পরিণত হয়। আপনি যদি আগ্রহী হন তবে আমাদের ওয়ার্কিং গ্রুপের প্যাকেজ রেনাল একটি splitRasterবিশাল রাস্টার থেকে একাধিক সাব-রাস্টার তৈরি করার জন্য ডাকা একটি ফাংশন সরবরাহ করে ।
fdetsch

2

আমি জিডিএল-এর একটি বড় অনুরাগী থাকাকালীন, বহুভুক্ত সরঞ্জামটি আমার অ্যাপ্লিকেশনগুলির জন্যও খুব ধীর ছিল।

একটি দ্রুত বিকল্প নেই gdal_trace_outlineথেকে Dans GDAL স্ক্রিপ্ট এছাড়াও আরো বেশি অপশন সংক্রান্ত সহনশীলতা আছে, ডোনাট, ইত্যাদি

এর মতো gdal_polygonizeবহুভুজও তৈরি হয় যা আপনাকে পরে রূপান্তর করতে হবে ogr2ogr -nlt MULTILINESTRING

এর বিপরীতে আপনার নিজের এটি সঙ্কলন করা দরকার, যদি না আপনি লিনাক্স বা ম্যাক ওএসএক্স সিস্টেমে থাকেন।


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