কিউজিআইএস-এ প্রতীকীকরণের জন্য ফিল্ড-টু-আরজিবি ম্যাপিং ব্যবহার করছেন?


10

কিউজিআইএস সংস্করণ 1.7 ব্যবহার করে।

আমার একটি সরল পাঠ্য ফাইল রয়েছে যা একটি কোডের বিরুদ্ধে rgb মানগুলির একটি সেট তালিকা করে। আমি এই রঙের টেবিলটি টেক্সট ফাইলে একটি কোডে এর কোনও একটি বৈশিষ্ট্য ক্ষেত্র ('মানচিত্র_সঙ্কাপ') ম্যাপ করে বহুভুজ স্তরকে রঙ করতে চাই।

রঙের টেবিলটি খুব দীর্ঘ, এবং দেখতে এটির মতো:

$ head gsv1Msymbology.txt
MAPCODE RED GREEN   BLUE
Oc  143 255 255
WAT 255 255 255
Qa  244 250 202
Qdl 195 239 218
Na  248 255 238
Qd2 227 255 190
Qxw 248 255 238
Qns 255 148 83
Qn  255 202 190
.... 

আমি MAPCODE- তে একটি মানটির সাথে আমার 'map_symb' বৈশিষ্ট্যটির সাথে মিল রাখতে চাই এবং বহুভুজগুলিকে রঙিন করতে সংশ্লিষ্ট আরজিবি মানগুলি ব্যবহার করতে চাই।

এটি করার কোনও গুই উপায় আছে?


1
আমি এর জন্য একটি বৈশিষ্ট্য অনুরোধ পেশ করেছি: hub.qgis.org/issues/4339
আন্ডার ডার্ক

সমাধানের জন্য এই প্রশ্নটি দেখুন এবং প্রতিক্রিয়াগুলি দেখুন: gis.stackexchange.com/questions/15185/…
একটি আলাদা বেন

এটি কিউআইজিআইএস ২.০ থেকে পরবর্তীকালে ডেটা সংজ্ঞায়িত প্রতীক হিসাবে প্রয়োগ করা হয়েছে: gis.stackexchange.com/questions/60450/…
আন্দ্রেজে

উত্তর:


10

আপনি এলিমেট্রি মডিউল সহ পাইথন ব্যবহার করতে পারেন:

from string import *
from xml.etree import cElementTree as ET

class symbol:
    def __init__(self,b=[]):
            self.typec= typec
            self.b = b
            self.key = ['MAPCODE','R','G','B']
            self.data = dict(zip(self.key,self.b))
            self.symb = ET.SubElement(typec,"symbol")
            self.lower = ET.SubElement(self.symb, "lowervalue")
            self.upper = ET.SubElement(self.symb, "uppervalue")
            self.outline = ET.SubElement(self.symb,"outlinecolor")
            self.outsty = ET.SubElement(self.symb, "outlinestyle")
            self.outtail = ET.SubElement(self.symb, "outlinewidth")
            self.fillc = ET.SubElement(self.symb,"fillcolor")
            self.fillp = ET.SubElement(self.symb,"fillpattern")

    def creation(self):
            self.lower.text = self.data['MAPCODE']
            self.upper.text = self.data['MAPCODE']
            self.outsty.text="SolidLine"
            self.outtail.text="0.26"
            self.outline.set("red",str(self.data['R']))
            self.outline.set("green",str(self.data['G']))
            self.outline.set("blue",str(self.data['B']))
            self.fillc.set("red",str(self.data['R']))
            self.fillc.set("green",str(self.data['G']))
            self.fillc.set("blue",str(self.data['B']))
            self.fillp.text = "SolidPattern"

# QML file creation
intro = ET.Element("qgis")
transp = ET.SubElement(intro,"transparencyLevelInt")
transp.text = '255'
classatr = ET.SubElement(intro, "classificationattribute")
classatr.text= "MAPCODE"
typec = ET.SubElement(intro,"uniquevalue")
classif = ET.SubElement(typec,"classificationfield")
classif.text="MAPCODE"

