মানচিত্রের সাথে মিলছে জিপিএস রোড নেটওয়ার্কের দিকে!


11

পোস্টগ্রিস এবং পোস্টজিআইএসে আমি বেশ নতুন।

আমি কয়েকটি জিপিএস পয়েন্টের একটি সাধারণ মানচিত্রের মিল (বা আপনি চাইলে পথ-অনুকরণ) করার চেষ্টা করছি। আমি পোস্টগ্রিস (পোস্টগিস) ব্যবহার করছি ।

আমার ডাটাবেসে আমার জিপিএস পয়েন্ট রয়েছে এমন একটি টেবিল রয়েছে: জিপিএসপয়েন্টস (ল্যাট, লং, সময়, গতি, আজিমুথ, জ্যামিতি, ...)

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

আমি প্রতিটি জিপিএস পয়েন্টটি নিকটতম লিঙ্কের সাথে সংযুক্ত করতে চাই (পয়েন্টের চারপাশে 20 মিটারের একটি বাফারে) কেবল যদি লিঙ্কের দিকটি জিপিএস পয়েন্টের (+ বা -15 ডিগ্রি) অ্যাজিমুথের সাথে একমত হয় এবং প্রস্তাবিত অবস্থানটি পুনরুদ্ধার করে। অন্যথায় আমি এটি 20 মিটার বাফারের মধ্যে নিকটস্থ নিকটবর্তী লিঙ্কটি অনুসন্ধান করতে চাই, এতে একটি গ্রহণযোগ্য আজিমুথ আছে! (ঠিক ছবির মতো!)

আমি চান জিপিএস পয়েন্টগুলির নতুন স্থানাঙ্কগুলি "প্রজেক্টেড ল্যাট" এবং "প্রজেক্টড লং" হিসাবে টেবিল "জিপিএসপয়েন্টস" এ যুক্ত করা হোক।

(নীচের ছবিতে প্রকৃত পয়েন্টগুলি একটি দিকনির্দেশ ব্যবহার করে প্রদর্শিত হয় যখন প্রস্তাবিত পয়েন্টগুলির কোনও দিক চিহ্ন থাকে না) এখানে চিত্র বর্ণনা লিখুন


এটি একটি আকর্ষণীয় সমস্যা। আমি ধরে নিলাম যে যদি 20 মিটার বাফারের পরবর্তী পয়েন্টটিতে একটি অগ্রহণযোগ্য অজিমূথও থাকে, তবে আপনি অনুসন্ধান চালিয়ে যেতে চান?
জন পাওয়েল

হ্যাঁ জন, তবে কেবলমাত্র 20 মিটার বাফারের সাথে থাকা রাস্তার খণ্ডগুলির জন্য ! প্রকৃতপক্ষে, আমি 20 মিটার বাফারে থাকা রাস্তার অংশগুলি সনাক্ত করতে চাই, তারপরে নিকটতম অংশটি খুঁজে নিন যার একটি গ্রহণযোগ্য আজিমুথ আছে!
নাদার

"আমি লিঙ্কগুলির আজিমুথ রাখি না, এবং পোস্টগিস ফাংশন এসT_azimuth ব্যবহার করে কীভাবে এটি গণনা করতে পারি তা আমি নিশ্চিত নই I আমার সমস্ত কিছুই উপরে বর্ণিত কলামগুলিতে থাকা রাস্তা নেটওয়ার্কের একটি আকার ফাইল।" আপনি shp2pgsql দিয়ে আপনার রাস্তা পোস্টগ্রিস / পোস্টজিআইএসে আনতে (এবং হওয়া উচিত) করতে পারেন । তারপরে আপনি ব্যবহার করতে পারেন ST_Azimuthতবে মনে রাখবেন যে এটি আপনাকে ডিজিটাইজেশনের দিকের দিক দিয়ে আজিমুথটি বলবে ।
বর্ণমালাটিউব

