পাইকিজিআইএস ব্যবহার করে বিপুল সংখ্যক মানচিত্র তৈরি হচ্ছে?


10

আমাকে প্রজাতির বিতরণ মানচিত্রের একটি বিশাল সংখ্যক (শত) তৈরি করতে হবে। আমার একটি শেফফাইল রয়েছে যা প্রতিটি প্রজাতির জন্য বিতরণ রয়েছে এবং প্রত্যেকটির জন্য আমি একটি চিত্র হিসাবে একটি মানচিত্র পেতে চাই (জেপিজি, পিএনজি বা অন্যথায়) যার সাথে সম্পর্কিত প্রজাতির নাম রয়েছে, কিংবদন্তি (এর ক্ষেত্রগুলি আলাদা করতে) বার্ষিক বিতরণ, প্রজনন, অ প্রজনন, ইত্যাদি ...)।

আমি এটি করতে QGIS ব্যবহার করতে চাই।


1
আপনি মানচিত্রের নির্দিষ্টকরণ সম্পর্কে আরও কিছু নির্দিষ্ট করতে পারেন? উদাহরণস্বরূপ, আপনি কি চান যে এই সমস্ত মানচিত্র একটি নির্দিষ্ট মহাদেশ বা দেশের মতো একই অঞ্চলটি দেখানো হোক বা আপনি মানচিত্রের পরিধিটি পরিবর্তনশীল পরিবর্তন করতে চান? এছাড়াও, আপনি কি একটি মানচিত্রে সমস্ত পরিসরের সাব টাইপগুলি চান বা সেগুলি একাধিক মানচিত্রে রয়েছে? এই উত্তরগুলির উপর নির্ভর করে আপনার সমস্যাটি মোটামুটি সহজ হতে পারে বা এর জন্য আরও কিছুটা পরিশীলিত পদ্ধতির প্রয়োজন হতে পারে। সন্ধান শুরু করার জন্য একটি ভাল জায়গা হ'ল জিআইএসের জন্য অ্যাটলাস প্লাগইন, বা যদি আপনার কাছে অর্কিজিআইএস 10 বা আরও বেশি পাওয়া যায় তবে ইএসআরআইয়ের মানচিত্র বইগুলিও সহায়তা করবে।
জে গারনারি

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

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

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

1
আমাদের সাথে খেলতে আপনি কি আপনার ডেটার নমুনা আপলোড করতে পারেন?
নাথান ডব্লু

উত্তর:


4

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

প্লাগ লাগানো

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

Sextante লিপি

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

#Definition of inputs and outputs
#==================================
##[Scratch]=group
##all_localities=vector
##taxon_field=field all_localities
##africa_map=vector
##sa_map=vector
##grid_layer=vector
##distribution_style_file=file

#Algorithm body
#==================================
from qgis.core import *
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from sextante.core.QGisLayers import QGisLayers
from sextante.core.SextanteVectorWriter import SextanteVectorWriter
import tempfile
import os

def print_map(taxon,taxon_shp):
    #load taxon layer (necessary?)
    #QGisLayers.load(taxon_shp,name = "taxon",style = distribution_style_file)
    taxon_layer = QgsVectorLayer(taxon_shp,"taxon","ogr")
    QgsMapLayerRegistry.instance().addMapLayer(taxon_layer)
    taxon_layer.loadNamedStyle(distribution_style_file)

    # create image (dimensions 325x299)
    img = QImage(QSize(325,299), QImage.Format_ARGB32_Premultiplied)

    # set image's background color
    color = QColor(192,192,255)   # blue sea
    img.fill(color.rgb())

    # create painter
    p = QPainter()
    p.begin(img)
    p.setRenderHint(QPainter.Antialiasing)

    render = QgsMapRenderer()

    # create layer set
    africa_layer = QGisLayers.getObjectFromUri(africa_map)
    sa_layer = QGisLayers.getObjectFromUri(sa_map)
    #taxon_layer = QGisLayers.getObjectFromUri(taxon_shp)

    lst = []
    lst.append(taxon_layer.id())    
    lst.append(sa_layer.id())
    lst.append(africa_layer.id())

    render.setLayerSet(lst)

    # set extent (xmin,ymin,xmax,ymax)
    rect = QgsRectangle(14.75,-36.00,34.00,-21.00)
    render.setExtent(rect)

    # set output size
    render.setOutputSize(img.size(), img.logicalDpiX())

    # do the rendering
    render.render(p)
    p.end()

    # save image
    #outdir = os.path.dirname(os.path.abspath(output))
    tempdir = tempfile.gettempdir()
    img.save(os.path.join(tempdir,taxon+".png"),"png")

    # remove taxon layer from project
    QgsMapLayerRegistry.instance().removeMapLayers([taxon_layer.id()])

tempdir = tempfile.gettempdir()   
taxa = sextante.runalg('qgis:listuniquevalues', all_localities, taxon_field, None)['UNIQUE_VALUES'].split(";")
for taxon in taxa:
    sextante.runalg('qgis:selectbyattribute', all_localities, taxon_field, 0, taxon)
    sextante.runalg('qgis:selectbylocation', grid_layer, all_localities, 0)
    filename = os.path.join(tempdir,"taxon.shp")    #memory file better?
    sextante.runalg('qgis:saveselectedfeatures', grid_layer, filename)
    print_map(taxon,filename)