# RGB file processing              
def main():
    file = "RGB.txt"
    f= open(file,"r")
    while 1 :
        line = f.readline()
        if not line :
            break
        elem = split(line,',') #or tab, or space, or
        symboltag = symbol(elem)
        symboltag.creation()
     result = ET.ElementTree(intro)
     result.write("RGB.qml")

if __name__ == '__main__':
    main()

এই স্ক্রিপ্ট দ্বারা উত্পাদিত স্টাইল ফাইলটি (এবং এটি কাজ করে):

  <qgis>
  <transparencyLevelInt>255</transparencyLevelInt>
   <classificationattribute>MAPCODE</classificationattribute>
   <uniquevalue>
      <classificationfield>MAPCODE</classificationfield>
         <symbol>
             <lowervalue>Oc</lowervalue>
             <uppervalue>Oc</uppervalue>
             <outlinecolor blue="143" green="255" red="255" />
             <outlinestyle>SolidLine</outlinestyle>
             <outlinewidth>0.26</outlinewidth>
             <fillcolor blue="143" green="255" red="255"/>
             <fillpattern>SolidPattern</fillpattern>
          </symbol>
          <symbol>
             <lowervalue>WAT</lowervalue>
             <uppervalue>WAT</uppervalue>
             <outlinecolor blue="255" green="255" red="255" />
             <outlinestyle>SolidLine</outlinestyle>
             <outlinewidth>0.26</outlinewidth>
             <fillcolor blue="255" green="255" red="255" /> 
             <fillpattern>SolidPattern</fillpattern>
          </symbol>
              and so...
   </uniquevalue>
</qgis>

আরজিবি কলাম সহ শেফফিলের জন্য আপনি শেপফাইল মডিউল ([শেফফিল]) 1 ও ব্যবহার করতে পারেন

import shapefile ....
[....]
noduplicates = []

def main():
sf = shapefile.Reader("RGBshape")
for rec in enumerate(sf.records()):
    if rec[1][0] not in noduplicates:
        noduplicates.append(rec[1][0])
        symboltag = symbol(rec[1])
        symboltag.creation()      
    else:
        continue

এবং তাই...


14

কিউজিআইএস-র পরবর্তী সংস্করণে অনুরোধ করা কাজটি করা সহজ।

কেবল স্তর বৈশিষ্ট্য, স্টাইল ট্যাব খুলুন এবং একক প্রতীক নির্বাচন করা হয়েছে তা নিশ্চিত করুন। "পূরণ করুন" রঙের পাশের বক্সটি ক্লিক করুন এবং "সম্পাদনা করুন" নির্বাচন করুন।