উত্তর:


1

আমার কাছে পুরোপুরি কাজ করার উত্তর নেই, তবে আপনাকে শুরু করার জন্য যথেষ্ট। এই ফাংশনগুলি সাহায্য করতে পারে:

এসT_লাইন_লোক_পয়েন্ট () একটি রেখার সাথে পয়েন্টের মোট রেখার দৈর্ঘ্যের অংশ হিসাবে দূরত্ব দেয়। এসT_লাইন_ইন্টারপ্লোলেট_পয়েন্ট () একটি রেখার বরাবর একটি নির্দিষ্ট দূরত্বে (আবার মোট দৈর্ঘ্যের অংশ হিসাবে) একটি বিন্দুর জন্য একটি বিন্দুর জ্যামিতি ফিরিয়ে দেয়।

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

তারপরে আপনি এই কোণটি জিপিএসপয়েন্ট যুক্ত করতে হবে কিনা তা নির্ধারণ করতে আপনার জিপিএসপয়েন্টের আজিমুথের সাথে তুলনা করতে পারেন।

with new_pts AS (
    SELECT ST_ClosestPoint(geom, gpspoints) AS geompt
    FROM routes JOIN gpspoints ON ST_Distance(routes.geom, gpspoints.geom)<20
    )


SELECT ST_Azimuth(new_pts.geompt, 
    ST_Line_Interpolate_Point(routes.geom, 
        ST_Line_Locate_Point(routes.geom, new_pts.geompt)*0.999))

FROM routes JOIN new_pts ON ST_Distance(routes.geom,new_pts.geompt)<20;

আবার, পরীক্ষা করা হয়নি তবে আমি আশা করি এটি কিছুটা সহায়ক হবে।


0

এরকম কিছু চেষ্টা করুন:

  1. ডিগ্রিগুলিতে আপনার পলিনগুলির ওরিয়েন্টেশন গণনা করুন, উদাহরণস্বরূপ: আর্কজিআইএস ফিল্ড ক্যালকুলেটরটিতে: 180 + math.atan2 ((! shape.firstPoint.X! -! shape.lastPoint.X!), (! shape.firstPoint.Y! -! শেপ.লাস্টপয়েন্ট.ওয়াই!)) * (180 / গণিত.পিআই)

  2. আপনার রোড নেটওয়ার্কটিকে রাস্তার শীর্ষে (পয়েন্ট) রূপান্তর করুন এবং পোস্টজিআইএসে আমদানি করুন।

  3. মিলে যাওয়া অ্যালগরিদম প্রয়োগ করুন:

    মিলের মধ্যে অন্তর্ভুক্ত করুন (গিড, যানবাহন_আইডি, বিভাগ_আইডি, তারিখ, সময়, the_geom)

    DISTINCT ON (b.gid) বিপিড, বি.ভিহিকল_আইডি, এ.সিগমেন্ট_আইডি, বি.ডেট, বি.টাইম, এসT_ ক্লসস্টপয়েন্ট (এস.ক্লোকলেট (a.the_geom), b.the_geom )_জয়ম FROM হিসাবে নির্বাচন করুন

    সেগমেন্ট_সামগ্রী_সামান্য অভ্যন্তরীণ যোগদানের যান_জুম বি এস এস ডেভিথিন (এসT_ ট্রান্সফর্ম (a.the_geom, 32632),

    ST_Transfor (b.the_geom, 32632), 20) যেখানে ((CAST (a.azimuth AS float8)) - CAST (b.direction AS float8)) <180 OR (CAST (a.azimuth AS float8) - CAST (b.direction) AS float8))> -180) B.gid, b.vehicle_id, a.seਮੈਂਟ_id, b.date, b.Time, a.the_geom, b.the_geom অর্ডার বাই b.gid, এসT_ দূরত্ব (a.the_geom, b) এর মাধ্যমে গ্রুপ .the_geom);

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