একা অজগর স্ক্রিপ্টে কিউজিআইএস প্রসেসিং আমদানি করছেন?


10

আমি কয়েকটি স্ট্যান্ড-একা স্ক্রিপ্ট লিখতে চাই যা Qgis এর প্রসেসিং টুলবক্স ব্যবহার করে।

আমি কয়েকটি থ্রেড পড়েছি ( এখানে এবং এখানে , উদাহরণস্বরূপ) তবে একটি কার্যকরী সমাধান খুঁজে পাইনি।

উবুন্টু জেনিয়াল 16.04 এলটিএসে কিউগিস 2.16.1 ব্যবহার করা

আমার স্ক্রিপ্টের আমদানি বিভাগটি এর মতো দেখাচ্ছে:

# Python modules
import sys
import time
import os

# Qgis modules
from qgis.core import *
import qgis.utils
from PyQt4.QtCore import QFileInfo, QSettings

প্রসেসিং মডিউলটি আমদানি করতে আমার কী অনুপস্থিত তা কি কেউ জানেন?

একটি সাধারণ আমদানি প্রক্রিয়াকরণ সহ , আমি এটি পেয়েছি:

Original exception was:
Traceback (most recent call last):
 File "/home/steph/Documents/Projets/20141227-CIM_Bishkek/Scripts/python/00-projets/20160811-AnalysesUAVs/20160811-UAVAnalyse.py", line 36, in <module>
import processing
 File "/usr/lib/python2.7/dist-packages/qgis/utils.py", line 607, in _import
mod = _builtin_import(name, globals, locals, fromlist, level)
ImportError: No module named processing

সম্পাদনা (জোসেফের মন্তব্যের পরে)

আমি এরকম চেষ্টা করেছি:

# Python modules
import sys
import time
import os

# Qgis modules
from qgis.core import *
import qgis.utils
from PyQt4.QtGui import *
app = QApplication([])
QgsApplication.setPrefixPath("/usr", True)
QgsApplication.initQgis()
from PyQt4.QtCore import QFileInfo, QSettings
#from PyQt4.QtGui import *

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

তবে আচরণটি অদ্ভুত: আমার স্ক্রিপ্টটি ত্রুটি ছাড়াই শেষ অবধি চলে তবে মনে হয় যে কাজগুলি সম্পাদন করা উচিত তার উপর "ঝাঁপিয়ে পড়ে" বলে মনে হচ্ছে :-) অন্য কথায়, এটি শেষ অবধি চলে তবে কিছুই না করে runs

আমি স্বীকার করি যে আমার ব্যাখ্যাটি খুব স্পষ্ট নয় ... আমি আরও তদন্ত করব তবে কারও কাছে যদি এই মডিউলটি আমদানি করার জন্য কোনও যাদুকরী সমাধান (কোনও কার্যকারণ নয়) থাকে তবে দয়া করে দয়া করে!

সম্পাদনা 2: আমার সম্পূর্ণ স্ক্রিপ্ট যুক্ত। কিছুটা দীর্ঘ হলে দুঃখিত ...

# -*- coding: cp1252 -*-
########################################################
## Name: Performs various analyses on UAV imagery using Qgis
## Source Name: UAVanalyse.py
## Version: Python 2.7
## Author: Stephane Henriod
## Usage: Performs a set of analyses on UAV imagery
## Date 11.08.2016
## Modified: 
########################################################


# Import required modules

# Python modules
import sys
import time
import os

# Qgis modules
from qgis.core import *
import qgis.utils
from PyQt4.QtCore import QFileInfo, QSettings

# Custom modules
from config_work import *
import display_msg as disp
import clean_time as cl

def make_raster_layer(raster, log_file):
    """Creates a raster layer from the path to a raster, if the path exists and if the raster is valid

    Param_in:
        raster (string) -- The path to the raster to be transformed into a layer
        log_file (string) -- The path to the log file to write in

    Param_out:
        list: 
            [0] = full path to the raster 
            [1] = raster layer

    """

    if os.path.exists(raster):
        fileName = raster
        fileInfo = QFileInfo(fileName)
        baseName = fileInfo.baseName()
        rlayer = QgsRasterLayer(fileName, baseName)
        if rlayer.isValid():
            return [raster, rlayer]
    else:
        return False

