পাইকিজিআইএসে লম্ব লাইন অঙ্কন?


33

আমার এইরকম পরিস্থিতি রয়েছে:

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

আমাকে যা করতে হবে তা হ'ল প্রতিটি বিন্দু সর্বাধিক যে লাইনের সাথে সংযুক্ত করা যায়, আসুন বিন্দু থেকে 200 মিটার দূরে বলি। অন্য কথায়, আমাকে বাফারে থাকা প্রতিটি লাইনের প্রতিটি লম্বের লম্ব আঁকতে হবে।

পাইকিজিআইএস-এ এটি করার কোনও উপায় আছে কি?

উত্তর:


40

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

# basic example with PyQGIS
# the end points of the line
line_start = QgsPoint(50,50)
line_end = QgsPoint(100,150)
# the line
line = QgsGeometry.fromPolyline([line_start,line_end])
# the point
point = QgsPoint(30,120)

পিটি লাইন

def intersect_point_to_line(point, line_start, line_end):
     ''' Calc minimum distance from a point and a line segment and intersection'''
      # sqrDist of the line (PyQGIS function = magnitude (length) of a line **2)
      magnitude2 = line_start.sqrDist(line_end) 
      # minimum distance
      u = ((point.x() - line_start.x()) * (line_end.x() - line_start.x()) + (point.y() - line_start.y()) * (line_end.y() - line_start.y()))/(magnitude2)
      # intersection point on the line
      ix = line_start.x() + u * (line_end.x() - line_start.x())
      iy = line_start.y() + u * (line_end.y() - line_start.y())
      return QgsPoint(ix,iy)

line = QgsGeometry.fromPolyline([point,intersect_point_to_line(point, line_start, line_end)])

এবং ফলাফল হয়

ফলে

আপনার সমস্যার সমাধানটি অভিযোজিত করা সহজ, কেবলমাত্র সমস্ত লাইন বিভাগগুলি লুপ করে সেগমেন্টগুলি শেষ পয়েন্টগুলি বের করে ফাংশনটি প্রয়োগ করুন।

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