আপনি অবিচ্ছিন্ন সীমানা রঙের সাথে (ডাটা টেবিলের উপর উপস্থিত আরজিবি রঙগুলিতে আপনার বহুভুজ ঘাঁটির ভিত্তি রঙটি সম্পাদনা করবেন (প্রয়োজনে আপনি একই মানদণ্ড প্রয়োগ করতে পারেন)।

"সম্পাদনা" এ আঘাত করার পরে কেবলমাত্র নিম্নলিখিত টেক্সটটি ব্যবহার করে আপনার টেবিলের 3 টি আরজিবি কলামের নাম দিন:

color_rgb ( "আর-কলাম", "জি-কলাম", "বি-কলাম")

ঠিক আছে, প্রয়োগ এবং আপনার সম্পন্ন।

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

এখানে চিত্র বর্ণনা লিখুন


5

আপনি যদি কিছু ভেক্টর ডেটা পুনরাবৃত্তিযোগ্য উপায়ে শ্রেণিবদ্ধ করতে চান তবে আপনি যা করতে পারেন তা এখানে:

  • আপনার ভেক্টরকে কিউজিআইএসে লোড করুন।
  • স্ক্রিনের বাম দিকে "স্তরগুলি" প্যানেলে স্তরটিতে ডান ক্লিক করুন।
  • প্রদর্শিত মেনুতে "সম্পত্তি" এ ক্লিক করুন।
  • প্রদর্শিত উইন্ডোতে "স্টাইল" ট্যাবে ক্লিক করুন।
  • স্ক্রিনে একটি ড্রপ-ডাউন তালিকার আইটেম থাকা উচিত যা "একক প্রতীক" বলে। এটিতে ক্লিক করুন এবং এর মানটিকে "শ্রেণিবদ্ধ" করুন change
  • ইন্টারফেস বিন্যাসটি পরিবর্তিত হবে, আপনাকে "কলাম" লেবেলযুক্ত একটি নতুন বিকল্প দেবে। এটিতে ক্লিক করুন এবং "map_symb" ক্ষেত্রটি নির্বাচন করুন।
  • বড় ফাঁকা ক্ষেত্রের নীচে "শ্রেণিবদ্ধ" বোতামটি ক্লিক করুন। খালি ক্ষেত্রটি আপনার ডেটাসেটে "মানচিত্র_সাম্বিক" কলামের বিষয়বস্তু দিয়ে পপুলেশন করা হবে।
  • আপনি যে প্রতীকগুলি পরিবর্তন করতে চান তাতে ডাবল ক্লিক করুন। প্রদর্শিত উইন্ডোতে, "পরিবর্তন" লেবেলযুক্ত বোতামটি ক্লিক করুন।
  • এটি আপনাকে প্রদত্ত বৈশিষ্ট্যের মানটির জন্য রঙ পরিবর্তন করতে দেয়।
  • যতক্ষণ না আপনি প্রয়োজনীয় রঙগুলি পরিবর্তন না করেন এটি চালিয়ে যান।
  • আপনার হয়ে গেলে, আপনি "স্টাইল সংরক্ষণ করুন ..." বোতামে ক্লিক করে শৈলীটি সংরক্ষণ করতে চাইতে পারেন। এটি আপনাকে এই একই উইন্ডোতে থাকা অবস্থায় "লোড স্টাইল ..." ক্লিক করে অন্য যে কোনও ডেটাসেটে একই স্টাইল প্রয়োগ করতে দেয়। এটি আপনি টেক্সট ফাইলটিকে ডেটাসেটের সাথে সংযুক্ত করে অর্জন করার চেষ্টা করছেন যা সম্ভব নয় আফ্রিক। একবার আপনি শৈলীটি সংরক্ষণ করার পরে, আপনি এটি নিম্নলিখিত যে কোনও ডেটাসেটগুলিতে ব্যবহার করতে সক্ষম হবেন (ধরে নিবেন তাদের একই বৈশিষ্ট্যের মান রয়েছে)। আপনি যদি স্টাইলের সেভ ফাইলটি খোলেন, আপনি দেখতে পাবেন এটি কেবল সরল পাঠ্য, যা আপনি চাইলে সম্পাদনা করতে পারেন। এই ফাইলটি কেবল কোনও পাঠ্য সম্পাদকের মধ্যে নিজেই লেখা সম্ভব, তবে জিইউআইয়ের মাধ্যমে এটি করা আরও দ্রুত এবং সহজ।
  • আপনার পরিবর্তনগুলি দেখতে "প্রয়োগ করুন" এবং স্তর বৈশিষ্ট্য উইন্ডোটি বন্ধ করতে "ঠিক আছে" ক্লিক করুন।

1
এটি যখন ওপিতে ইতিমধ্যে পছন্দসই রঙগুলির একটি টেবিল রয়েছে তখন এটি প্রচুর পরিশ্রমের মতো মনে হয়। মূল টেবিল থেকে "সেভ স্টাইল" ফর্ম্যাটটি সরাসরি কী সেখানে যেতে হবে?
অ্যান্ডি ডব্লিউ

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

1
অ্যান্ডি বল দ্বারা এটি আছে; এখানে শত শত ম্যাপকোডি রয়েছে। এবং হ্যাঁ, আমি নিজেই এটি করতে জানি।
একটি আলাদা বেন

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