কিউজিআইএস-এ পললাইন বরাবর এলোমেলো পয়েন্ট তৈরি করছেন?


11

আমি কিউজিআইএস-তে একটি পললাইন শেফফাইল বরাবর এলোমেলো পয়েন্ট তৈরি করার চেষ্টা করছি। মূলত, 'গবেষণা সরঞ্জামগুলিতে' র্যান্ডম পয়েন্টস 'সরঞ্জামের মতো তবে বহুভুজগুলির পরিবর্তে পলিলাইনগুলির জন্য।

আমি লাইন ফাইলটিকে বহুভুজ শেফফাইলে রূপান্তরিত করার চেষ্টা করেছি, তবে এটি বহুভুজ দিয়ে কিছু অঞ্চলে পূরণ হয়, অন্য অঞ্চলগুলি দীর্ঘ লাইনের ধরণের বহুভুজ থেকে যায়।

আমি কিউজিআইএস-এ বেশ নতুন, এবং পাইথন কোডের সাথে আমি সত্যিই পরিচিত নই।


আপনি যদি আরে উঠতে ইচ্ছুক হন তবে স্প্যাটস্যাট প্যাকেজের লাইনে র্যান্ডম পয়েন্ট তৈরির সরঞ্জাম রয়েছে।
মিশা

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

উত্তর:


14

এই কোড কিউজিআইএস-এর সর্বশেষতম দেব বিল্ডে কাজ করবে।

from qgis.utils import iface
from qgis.core import *
from PyQt4.QtCore import QVariant
import random

def createRandomPoints(count):       
    # Create a new memory layer to store the points.
    vl = QgsVectorLayer("Point", "distance nodes", "memory") 
    pr = vl.dataProvider()  
    pr.addAttributes( [ QgsField("distance", QVariant.Int) ] )
    layer = iface.mapCanvas().currentLayer()

    # For each selected object
    for feature in layer.selectedFeatures():
        geom = feature.geometry()
        length = geom.length()
        feats = []
        # Loop until we reach the needed count of points.
        for i in xrange(0,count):
            # Get the random distance along the line.
            distance = random.uniform(0, length)
            # Work out the location of the point at that distance.
            point = geom.interpolate(distance)

            # Create the new feature.
            fet = QgsFeature()
            fet.setAttributeMap( { 0 : distance } )
            fet.setGeometry(point)
            feats.append(fet)

        pr.addFeatures(feats)
        vl.updateExtents()  

    QgsMapLayerRegistry.instance().addMapLayer(vl)

আমি জানি আপনি বলেছেন যে আপনি পাইথন কোডের সাথে খুব বেশি পরিচিত নন তবে আপনার এটি খুব সহজ চালাতে সক্ষম হওয়া উচিত। উপরের কোডটি কোনও ফাইলে অনুলিপি করুন (আমার কল হয় locate.py) এবং আপনার ~/.qgis/pythonযদি উইন্ডোজ 7 এ থাকে যা C:\Users\{your user name}\.qgis\python\উইন্ডোজ এক্সপিতে বা উইন্ডোজ এক্সপিতে থাকে তবে আপনার এটিতে রাখুনC:\Documents and Settings\{your user name}\.qgis\python\

ফাইলটি পাইথন ফোল্ডারে আসলে কিউজিআইএস খুলুন এবং কয়েকটি লাইন অবজেক্ট নির্বাচন করুন।
স্তর নির্বাচন

তারপরে পাইথন কনসোলটি খুলুন এবং নিম্নলিখিত কোডটি চালান:

import locate.py 
locate.createRandomPoints(10)

পাইথন কনসোল

ফলাফলটি এর মতো দেখতে হবে

ফলাফল

আপনি যদি এটি আবার চালাতে চান তবে আরও কয়েকটি লাইন নির্বাচন করুন এবং locate.createRandomPoints(10)পাইথন কনসোলে আবার চালনা করুন ।

দ্রষ্টব্য: সন্ধান করুন ক্রেটআর্যান্ডমপয়েন্টস (10) 10 এখানে প্রতি লাইনে উত্পন্ন পয়েন্টের সংখ্যা


সব আপনার সাহায্যের জন্য ধন্যবাদ! কোডটি সংরক্ষণ করার জন্য আমি কোন ফর্ম্যাটে নিশ্চিত নই - আমি কীভাবে পাই এক্সটেনশান সহ এটি ফাইল করব? দুঃখিত যদি এগুলি বেশ কয়েকটি প্রাথমিক প্রশ্ন থাকে।
Cec.g

সাধারণ পাঠ্য ফাইলে পাঠ্যটি অনুলিপি করুন এবং এক্সটেনশন হিসাবে এটি কেবল .py দিয়ে সংরক্ষণ করুন।
নাথান ডব্লিউ

আমি চেষ্টা যে কিন্তু এটা এই ত্রুটি নিয়ে আসে: ImportError: কোন মডিউল নামে locate.py
Cec.g

এটি ফাইলের পথ: সি: \ ব্যবহারকারীরা ec সিসিলি q .কিগিস \ পাইথন
সিসি.g

আপনি কি import locateপাইথন কনসোলে .py ব্যবহার করার প্রয়োজন নেই?
নাথান ডাব্লু

3

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

আরও জটিল ক্ষেত্রে, আমি একটি অনেক ঘন রেন্ডম নমুনা তৈরি করব এবং তারপরে যথাযথ (যা যাই হোক না কেন) দ্বিতীয় ধাপে পয়েন্টগুলি তুলি। ডেনসিফায় সরঞ্জাম দিয়ে অনুরূপ কিছু করা যেতে পারে তবে তারপরে সমস্ত পয়েন্টগুলি পলিনগুলিতে থাকবে।

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