ছেদকাগুলিতে ওএসএম সড়কগুলিকে পৃথক বিভাগে কীভাবে ভাগ করা যায়?


10

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

রাস্তাগুলি অতিক্রম করা বা ছেদ করা সমস্ত আন্তঃসংশোধনগুলি সনাক্ত করতে আমি নিম্নলিখিতগুলি ব্যবহার করেছি SQL( পূর্ববর্তী প্রশ্নের অনুরূপ ):

CREATE TABLE split_points as
SELECT DISTINCT    
   ST_GeometryN(ST_Intersection(a.geom, b.geom),1) as geom      
FROM
   roads as a,
   roads as b
WHERE
    ST_Touches(a.geom, b.geom)
OR
    ST_Crosses(a.geom, b.geom)    
    AND a.gid != b.gid
GROUP BY
   ST_Intersection(a.geom, b.geom);

আমি এখন এই পয়েন্টগুলি ব্যবহার করে রাস্তাগুলি বিভক্ত করতে চাই। আমি নিম্নলিখিত পদ্ধতিটি ব্যবহার করেছি:

CREATE TABLE split_roads as
SELECT     
    ST_GeomFromEWKB((ST_Dump(ST_Split(g.geom, blade.geom))).geom) As geom,
    generate_series(1,ST_NumGeometries((ST_Split(g.geom, blade.geom)))) as gid
FROM    
    split_points as blade,
    roads as g
WHERE
    ST_Intersects(g.geom, blade.geom);

এই বিভক্ত পদ্ধতির সমস্যাটি হ'ল সমস্ত বিভক্ত টুকরা ছাড়াও পুরো রাস্তার দৈর্ঘ্য রয়ে গেছে। অন্তর্ভুক্ত থাকা এই বিভাজনযুক্ত রাস্তার জ্যামিতিগুলি সরাতে আমি ST_Equals()তাদের চিহ্নিত করতে এবং সেগুলি মুছতে ফাংশনটি ব্যবহার করেছি:

DELETE FROM split_roads USING roads
WHERE ST_Equals(split_roads.geom, roads.geom)

যাইহোক, এই পদ্ধতির সমস্ত অনুলিপি জ্যামিতিগুলি মুছে ফেলবে না (যদিও এটি তাদের কয়েকটি সরিয়ে দেয়)। মুছে ফেলার (বা সামগ্রিক) জন্য আরও ভাল পন্থা রয়েছে যাতে আমার কেবল কোনও টেবিলে বিভক্ত জ্যামিতি থাকে?


ডকুমেন্টেশন অনুসারে, এসT_স্প্লিট মূল, আনস্প্লিট জ্যামিতি ফিরিয়ে দেয় না। আপনার নির্বাচিত বিবৃতিটির প্রথম লাইনে শেষের বন্ধনী বন্ধ করার সময় সেই অতিরিক্ত '। জিম' কী? যে অপসারণ হিসাবে সহজ হতে পারে।
স্ক্রো

@ এসক্রো .geomআপনি কোনটির কথা উল্লেখ করছেন? এটি স্পট করতে পারে না!
djq

আমি টেকনিক্যালি অনুমান করি যে সেলেক্ট স্টেটমেন্টের দ্বিতীয় লাইন হবে। এছাড়াও আমি "স্প্লিট_রোডস" টেবিল তৈরির কথা উল্লেখ করছি। এটি লাইনটি '')) এর সাথে শেষ হয় ge
স্ক্রো

হুম, আমি যখন এটি করি তখন আমি একটি ত্রুটি পাই। ERROR: function st_geomfromewkb(geometry_dump) does not exist LINE 4: ST_GeomFromEWKB((ST_Dump(ST_Split(g.geom, blade.geom))))... ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts.
djq

পুরো লাইনটি কি এইরকম দেখাচ্ছে: ST_GeomFromEWKB ((ST_Dump (ST_Split (g.geom, blade.geom)))) রত্ন হিসাবে,
স্ক্রো

উত্তর:


6

আপনার সমস্যার আসল সমাধান নয়, তবে osm2po চেষ্টা করুন ... এটি পিগ্রাউটিংয়ে রাউটিংয়ের জন্য নিখুঁত এসকিউএল কোড তৈরি করে: http://osm2po.de/