হাই সব, আপনার সমস্ত জবাবের জন্য ধন্যবাদ। আপনাকে আরও কিছু উপাদান দেওয়ার জন্য, এটি বার্ডলাইফ থেকে আসা ডেটা (স্পেসি জন্য একটি উদাহরণ: পাখি লাইফ.আর.ডাটাজোন / স্পেসিফেক্টসীট.এফপি ? আইডি = 2794 )। সংক্ষেপে, সমস্ত প্রজাতির জন্য বহুভুজগুলির সাথে একটি আকৃতি রয়েছে (সুতরাং, তাদের মধ্যে কিছুগুলির জন্য, একক প্রজাতির জন্য অনেকগুলি লাইন), এবং এমন একটি বৈশিষ্ট্য রয়েছে যা alতু বন্টনের সাথে মিলে যায় (1 থেকে 5 পর্যন্ত মানগুলি বিভিন্ন ব্যবহারের সাথে মিল রেখে) ), উৎপত্তি ইত্যাদির জন্য একে অপরকে .. কিংবদন্তি এবং শিরোনাম অপরিহার্য নয়।
ওনেসিম

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

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

সুতরাং আমি মনে করি আমি "রুডিভনস্টাডেন" স্ক্রিপ্টের ভিত্তিতে সেকসেন্টেটি ব্যবহার করব (এর জন্য আপনাকে ধন্যবাদ!) এবং এটি আমার ক্ষেত্রে খাপ খাইয়ে নিতে। অবশেষে, এই বিভিন্ন মন্তব্যের জন্য দুঃখিত, তবে একটি চরিত্রের সংখ্যা সীমা আছে ...
ওনেসিম

@ ওনিসিম, শিরোনাম এবং কিংবদন্তি ব্যতীত, আমি মনে করি আপনি যা প্রয়োজন তা করতে আপনি উপরের সিক্সেন্টে স্ক্রিপ্টটি মানিয়ে নিতে সক্ষম হবেন। আপনাকে সম্ভবত selectbylocationপদক্ষেপটি সরিয়ে ফেলতে হবে selectbyattributeএবং saveselectedfeaturesপ্রতিটি মরসুমের জন্য একটি অতিরিক্ত এবং পদক্ষেপ যুক্ত করতে হবে (এতে পরিবর্তন grid_layerকরুন all_localities)। তারপরে আরও .QML ফাইল লোড করুন এবং আপনার মরসুমী শেফফায়ালগুলি যুক্ত করুন (শীর্ষ স্তরটি প্রথমে সংযুক্ত করুন)। কীভাবে যদি আপনি নিশ্চিত না হন তবে আমি সম্ভবত উপরের স্ক্রিপ্টটি কম বেশি বা কম কাজের সম্পাদনায় চেষ্টা করতে পারি।
rudivonstaden

2

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

#Definition of inputs and outputs
#==================================
##[Scratch]=group
##all_localities=vector
##taxon_field=field all_localities
##seasonal_field=field all_localities
##countries_map=vector
##distribution_style_file=file
##output_folder=folder

#Algorithm body
#==================================
from qgis.core import *
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from sextante.core.QGisLayers import QGisLayers
from sextante.core.SextanteVectorWriter import SextanteVectorWriter
import tempfile
import os

def print_map(taxon,taxon_shp):
#load taxon layer (necessary?)
#QGisLayers.load(taxon_shp,name = "taxon",style = distribution_style_file)
taxon_layer = QgsVectorLayer(taxon_shp,"taxon","ogr")
QgsMapLayerRegistry.instance().addMapLayer(taxon_layer)
taxon_layer.loadNamedStyle(distribution_style_file)

# create image (dimensions 325x299)
img = QImage(QSize(325,299), QImage.Format_ARGB32_Premultiplied)

# set image's background color
color = QColor(221,249,254)   # blue sea
img.fill(color.rgb())

# create painter
p = QPainter()
p.begin(img)
p.setRenderHint(QPainter.Antialiasing)

render = QgsMapRenderer()

# create layer set
countries_layer = QGisLayers.getObjectFromUri(countries_map)
taxon_layer = QGisLayers.getObjectFromUri(taxon_shp)

lst = []
lst.append(taxon_layer.id())    
lst.append(countries_layer.id())
render.setLayerSet(lst)

# set extent (xmin,ymin,xmax,ymax)
rect = QgsRectangle(-11,32,39,71)
render.setExtent(rect)
# set output size
render.setOutputSize(img.size(), img.logicalDpiX())

# do the rendering
render.render(p)
p.end()

#save image
#outdir = os.path.dirname(os.path.abspath(output))
tempdir = output_folder
img.save(os.path.join(tempdir,taxon+".png"),"png")

# remove taxon layer from project
QgsMapLayerRegistry.instance().removeMapLayers([taxon_layer.id()])

tempdir = tempfile.gettempdir()  

taxa = sextante.runalg('qgis:listuniquevalues', all_localities, taxon_field, None)        ['UNIQUE_VALUES'].split(";")

for taxon in taxa:
sextante.runalg('qgis:selectbyattribute', all_localities, taxon_field, 0, taxon)
filename = os.path.join(tempdir,"taxon.shp")    #memory file better?
sextante.runalg('qgis:saveselectedfeatures', all_localities, filename)
print_map(taxon,filename)

এটিকে উন্নত করার জন্য যদি আপনার কোনও মন্তব্য বা পরামর্শ থাকে তবে দ্বিধা করবেন না।

এটির উন্নতি করার জন্য, সেরাটি হবে যখন আমরা সীমাটি নির্বাচন করি (উদাহরণস্বরূপ ইউরোপ), এটি এই মাত্রার অভ্যন্তরে অন্তর্ভুক্ত কেবলমাত্র প্রজাতি নির্বাচন করতে ব্যবহার করে select এটি, কারণ আমি সমস্ত প্রজাতির, এমনকি ইউরোপের বাইরে যেমন উদাহরণস্বরূপ মানচিত্রগুলি পাই (তাই আমার কাছে অনেক খালি মানচিত্র রয়েছে)। আপনি কি মনে করেন যে এটি সম্ভব?

চিয়ার্স,

Onesime

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