def study_raster(rlayer, log_file):
    """Returns properties of a raster, if this one exists and is valid

    Param_in:
        rlayer (bin) -- A raster layer
        log_file (string) -- The path to the log file to write in

    """

    infos = {}

    if rlayer:
        infos['a - Width'] = rlayer.width()
        infos['b - Height'] = rlayer.height()
        infos['c - Extent'] = rlayer.extent().toString()
        infos['d - # bands'] = rlayer.bandCount()
        infos['e - X resolution'] = rlayer.rasterUnitsPerPixelX()
        infos['f - Y resolution'] = rlayer.rasterUnitsPerPixelY()
        return infos
    else:
        return False


def project_raster(raster, to_crs, log_file):
    """Projects a raster into another crs

    Param_in:
        raster (string) -- The path to the raster to be transformed into a layer
        to_crs (string) -- The coordinate reference system to which the layer must be projected
        log_file (string) -- The path to the log file to write in

    """

    img_out_name = os.path.splitext(os.path.basename(raster))[0] + '_proj' + os.path.splitext(os.path.basename(raster))[1]
    img_out = os.path.join(output_folder, img_out_name)
    #processing.runalg("gdalwarp -overwrite -s_srs EPSG:32642 -t_srs " + to_crs + " " + rlayer[0] + " " + img_out)

    msg = img_out    
    disp.display_msg(log_file, msg, 'a')

    return img_out_name

if __name__ == "__main__":
    t_start_script = time.localtime()
    t_start_script_clean = time.strftime("%Y%m%d-%H%M", t_start_script)

    # Checking the folders
    if not os.path.exists(input_folder_path):
        os.makedirs(input_folder_path)
    if not os.path.exists(temp_folder_path):
        os.makedirs(temp_folder_path)
    if not os.path.exists(output_folder_path):
        os.makedirs(output_folder_path)

    # Creating the output and temp folders
    output_folder = os.path.join(output_folder_path, t_start_script_clean + '-UAVanalyse')
    temp_folder = os.path.join(temp_folder_path, t_start_script_clean + '-UAVanalyse')

    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    if not os.path.exists(temp_folder):
        os.makedirs(temp_folder)

    # Creating the log file
    log_file_name = t_start_script_clean + '-UAVanalyse.log'
    log_file = os.path.join(output_folder, log_file_name)

    # Heading of the log file
    msg = "Performs a set of analyses on UAV imagery" + os.linesep
    msg += "Input folder: " + input_folder_path
    msg += "\n RGB image: " + img_rgb_name
    msg += "\n NIR image: " + img_nir_name
    msg += "\n RGBIR image: " + img_rgbir_name
    msg += "\n DSM file: " + img_dsm_name
    disp.display_msg(log_file, msg, 'w')

    #msg = "Script started on " + cl.clean_time(t_start_script)
    #disp.display_msg(log_file, msg, 'a')


    # Initialize Qgis (source: http://docs.qgis.org/testing/en/docs/pyqgis_developer_cookbook/intro.html)
    msg = 'Initialize Qgis'
    disp.display_msg(log_file, msg, 'a')
    # supply path to qgis install location
    QgsApplication.setPrefixPath("/usr", True)

    # create a reference to the QgsApplication, setting the
    # second argument to False disables the GUI
    qgs = QgsApplication([], False)

    # load providers
    qgs.initQgis()


    # Write your code here to load some layers, use processing algorithms, etc.

    # Make raster layers
    rlayer_rgb = make_raster_layer(img_rgb, log_file)
    rlayer_nir = make_raster_layer(img_nir, log_file)
    rlayer_rgbir = make_raster_layer(img_rgbir, log_file)
    rlayer_dsm = make_raster_layer(img_dsm, log_file)

    all_valid_layers = []
    if rlayer_rgb: all_valid_layers.append(rlayer_rgb)
    if rlayer_nir: all_valid_layers.append(rlayer_nir)
    if rlayer_rgbir: all_valid_layers.append(rlayer_rgbir)
    if rlayer_dsm: all_valid_layers.append(rlayer_dsm)




    # (I) Infos about the layers
    msg = os.linesep + frm_separator + os.linesep + '(I) Infos about the layers' + os.linesep + frm_separator + os.linesep
    disp.display_msg(log_file, msg, 'a')

    i = 1
    for layer in all_valid_layers:
        infos = study_raster(layer[1], log_file)
        msg = '\n (' + str(i) + ') ' + layer[0] + os.linesep
        for item in sorted(infos):
            msg += '\n ' + str(item) + ': ' + str(infos[item]) + os.linesep

        i+=1
        disp.display_msg(log_file, msg, 'a')

    msg = 'List of valid layers:' + os.linesep
    for layer in all_valid_layers:
        msg += layer[0]+ os.linesep
    disp.display_msg(log_file, msg, 'a')


    # (II) Projects the layers into the national coordinate system or any desired system
    msg = os.linesep + frm_separator + os.linesep + '(II) Projecting of the layers' + os.linesep + frm_separator + os.linesep
    disp.display_msg(log_file, msg, 'a')

    i = 1
    for layer in all_valid_layers:
        project_raster(layer[0], to_crs, log_file)




    # When script is complete, call exitQgis() to remove the provider and
    # layer registries from memory
    qgs.exitQgis()
    msg = 'Qgis has been closed'
    disp.display_msg(log_file, msg, 'a')

    #raw_input("Press Enter to continue...")

