বৈশিষ্ট্য সারণীতে দিকনির্দেশ এবং দূরত্ব কীভাবে যুক্ত করবেন?


18

যে কেউ সাহায্য করতে পারে। আমি কেবল পললাইন / লাইন ডেটাতে আমার নতুন ক্ষেত্র হিসাবে দিকনির্দেশ (ভারবহন: যেমন এন 25 35 ই) এবং দূরত্ব (দৈর্ঘ্য: 125 মিটার) যুক্ত করতে চাই। এই ক্ষেত্রগুলি তৈরি করতে কোনও প্লাগ-ইন রয়েছে? আমি আমার লাইন ডেটাতে "রফতানি / জ্যামিতি কলামগুলি যুক্ত" করার চেষ্টা করেছি, তবে কেবল "দৈর্ঘ্য" মান যুক্ত হয়েছিল।


আমার দূরত্ব দেওয়ার জন্য এখন পর্যন্ত আমি এমএমকিউইস প্লাগইনটি ব্যবহার করতে পারি। দিকনির্দেশ সমস্যাটি অন্বেষণ করছি।
উইলি

1
আপনার পললাইন ডেটা দেখতে কেমন? দূরত্ব গণনা করা তুলনামূলকভাবে সহজ - তবে, 'ভারবহন' কোনও পললাইনের দৈর্ঘ্যের পরিবর্তে পরিবর্তিত হতে পারে। আপনি কি শুরু থেকে শেষ পয়েন্ট পর্যন্ত ভার্জিংয়ের সন্ধান করছেন ?
সিম্বামাঙ্গু

হ্যাঁ, আমি শুরু থেকে শেষ পয়েন্ট পর্যন্ত
ভার্জিংয়ের সন্ধান করছি

1
আপনি কি সূচনাপুস্তক থেকে শেষের অবস্থানের জন্য সোজা-রেখার দূরত্ব বা লাইনের পথ অনুসরণ করে রেখার দৈর্ঘ্য চান? লাইন বিভাগে অন্তর্বর্তী বক্ররেখা বা দিকনির্দেশের অন্যান্য পরিবর্তনগুলি থাকলে এগুলি ব্যাপকভাবে পরিবর্তিত হতে পারে।
রায়ানকেডালটন-অফগ্রিড গ্রিডম্যাপস

উত্তর:


42

আপনি কিউজিআইএস-র ফিল্ড ক্যালকুলেটরে বিয়ারিং গণনা করতে পারেন। এটি ইউটিএম (মেট্রিক) ছোট দূরত্বে (কয়েক কিলোমিটার) স্থানাঙ্কে কাজ করে তবে বড় দূরত্বের জন্য বা দশমিক ডিগ্রির জন্য আরও কিছু পরিশীলিত প্রয়োজন।

আপনার লাইন স্তরটির জন্য অ্যাট্রিবিউট টেবিলটি খুলুন, টগল সম্পাদনা করুন এবং ডায়ালগটি খুলতে ফিল্ড ক্যালকুলেটর বোতামটি ক্লিক করুন:

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

1 বা 2 যথার্থতার সাথে দশমিক হিসাবে একটি নতুন ক্ষেত্র তৈরি করুন।

"এক্সপ্রেশন" বাক্সে এই কোডটি আটকান এবং "ওকে" ক্লিক করুন: (atan((xat(-1)-xat(0))/(yat(-1)-yat(0)))) * 180/3.14159 + (180 *(((yat(-1)-yat(0)) < 0) + (((xat(-1)-xat(0)) < 0 AND (yat(-1) - yat(0)) >0)*2)))

প্রথম অংশটি x এবং y পার্থক্যের বিপরীত স্পর্শক গণনা করে এবং এটি ডিগ্রীতে রূপান্তর করে (180 / pi)। দ্বিতীয় অংশটি 0-360 from থেকে বিয়ারিং দিতে ফলাফলের সাথে 180 বা 360 যোগ করে °


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

1
@ আরজান্দিয়া - নোট করুন যে আপনি কিউজিআইএস ১.৯ ব্যবহার করতে হবে (বিটা ডাউনলোডের জন্য হোম পেজটি দেখুন) xat () এবং ইয়াত () ফাংশনগুলি 1.7 তে কাজ করে না, যা আপনি ব্যবহার করছেন!
সিম্বামাঙ্গু

আপনার উল্লিখিত প্লাগটি আমি ইতিমধ্যে ব্যবহার করেছি। আপনি যেমন ছবিটি দেখতে পাচ্ছেন, স্তরটির নামটি "বিভক্ত" ...
আরজান্দিয়া

1
আমার নিজের প্রশ্নের উত্তরের জন্য, "হ্যাঁ আপনি ইয়ট (0) / ইয়াত (-1) এবং জ্যাট (0) / জ্যাট (-1) এর জন্য ক্ষেত্রের মান সন্নিবেশ করতে পারেন।"
সিবিউন