পরামর্শের জন্য ধন্যবাদ. আমি চেষ্টা করেছি osm2pgroutingতবে এটির জন্য আমার সার্ভারের চেয়ে বেশি মেমরি দরকার এবং এটি শেষ না করেই শেষ হয়।
djq

2
@djq osm2po osm2pgrouting এর চেয়ে অনেক বড় ফাইল পরিচালনা করতে পারে। এমনকি এটি গ্রহ.ওসেম লোড করতে পারে
আন্ডার ডার্ক

আহ, আমি প্রাথমিকভাবে ভেবেছিলাম osm2poটাইপো ছিল। ওবুন্টুতে এটি ইনস্টল করার কোনও সরল?
djq

এটি একটি প্রস্তুত সংকলিত জেআর ফাইল (জাভা)। ওয়েবসাইটে বর্ণিত হিসাবে এটি চালান।
জিআইএস শিক্ষার্থী

11

সহজ উত্তর: না। আপনার এটি সেভাবে করা উচিত নয়।

ওএসএম রোড শেফিলগুলি থেকে চৌরাস্তা এবং ওভার / আন্ডারপাসগুলির মধ্যে পার্থক্য করা অসম্ভব। আপনি যদি সমস্ত আপাতদৃষ্টিতে ক্রসিং রাস্তাগুলি বিভক্ত করেন তবে আপনি এমন মোড়গুলি তৈরি করবেন যা বাস্তবে অস্তিত্ব নেই

আসল ওএসএম ফাইলের সাহায্যে আপনার হাতগুলি নোংরা করা দরকার, যদি আপনি বিদ্যমান সরঞ্জামগুলি ব্যবহার করতে না চান যেমন ওএসএম 2 পিগ্রাউটিং (যেখানে নেটওয়ার্কটি যথেষ্ট ছোট) বা osm2po।


1
ঠিক । কিছু লোক যখন নাতেটেক এবং টেলিটলাস ডেটা প্রক্রিয়াকরণ করে তখন এটি অন্য একটি ভুলও হয়। আন্ডারপাস / ওভারপাসগুলি একটি ব্যথা তবে বাস্তব।
রাগী ইয়াছার বুড়হুম

1
একমত।
জিআইএসে

3

আপনার সাধারণ সমস্যা সম্পর্কে, পিজারাউটিং ব্যবহার করে: আমি মনে করি @ ওফার, @ জিস্টস্টুডেন্ট এবং অন্যরা যা "ওএসসি এবং ইত্যাদি" কীভাবে ব্যবহার করবেন তা দেখিয়ে দিচ্ছেন, তারা সঠিক। "সেরা অনুশীলন" এবং "মানক" এর ক্লু অনুসরণ করুন ...

আপনার প্রশ্ন সম্পর্কে: "চৌরাস্তাগুলিতে পৃথক বিভাগগুলিতে রাস্তাগুলি বিভক্ত করুন" বা "কীভাবে সমস্ত মূল অনস্প্লিট জ্যামিতি মুছবেন"। আপনি যদি এখানে আপনার ফলাফল এখানে দেখেন তবে পদক্ষেপে আমি সহায়তা করতে পারি ...

প্রথম পদক্ষেপ: টপোলজি বিশ্লেষণ

 CREATE TABLE split_points_topo as
  SELECT     
    a.gid as gid_a, b.gid  as gid_b, ST_Relation(a.geom, b.geom) as DE9IM_code
  FROM
    roads as a,
    roads as b
  WHERE a.gid != b.gid AND a.geom && b.geom;

 SELECT DISTINCT st_geometryType(geom) FROM roads;
 SELECT DISTINCT DE9IM_code FROM split_points_topo;
 -- list here the results o these two queries!  ... after we can continue.

2

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


1

এটিকে অ্যালগোরিদমিকভাবে সমাধান করার একটি উপায় হ'ল প্রতিটি চৌরাস্তাটির শুরু এবং শেষ পয়েন্টটি "ছেদ" এর সেটে যুক্ত করা, যাতে আপনি নিশ্চিত হন যে প্রতিটি বিভাগটি দুটি ছেদকের মধ্যে রয়েছে।

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