আকৃতির বহুভুজগুলিতে রাস্টারকে কীভাবে বহুভুক্ত করা যায়


14

রাস্টারকে বহুভুবনে রূপান্তর করার জন্য আমি একটি মুক্ত-উত্স অজগর সমাধান চাইছি (কোনও আরকিপি নেই)।

আমি বহুভুজে রূপান্তর রাস্টার করার GDAL ফাংশন জানি করেনি, এবং এখানে ম্যানুয়াল হল: http://pcjericks.github.io/py-gdalogr-cookbook/raster_layers.html#polygonize-a-raster-band

তবুও, আমি প্রত্যাশা করি যে আউটপুটটি আকারের বহুভুজ বা কোনও বস্তু হতে পারে, মেমোরিতে অস্থায়ীভাবে, ফাইল হিসাবে সংরক্ষণ করা যায় না। এই সমস্যাটি পরিচালনা করার জন্য কি কোনও প্যাকেজ বা কোড রয়েছে?

যদি রাস্টারকে একটি অদ্ভুত অ্যারে প্রসেস করা হয়, তবে পদ্ধতির নীচে তালিকাভুক্ত করা হবে।

উত্তর:


21

সান গিলিজের রাস্টেরিও ব্যবহার করুন । এটা সহজেই সঙ্গে মিলিত হতে পারে Fiona, (পড়া এবং লেখা shapefiles) এবং সুষম একই লেখকের।

স্ক্রিপ্টে রাস্টেরিও_পলিজোনাইজ.পি শুরু হয়

import rasterio
from rasterio.features import shapes
mask = None
with rasterio.drivers():
    with rasterio.open('a_raster') as src:
        image = src.read(1) # first band
        results = (
        {'properties': {'raster_val': v}, 'geometry': s}
        for i, (s, v) 
        in enumerate(
            shapes(image, mask=mask, transform=src.affine)))

ফলাফলটি জিওজেএসন বৈশিষ্ট্যগুলির একটি জেনারেটর

 geoms = list(results)
 # first feature
 print geoms[0]
 {'geometry': {'type': 'Polygon', 'coordinates': [[(202086.577, 90534.3504440678), (202086.577, 90498.96207), (202121.96537406777, 90498.96207), (202121.96537406777, 90534.3504440678), (202086.577, 90534.3504440678)]]}, 'properties': {'raster_val': 170.52000427246094}}

যে আপনি সুদৃশ্য জ্যামিতিতে রূপান্তর করতে পারেন

from shapely.geometry import shape
print shape(geoms[0]['geometry'])
POLYGON ((202086.577 90534.35044406779, 202086.577 90498.96206999999, 202121.9653740678 90498.96206999999, 202121.9653740678 90534.35044406779, 202086.577 90534.35044406779))

জিওপ্যান্ডাস ডেটাফ্রেম তৈরি করুন এবং স্থানিক যোগদান, প্লট করা, জিওজসন, ইএসআরআই শেফফাইল ইত্যাদি হিসাবে সংরক্ষণের কার্যকারিতা সহজেই সক্ষম করুন

geoms = list(results)
import geopandas as gp
gpd_polygonized_raster  = gp.GeoDataFrame.from_features(geoms)

যদি রাস্টারটি একটি নিম্পি অ্যারে হিসাবে প্রক্রিয়া করা হয়ে থাকে, তবে কোনও নম্পি অ্যারেটিকে বহুভুজ হিসাবে রূপান্তর করার কোনও উপায় আছে কি? ধন্যবাদ!
ভিকি লিয়াউ

তত্ত্বগতভাবে, হ্যাঁ
জিন 19

1
আপনার উদাহরণে মাস্ক ভেরিয়েবল এবং প্যারামিটার অপ্রয়োজনীয় বলে মনে হচ্ছে। আমি if value > src.nodataউত্সের নোডাটা মানটি ব্যবহার করতে তালিকা বোধের সাথে যুক্ত হওয়ার অনুরোধ করব এবং এর সাথে সম্পর্কিত যে কোনও আকারগুলি ফেলে দেব। নোডাটা যদি না হয় তবে কী হবে তা নিশ্চিত। : ও)
বাগম্যানট 123

3
ইতোমধ্যে তারা rasterio.drivers এ rasterio.Env এবং src.affine এ src.transfor রূপান্তর করেছে
লিও

4

এখানে আমার বাস্তবায়ন।

from osgeo import ogr, gdal, osr
from osgeo.gdalnumeric import *  
from osgeo.gdalconst import * 
import fiona
from shapely.geometry import shape
import rasterio.features

#segimg=glob.glob('Poly.tif')[0]
#src_ds = gdal.Open(segimg, GA_ReadOnly )
#srcband=src_ds.GetRasterBand(1)
#myarray=srcband.ReadAsArray() 
#these lines use gdal to import an image. 'myarray' can be any numpy array

mypoly=[]
for vec in rasterio.features.shapes(myarray):
    mypoly.append(shape(vec))

রাস্টেরিও ইনস্টল করার উপায়টি হল 'কনডা ইনস্টল-সি https://conda.anaconda.org/ioos rasterio', যদি কোনও ইনস্টলেশন সমস্যা থাকে।


রাস্টেরিওর ফলাফলটি সরাসরি একটি অদ্ভুত অ্যারে, সুতরাং আপনার প্রয়োজন নেইmyarray=srcband.ReadAsArray() #or any array
জিন

@ জেন আমি নোটটি সংশোধন করেছি এই লাইনটি (myarray = srcband.ReadAsArray ()) চিত্রটি আমদানি করতে gdal ব্যবহার করে।
ভিকি লিয়াউ

ছদ্মবেশী অ্যারে হিসাবে চিত্রটি আমদানি করুন এবং রাস্টেরিও সরাসরি চিত্রটিকে একটি অদ্ভুত অ্যারে হিসাবে আমদানি করুন
জেন

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