পয়েন্ট বৈশিষ্ট্যের উপর ভিত্তি করে কীভাবে একটি অ্যাটলাস তৈরি করবেন?


9

মূলত আমি একটি বিন্দু স্তরে শ্রেণিবদ্ধ ক্ষেত্রের উপর ভিত্তি করে একটি অ্যাটলাস উত্পাদন করতে চাই।

অর্থাত আমার কাছে শ্রেণীবদ্ধ ক্ষেত্র "বিধান" সহ শিশু যত্ন প্রদানকারীদের একটি পয়েন্ট স্তর রয়েছে। আমি এই ক্ষেত্রের প্রতিটি বৈশিষ্ট্য "পরে স্কুল ক্লাব", "প্রাতঃরাশ ক্লাব" ইত্যাদি দিয়ে শ্রেণিবদ্ধ করেছি এবং আমি এখন মানচিত্রের একটি সেট তৈরি করতে চাই যা প্রতিটি বিভাগের মাধ্যমে পুনরাবৃত্তি করে এবং প্রতিটিটির জন্য কেবলমাত্র পয়েন্টগুলি দেখায় show স্কুল ক্লাবগুলির পরে একটি মানচিত্র, প্রাতঃরাশের ক্লাবগুলির একটি মানচিত্র ইত্যাদি প্রসারগুলি সূক্ষ্মভাবে পৃথক হতে পারে।

আমি এটি এক এক করে করতে পারলাম তবে মনে হচ্ছে প্রতিটি বিভাগের এক্সটেন্টের উপর ভিত্তি করে কোনও অ্যাটলাস তৈরির উপায় থাকা উচিত? (আমি মনে করি আমি স্পষ্ট কিছু মিস করছি :))

অথবা বিকল্পভাবে কোনও বহুভুজ স্তর তৈরি করতে স্বয়ংক্রিয় করার কোনও উপায় আছে এবং এটিকে অ্যাটলাসের গোপন কভারেজ হিসাবে ব্যবহার করার কোনও উপায় আছে?

সম্পাদনা: এটি দিয়ে আমি কিছুটা অগ্রগতি করেছি - আপনি বর্তমান অ্যাটলাস কভারেজ বৈশিষ্ট্যের সাথে সম্পর্কিত বৈশিষ্ট্যগুলি চালু এবং বন্ধ করতে নিয়ম ভিত্তিক স্টাইলিং ব্যবহার করতে পারেন। এটি করতে খুব ভাল কাজ করে যদি আপনি যা করতে চান সেগুলি পয়েন্টের একটি আলাদা সেট দেখায়। আমি এখন রঙিন স্কিম এবং প্রতিক্রিয়াশীল কিংবদন্তীর সাথে এটি বেঁধে দেখছি।


1
এটি মূলত gis.stackex بدل
ডব্লিউ

ধন্যবাদ ক্রিস - তবে তা নিশ্চিত কিনা। এটি একটি জিজ্ঞাসা করে মনে হচ্ছে আপনি একটি আসল আটলাসে প্রতিটি অঞ্চলের জন্য একটি সাব-অ্যাটলাস করতে পারেন কিনা? উদাহরণস্বরূপ 4 টি পৃষ্ঠা সহ 4 টি অঞ্চল? (যদিও আমি যা চাওয়া হয়েছিল তা অনুসরণ করার জন্য আমি সংগ্রাম করেছি)
জোনো প্যাটারসন

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

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

হ্যাঁ আপনার মৃত এটিও এই এক gis.stackexchange.com / Qtions / 121802 /… এর পুনরাবৃত্তি - যাতে আমি নিজে নিজেই এটি করার চেষ্টা করতে পারি।
জোনো প্যাটারসন

উত্তর:


9

অবশেষে আমি এটি আমার উদ্দেশ্যগুলির জন্য সমাধান করেছি সুতরাং এটি সমাধানটি আমি এখানে এনেছি যদি এটি কাউকে সহায়তা করে:

পাইথন স্ক্রিপ্ট লিখুন (এটির শেষে আমার) যা মূলত এটি করে:

  1. আগ্রহের পয়েন্ট স্তর ক্ষেত্রে অনন্য বিভাগগুলি চিহ্নিত করুন
  2. প্রতিটি বিভাগের জন্য, সমস্ত মেলানো পয়েন্ট নির্বাচন করুন এবং এই সেটটির ব্যাপ্তি স্থাপন করুন
  3. প্রতিটি মাত্রার জন্য একটি বিশিষ্ট "বিভাগের নাম" সহ একটি ফাঁকা অ্যাটলাস কভারেজ স্তরে একটি নতুন বহুভুজ তৈরি করুন

এটি আমাকে প্রতিটি শ্রেণীর আগ্রহের জন্য একটি বহুভুজ সহ আটলাসের কভারেজ স্তরটি দিয়েছে: অ্যাটলাস কভারেজ স্তর

