কি কিউজিআইএস প্রসেসিং অ্যালগরিদমে মেমরি স্তরগুলি ব্যবহার করা সম্ভব?


12

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

তবে আমি তখন কিছু জিওপ্রসেসিং অ্যালগরিদম চালাতে চাই এবং এগুলির কোনওটির মধ্যে মেমরি স্তরটি ব্যবহার করতে আমার সমস্যা হচ্ছে।

    self.stationuri = "point?crs=epsg:4326&field=id:integer&field={}:double&index=yes".format(self.cb_field.currentText())
    self.vlayer = QgsVectorLayer(self.stationuri,"scratch","memory")
    if not self.vlayer.isValid():
        raise Exception("Failed to create in-memory layer")
    self.vlayer.startEditing()
    for i,r in enumerate(result): # Result is row-by-row result of SQL query
        # Add features
        ...
    self.vlayer.commitChanges()
    self.vlayer.updateExtents()
    # Add layer to map
    QgsMapLayerRegistry.instance().addMapLayer(self.vlayer)
    # Layer is successfully added to map with all features and geometry
    # BELOW IS WHERE IT FALLS APART
    try:
        processing.runandload("gdalogr:gridinvdist",self.vlayer,self.cb_field.currentText(),2,0,0,0,0,0,0,0,'Float32',None) # None = in-memory output; I get the same error if I specify a string path and filename.
    except Exception, e:
        raise e

কোনও ব্যতিক্রম উত্থাপিত হয় না, তবে কোনও আউটপুট টিওসি তে উত্পাদিত বা সংযোজন করা হয় না, তবে নিম্নলিখিত লগ এতে তৈরি হয় processing.log:

INFO|Mon May 04 2015 11:28:23|GDAL execution console output|/bin/sh: 1: /tmp/processing/bbebe7599c83446d9c2b03a251879657/OUTPUT.tif: not found|/bin/sh: 1: -zfield: not found||FAILURE: Source datasource is not specified.|Usage: gdal_grid [--help-general] [--formats]|    [-ot {Byte/Int16/UInt16/UInt32/Int32/Float32/Float64/|          CInt16/CInt32/CFloat32/CFloat64}]|    [-of format] [-co "NAME=VALUE"]|    [-zfield field_name] [-z_increase increase_value] [-z_multiply multiply_value]|    [-a_srs srs_def] [-spat xmin ymin xmax ymax]|    [-clipsrc <xmin ymin xmax ymax>|WKT|datasource|spat_extent]|    [-clipsrcsql sql_statement] [-clipsrclayer layer]|    [-clipsrcwhere expression]|    [-l layername]* [-where expression] [-sql select_statement]|    [-txe xmin xmax] [-tye ymin ymax] [-outsize xsize ysize]|    [-a algorithm[:parameter1=value1]*]    [-q]|    <src_datasource> <dst_filename>||Available algorithms and parameters with their's defaults:|    Inverse distance to a power (default)|        invdist:power=2.0:smoothing=0.0:radius1=0.0:radius2=0.0:angle=0.0:max_points=0:min_points=0:nodata=0.0|    Moving average|        average:radius1=0.0:radius2=0.0:angle=0.0:min_points=0:nodata=0.0|    Nearest neighbor|        nearest:radius1=0.0:radius2=0.0:angle=0.0:nodata=0.0|    Various data metrics|        <metric name>:radius1=0.0:radius2=0.0:angle=0.0:min_points=0:nodata=0.0|        possible metrics are:|            minimum|            maximum|            range|            count|            average_distance|            average_distance_pts|

গুরুত্বপূর্ণ অংশটি FAILURE: Source datasource is not specified.যদিও মনে হচ্ছে তবে self.vlayer.isValid() == Trueআমার ইনপুটটিতে কী ভুল তা আমি দেখতে পাচ্ছি না। আমি বদলে আছে চেষ্টা self.vlayerসঙ্গে 'memory:scratch'থেকে কল মধ্যে processing.runandload, কিন্তু তারপর আমি নিম্নলিখিত ত্রুটির কনসোলে মুদ্রিত (কিন্তু উত্থাপিত নয়) পাবেন: Error: Wrong parameter value: memory:scratch

কিউজিআইএস জিইআইয়ের মাধ্যমে এটি চালানোর সময় এবং টপিতে থাকা আমার scratchস্তরটি নির্বাচন করতে ড্রপডাউন মেনু ব্যবহার করে আমি একই সমস্যাটি পাই । আমি আউটপুট রাস্টারটিকে ইন-মেমরি হিসাবে নির্দিষ্ট করেছি বা ডিস্কে কোনও অবস্থান নির্দিষ্ট করেছি কিনা তা ঘটে।

এই প্রশ্নটি একই রকম মনে হয় তবে তাদের সমাধানটি ব্যবহারের আগে টিওসিটিতে মেমরি স্তর যুক্ত করা ছিল। আমি ইতিমধ্যে এটি করছি এবং তবুও ত্রুটি অব্যাহত রয়েছে।

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