1
এটির কাজ পেতে আমাকে স্ক্রিপ্টে কিছু পরিবর্তন করতে হয়েছিল: (আতান ((xat (0) -xat (1)) / (ইয়াত (0) -যায়াট (1))) * 180 / 3.14159 + (180 * (((ইয়াত (0) -যায়াট (1)) <0) + (((xat (0) -xat (1)) <0 এবং (ইয়াত (0) - ইয়াত (1))> 0) * 2)))
ওসকলিন

21

আপনার একটি প্লাগইন লাগবে না। পাইকিজিআইএস-এর ক্লাস কিউজপয়েন্টে সমস্ত কিছুই

যদি আপনি পাইথন কনসোলে পাইথন অন্তর্নির্মিত ফাংশন ডির () দিয়ে QGIS পয়েন্ট শ্রেণীর বিষয়বস্তু পরীক্ষা করেন।

dir(point])
['__class__', '__delattr__', '__dict__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__'
, '__getitem__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__module__', 
'__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', 
'__str__', '__subclasshook__', '__weakref__', 'azimuth', 
'multiply', 'set', 'setX', 'setY', 'sqrDist', 'sqrDistToSegment', 'toDegreesMinutesSeconds', 'toString', 'wellKnownText', 'x', 'y']

আপনি দেখতে পাচ্ছেন আজিমুথ এবং এসকিআরডিস্ট ফাংশন রয়েছে এবং কয়েকটি চেষ্টা করার পরে:

- xy[0].azimuth(xy[1]) or xy[1].azimuth(xy[0]) gives the azimuth direction between two points(in degrees, +/- 180°)
- xy[0].sqrDist(xy[1]) give the square distance between two points (in the unit of the project)

সমস্যাটি এখানে চিত্র বর্ণনা লিখুন

পাইথন কনসোলে তাই

def select_all(layer):
     layer.select([])
     layer.setSelectedFeatures([obj.id() for obj in layer])

myline = qgis.utils.iface.activeLayer()
select_all(myline)
for elem in myline.selectedFeatures():
      xy = elem.geometry().asPolyline()

এখন xy লাইনের সমস্ত নোড (পয়েন্ট) ধারণ করে

# first point
print "x=%2d y=%2d" % (xy[0].x(),xy[0].y())
x=112935 y=117784
# and others...

লাইনের সমস্ত নোড পয়েন্ট ব্যবহার করে:

1) আজিমুথ পয়েন্ট i to পয়েন্ট i + 1 (+/- 180 °) (একটি লাইনের নোড)

for i in range(len(xy)-1):
     print "x=%2d y=%2d azim=%6.1f azim2=%6.1f" % (xy[i].x(), xy[i].y(), xy[i].azimuth(xy[i+1]), xy[i+1].azimuth(xy[i]))

x=112935 y=117784 azim= 168.4 azim2= -11.6
x=113032 y=117312 azim=-167.5 azim2=  12.5
x=112926 y=116835 azim= 177.3 azim2=  -2.7
x=112943 y=116472 azim= 145.1 azim2= -34.9
[...]

2) পয়েন্ট i এবং পয়েন্ট i + 1 এর মধ্যে ইউক্লিডিয়ান দূরত্ব

for i in range(len(xy)-1):
     print "x=%2d y=%2d dist=%6.1f" % (xy[i].x(), xy[i].y(), xy[i].sqrDist(xy[i+1]))

x=112935 y=117784 dist=232533.9
x=113032 y=117311 dist=238243.6
x=112926 y=116835 dist=131839.8
x=112943 y=116472 dist=209268.1
[...]

পরে, বৈশিষ্ট্য সারণীতে এই মানগুলি যুক্ত করা খুব কঠিন নয়।

আমি ম্যাটপ্লটলিব এবং স্ক্রিপ্ট রানার প্লাগইন সহ লাইনামেন্টগুলি (ভূতত্ত্ব) বিশ্লেষণ করতে এই কৌশলটি ব্যবহার করি

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


5
+1 - দুর্দান্ত সমাধান! অবশ্যই ... শিখুন ... পাইথন ...
সিম্বামাঙ্গু

এটি ভূতাত্ত্বিকদের কাছে একটি দুর্দান্ত সমাধান এবং সুপার মূল্যবান .. তবে এটিও জটিল
শান

10

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

case
when yat(-1)-yat(0) < 0 or yat(-1)-yat(0) > 0 then 
(atan((xat(-1)-xat(0))/(yat(-1)-yat(0)))) * 180/3.14159 + 
(180 *
(((yat(-1)-yat(0)) < 0) + 
(((xat(-1)-xat(0)) < 0 AND (yat(-1) - yat(0)) >0)*2)
))
when ((yat(-1)-yat(0)) = 0 and (xat(-1) - xat(0)) >0) then 90
when ((yat(-1)-yat(0)) = 0 and (xat(-1) - xat(0)) <0) then 270
end
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.