আপনার দ্বিতীয় লিঙ্কে, আপনি @ জার্মানিক্রিয়েরো প্রদত্ত কোডটি ব্যবহার করেছেন? তার কোডটি যা আমি স্বতন্ত্র স্ক্রিপ্টগুলি চালাতে ব্যবহার করি (আমি উইন্ডোজ ব্যবহার করার সাথে সাথে আমার পথগুলি সামান্য সম্পাদনা করি)।
জোসেফ

আপনি কোন কাজটি সম্পাদন করার চেষ্টা করছেন? :)। আপনি কি আপনার প্রশ্নের কোডটি অন্তর্ভুক্ত করতে পারেন? এটি অন্যকে কী ভুল তা চিহ্নিত করতে সহায়তা করতে পারে।
জোসেফ

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

লজ্জা পাবেন না! আমার পোস্ট করা কোনও কিছুইই সবচেয়ে পরিষ্কার বা সোজা-এগিয়ে নেই =)
জোসেফ

তাই আমি আমার সম্পূর্ণ স্ক্রিপ্ট যুক্ত করেছি। নির্দ্বিধায় দেখতে :-)
স্টাফেন হেনরিড

উত্তর:


6

লিনাক্স কিউজিআইএস 2.18.1

এই কোডটি দিয়ে এটি পেয়েছে, স্বতন্ত্র স্ক্রিপ্ট থেকে প্রসেসিং চালান:

#!/usr/bin/env python
import qgis
from qgis.core import *
import sys

app = QgsApplication([],True, None)
app.setPrefixPath("/usr", True)
app.initQgis()
sys.path.append('/usr/share/qgis/python/plugins')
from processing.core.Processing import Processing
Processing.initialize()
from processing.tools import *

print Processing.getAlgorithm("qgis:creategrid")

আমি যে পরিবেশে কাজ করছি তার পক্ষে এটিই একমাত্র সংমিশ্রণ (পাইথন ২.7 সহ উবুন্টু ১৪.০৪ মেশিনে পাইচার্ম সিএড)। এর আগে, আমি gis.stackexchange.com/questions/129513/… , এবং gis.stackexchange.com/Qestions/176821/… এর সংমিশ্রণগুলি চেষ্টা করেছিলাম এবং দুঃখের বিষয়, তাদের কেউই "প্রসেসিংকোর.প্রসেসিং" আমদানি করে নি। আমি জানি না কেন একটি মডিউল আমদানি করা বিভ্রান্তিকর। রেকর্ডের জন্য: এখানে একটি খাঁটি পাইথন প্যাকেজ রয়েছে যা "প্রসেসিং" নামে পরিচিত যা QGIS এর ছায়া গোছা।
আইরিন

3

সুতরাং আমি এটি কাজ করতে পেরেছি, আপনার ইঙ্গিতগুলির জন্য @ জোসেফকে ধন্যবাদ:

# Import required modules

# Python modules
import sys
import time
import datetime
import os
from getpass import getuser

# Qgis modules and environment
from qgis.core import *
import qgis.utils
from PyQt4.QtCore import QFileInfo, QSettings

from PyQt4.QtGui import QApplication
app = QApplication([])

QgsApplication.setPrefixPath("/usr", True)
QgsApplication.initQgis()

# Prepare processing framework
sys.path.append('/home/' + getuser() + '/.qgis2/python/plugins')
from processing.core.Processing import Processing

Processing.initialize()

এবং আমি এটি দিয়ে পরীক্ষা করি

print Processing.getAlgorithm("qgis:creategrid")

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

এখন আমি প্রকৃত প্রক্রিয়াকরণ মডিউলটি চেষ্টা করব :-)


কিছু বদলেছে? আমি (জোসেফ থেকে) এই কোড চেষ্টা একটি স্বতন্ত্র স্ক্রিপ্ট মধ্যে প্রক্রিয়াকরণের ব্যবহার করতে এবং আমি পাবেন: ImportError: কোন মডিউল লিনাক্স ব্যবহার processing.core.Processing নামে 2.18.1 QGIS
Juanma ফন্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.