processing.runandload("qgis:fixeddistancebuffer",self.vlayer, 500, 5, True, "output_buffer.shp")

আমি কি ভুল করছি? আমার স্মৃতি উত্স ডেটাসেট কেন কিছু প্রসেসিং অ্যালগরিদমে "নির্দিষ্ট করা যায় না"?

সম্পাদনা করুন: যদি এটি কার্যকর হয় তবে তার উত্স কোড এখানে gdalogr:gridinvdist

উত্তর:


4

দেখে মনে হচ্ছে মেমরি স্তরগুলি জিডিএল / ওজিআর প্রসেসিং স্ক্রিপ্টগুলির জন্য ইনপুট হিসাবে ব্যবহার করা যাবে না কারণ প্রসেসিং ogr2ogr এর সাথে ব্যবহারের জন্য ডেটা সঠিকভাবে প্রস্তুত করতে ব্যর্থ হয়। এজন্য, উদাহরণস্বরূপ, কিউজিআইএস বাফার সরঞ্জামটি কাজ করে তবে জিডিএল / ওজিআর বাফার সরঞ্জামটি ব্যর্থ হয়:

Algorithm Buffer vectors starting...
GDAL command:
cmd.exe /C ogr2ogr.exe "C:\Users\anita\AppData\Local\Temp\processing70e5e0852cb9456ba2e3780f8386122e\86d237c8f41443f58a230a8133172047\OUTPUTLAYER.shp" point?crs=EPSG:4326&memoryid={6772bccd-f55d-461d-aff6-6271ded02eea} point?crs=EPSG:4326&memoryid={6772bccd-f55d-461d-aff6-6271ded02eea} -dialect sqlite -sql "SELECT ST_Buffer( geometry , 1000 ),* FROM 'point?crs=EPSG:4326&memoryid={6772bccd-f55d-461d-aff6-6271ded02eea}' " 
GDAL command output:
FAILURE: 
Unable to open datasource `point?crs=EPSG:4326' with the following drivers. 
-> JP2ECW 
-> OCI 
-> SOSI 
...

প্রসেসিংয়ের জন্য কোনওভাবে ডেটা প্রস্তুত করতে হবে (এটি কোনও ফাইলে সংরক্ষণ করুন) এবং তারপরে এটি জিডিএল / ওজিআর সরঞ্জামে ফিড করতে হবে।

আমি টিকিট খুললাম: ওজিআর সরঞ্জামগুলির সাহায্যে মেমরি স্তর ব্যবহার করতে পারি না


2

এটা সঠিক উপায় হিসেবে ডকুমেন্টেশন ব্যাখ্যা করা হয়, http://docs.qgis.org/2.14/es/docs/user_manual/processing/console.html

পরবর্তী কোডটি মেমোরির সাথে শেষের ব্যতীত এটি লোড হয় work

MDT=path/mdt.tif
drain=processing.runalg("grass:r.drain",MDT,"",(pun),False,False,False,"%f,%f,%f,%f"% (xmin, xmax, ymin, ymax),0,-1,0.00100,None)
vect=processing.runalg("grass:r.to.vect",drain['output'],0,False,"%f,%f,%f,%f"% (xmin, xmax, ymin, ymax),0,None)
bu=processing.runalg("qgis:fixeddistancebuffer",vect['output'],Metros_afecta,1,False,None)
buf=bu['OUTPUT']
bufe= QgsVectorLayer(buf,"area", "ogr")
#the last load the layer 
QgsMapLayerRegistry.instance().addMapLayers([bufe])

প্রসেসিং.আরুনাল্গ এই ক্ষেত্রে একটি অভিধান ফিরিয়ে দেয় বু ['আউটপুট'] আউটপুটটি মূল কী, এবং মানটি একটি অস্থায়ী পথ যা আপনি প্রসেসিং.এলঘেল্প ("নাম প্রসেসিং") প্রসেসিং, আলগেল্প ("ঘাস) হিসাবে কী দেখতে পারেন : r.drain ")

প্রত্যাবর্তন

processing.alghelp("grass:r.drain")
ALGORITHM: r.drain - Traces a flow through an elevation model on a raster map.
input <ParameterRaster>
coordinate <ParameterString>
vector_points <ParameterMultipleInput>
-c <ParameterBoolean>
-a <ParameterBoolean>
-n <ParameterBoolean>
GRASS_REGION_PARAMETER <ParameterExtent>
GRASS_REGION_CELLSIZE_PARAMETER <ParameterNumber>
GRASS_SNAP_TOLERANCE_PARAMETER <ParameterNumber>
GRASS_MIN_AREA_PARAMETER <ParameterNumber>
output <OutputRaster>

এক্ষেত্রে কীটি আউটপুট , মূলধন বা আপনার মূলধন লিখতে হবে সে ক্ষেত্রে যত্নবান হোন, এক্ষেত্রে মূলধন নয়


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