স্বাভাবিক হিসাবে অ্যাটলাস এবং মুদ্রণ রচয়িতা কনফিগার করুন - কেবল অফিং এবং বৈশিষ্ট্যগুলি ইস্যু রেখে।

এর জন্য বিকল্পগুলির সঠিক সেটটি কাজ করতে সামান্য পরীক্ষা এবং ত্রুটি:

  1. নীচের অভিব্যক্তিটি আপনাকে বর্তমান আটলাস বৈশিষ্ট্যের জন্য ক্যাটাগরিনাম ফিল্ডে রাখা মানটি পেতে দেয়

    attribute ($atlasfeature, 'CategoryName') 
    
  2. এর লাইন বরাবর পয়েন্ট স্তর জন্য নিয়ম ভিত্তিক স্টাইলিং তৈরি করতে এটি ব্যবহার করুন

    attribute ($atlasfeature, 'CategoryName') = PointCategory AND PointCategory = "RedDots"
    
  3. অন্য সমস্ত স্বচ্ছ হয়ে ওঠার গ্যারান্টি দেওয়ার আমারও একটি নিয়ম ছিল

    attribute ($atlasfeature, 'CategoryName') IS NOT PointCategory
    

বিধিগুলি দেখানো হয়েছে

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

ফাইনাল এটলাস সেট:

বৈশিষ্ট্য ভিত্তিক অ্যাটলাস

সম্পাদনা করুন - যেমনটি জিজ্ঞাসা করা হয়েছিল, তা এখানে আমার স্ক্রিপ্ট:

    from PyQt4.QtCore import *

#main script----------------------------------------------
    #set up the layer references - you will need to change this
targetlayer=QgsMapLayerRegistry.instance().mapLayer("AtlasExtents20150727154732521")
eylayer = QgsMapLayerRegistry.instance().mapLayer("Early_Years_Providers20150727152919862")

#establish the unique categories 
names = getUniqueAttributes(eylayer, 'Mapping_La')

#get a set of boxes
boxset = getBoundings(eylayer, names)

#ensure layer is emptied, then add bounding boxes
deleteBoxes(targetlayer)
createBoxes(targetlayer, boxset)
 #end main script----------------------------------------------   


 #------functions-------#
#gets unique set of attributes - returns a set()
def getUniqueAttributes(layer, fieldname):
    values = set()
    for feature in layer.getFeatures():
        values.add(feature[fieldname])
    return values

#quickly selects all points on a layer, given a query 
def selectionQuick(layer, queryitem):
    layer.removeSelection ()

    #hardcoded field name
    expr = QgsExpression( "\"Mapping_La\" = '" + queryitem +"'")
    it = layer.getFeatures( QgsFeatureRequest( expr ) )
    ids = [i.id() for i in it]
    layer.setSelectedFeatures( ids )

#for a set of unique items, get bounding boxes 
def getBoundings(layer, itemset):
    bboxes = {}
    for itemname in itemset:
        selectionQuick(layer,itemname)
        box = layer.boundingBoxOfSelected()
        bboxes[itemname] = box
    return bboxes

#for a layer create a bunch of boxes
def createBoxes(layer, boxes):
    id=0
    for boxkey in boxes:
        id = id +1
        box=boxes[boxkey]
        feat = QgsFeature(layer.pendingFields())
        geom = QgsGeometry.fromRect(box)
        feat.setAttribute('id', id)
        #hardcoded field name
        feat.setAttribute('CareType', boxkey)
        feat.setGeometry(geom)
        (res, outFeats) = layer.dataProvider().addFeatures([feat])

def deleteBoxes(layer):
        ids = [f.id() for f in layer.getFeatures()]
        layer.dataProvider().deleteFeatures( ids )

3
@ জোনো প্যাটারসন আপনি যদি এখন আরম্ভের জন্য বর্ণিত পাইথন স্ক্রিপ্টটিও ভাগ করে দিতেন তবে এটি এখনকার সেরা উত্তর হতে পারে;)
বারান্দ ভি।

ঠিক আছে এটি করবে - যদিও এটি মোটামুটি এন প্রস্তুত তাই এটির জন্য কিছু টুইট দরকার (বছরের পর বছর কোনও কোডিং করা হয়নি!)। এটি করার সর্বোত্তম উপায় কী - কেবল একটি কোডবক্সে পেস্ট করুন?
জোনো প্যাটারসন

@ জোনো প্যাটারসন স্ক্রিপ্টটির জন্য আপনাকে অনেক ধন্যবাদ। আমার কাছে শিক্ষানবিস হিসাবে, এটি ইতিমধ্যে খুব দুর্দান্ত দেখাচ্ছে :) :) আমি নিশ্চিত যে খুব শীঘ্রই আমার এটির প্রয়োজন হবে।
বারেন্ড ভি।

আপনার উদাহরণের এক্সপ্রেশনগুলি কিছুটা ভুল - এটি "$ atlasfeature" হওয়া উচিত, "$ atlasfeatureid" নয়
ndawson
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.