পোস্টজিআইএস ব্যবহার করে বাউন্ডিং বক্স নির্বাচন করবেন?


36

পোস্টজিআইএস ব্যবহার করে একটি সীমানা বাক্সের মধ্যে থাকা সমস্ত উপায় এবং তাদের নোডগুলি নির্বাচন করতে আমি একটি ক্যোয়ারী তৈরি করতে চাই। সীমানা বাক্সে সমস্ত বিবরণ অন্তর্ভুক্ত করা উচিত হিসাবে অ্যাসোসিস "- বাউন্ডিং-বক্স" কমান্ডটি পুনরুদ্ধার করবে।

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

উত্তর:


36

অসমোসিস ডক্সের জন্য, আমি কমান্ড বিকল্পটি দেখতে পাচ্ছি :

--bounding-box top=49.5138 left=10.9351 bottom=49.3866 right=11.201

পোস্টজিআইএস-এর জন্য আপনি একটি বাউন্ডিং বক্স তৈরি করতে ST_MakeEnvelope (বাম, নীচে, ডান, উপরে, sid) ব্যবহার করতে পারেন , তারপরে &&বাউন্ডিং বক্স অপারেটরটি কোথায় খুঁজে যাবে তা সন্ধান করতে:

SELECT *
FROM mytable
WHERE mytable.geom && ST_MakeEnvelope(10.9351, 49.3866, 11.201, 49.5138, 4326);

এসআরআইডি 4326 ডাব্লুজিএস 84 ল্যাট / লং এর জন্য এবং এটি কেবল পোস্টজিআইএস 1.5 এর জন্য প্রয়োজনীয়; এটি পরবর্তী সংস্করণগুলির জন্য বাদ দেওয়া যেতে পারে।


ধন্যবাদ। ST_MakeEvelope ফাংশনটির জন্য আরও একটি প্যারামিটার প্রয়োজন। আমি সেখানে কী রাখব জানি না .. কোন ধারণা?
uriel

1
দেখে মনে হচ্ছে আপনি পোস্টজিআইএস 1.5 ব্যবহার করছেন, যার জন্য এই পরামিতিটি দরকার। আমি মনে করি যে এসআরআইডি উপেক্ষা করা হয়েছে, সুতরাং কোনও মান একই ফলাফল দিতে পারে। আপনার কাছে ল্যাট / লম্বা ডেটা থাকলে সাধারণত 4326 এর একটি এসআরডি ব্যবহার করুন
মাইক টি

1
আজকাল বেশিরভাগ সরঞ্জাম আপনাকে লোড করার সময় আপনাকে ওএসএম ডেটার জন্য এসআরআইডি চয়ন করতে দেয়। ডিফল্ট ওএসএম এসআরআইডি হ'ল 3857 (গোলাকৃতির মেরেটার)। বেশিরভাগ লেট / লম্বা তথ্যের জন্য ডিফল্ট এসআরআইডি হ'ল এসআরআইডি 4326 (ল্যাট / লোন একে একে ডাব্লু জিএস 84)। আপনি যদি SRID 3857 দিয়ে ডেটা লোড করেন, উদাহরণস্বরূপ, আপনাকে LAT / LON WGS84 থেকে 3857 এ রূপান্তর করতে হবে: এসT_ ট্রান্সফর্ম (এসT_MakeEnvelope (LON1, LAT1, LON2, LAT2, 4326), 3857) কিছু সরঞ্জাম (যেমন ইমপোসম 3) কৌতূহলীভাবে কেবল এসআরআইডি 3857 সমর্থন করুন
জাস্টিন সোয়ানহার্ট

নোট করুন && অপারেটর আপনার জন্য এসআরআইডি রূপান্তর করে না। আপনি যে খামটি তৈরি করেছেন তা পরীক্ষার জ্যামিতির মতোই এসআরডিডে রয়েছে তা নিশ্চিত করুন, নাহলে এটি নিজেই রূপান্তরিত করুন। trac.osgeo.org/postgis/ticket/2320
নেলসন

1
&& অপারেটর ST_Intersects
ciohamamura

8

আমি মনে করি এটি এরকম কিছু হবে: পোস্টজিআইএসের বাউন্ডিং বাক্সটি তৈরি করেছে

ST_GeomFromText('POLYGON((ulx uly, urx ury, llx llr, lrx lry, ulx uly))', <srid>)

কোয়েরিটি সাব-কোয়্যারির সাথে ST_ আন্তঃব্যবহার ব্যবহার করবে।

SELECT bbox_nodes.id, bbox_nodes.tag, nodes_geom 
FROM (SELECT nodes.id, nodes.tag, 
   ST_Intersection(nodes.the_geom, 
      ST_GeomFromText('POLYGON((ulx uly, urx ury, llx llr, lrx lry, ulx uly))', <srid> )).geom AS nodes_geom
   FROM nodes 
   WHERE ST_Intersects(nodes.the_geom, 
      ST_GeomFromText('POLYGON((ulx uly, urx ury, llx llr, lrx lry, ulx uly))', <srid> )) AS bbox_nodes
WHERE ST_Dimension(bbox_nodes.nodes_geom)=0;

পোস্টজিআইএস সহায়তা পৃষ্ঠাগুলি থেকে আমি কমবেশি এটি গ্রহণ করেছি
, উপরের মতো নকশাকৃত উপায়গুলির টেবিলে একটি দ্বিতীয় ক্যোয়ারীটি পাওয়া উচিত (তবে এস 07 ডাইমেনশন () = 1 সহ) উপায়গুলি পাওয়া উচিত।

এইচটিএইচ, মীখা


ওহে ধন্যবাদ! কী কাজ? <srid> এ আমার কী শোল needোকানো দরকার? এবং ".geom" (লাইন 4) এটি অবৈধ বলে মনে হচ্ছে, এটি থাকা উচিত?
uriel

দুঃখিত, আমি গত সপ্তাহ থেকে আপনার মন্তব্য মিস করেছি। এই সিডটি সমন্বিত রেফারেন্স সিস্টেম কোড। ইস্রায়েলের জন্য 2039। .জম সংযোজন একটি "জ্যামিতি সংকলনের জ্যামিতি অংশটি বের করে। আপনি এখানে সঠিক প্রয়োজন হতে পারে তা ঠিক বলেছেন
মীখা

5

এখানে একটি বিষয় রয়েছে যা এখানে আপনার প্রশ্নের অনুরূপ ...

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

1. আপনি এখানে জ্যামিতি নির্মাণ কার্যাদি সম্পর্কে কিছু তথ্য পেতে পারেন ।

SELECT ST_AsText(ST_Intersection(
  ST_Buffer('POINT(0 0)', 2),
  ST_Buffer('POINT(3 0)', 2)
));

ছেদ

আন্তঃসমাংশ ছেদ করা সম্পর্কে এখানে অন্য কোনও তথ্য : পোস্টজিআইএস - এসT_ আন্তঃসন্ধি, এসT_ আন্তঃ ...

SELECT b.the_geom As bgeom, p.the_geom As pgeom, 
        ST_Intersection(b.the_geom, p.the_geom) As intersect_bp
    FROM buildings b INNER JOIN parcels p ON ST_Intersection(b,p)
    WHERE ST_Overlaps(b.the_geom, p.the_geom)
    LIMIT 1;

ছেদ

আমি এটি আপনাকে সাহায্য করে আশা করি...


0

এটি @ মিখার কোডের উপর একটি মন্তব্য।

POLYGONপ্রান্তের জন্য স্থানাঙ্কযুক্ত জোড়গুলি ঘড়ির কাঁটার (অথবা একটি পাল্টা ঘড়ির কাঁটা) ক্রম অনুসরণ করা উচিত: উপরের বাম, উপরের ডানদিকে, নীচের ডানদিকে, নীচে বামে, উপরের বামে আবার।

সুতরাং, ঘড়ির কাঁটার দিকে, ফাংশন কলটি হওয়া উচিত:

ST_GeomFromText('POLYGON((ulx uly, urx ury, lrx lry, llx llr, ulx uly))', <srid>)

বা ঘড়ির কাঁটার বিপরীতে:

ST_GeomFromText('POLYGON((ulx uly, llx llr, lrx lry, urx ury, ulx uly))', <srid>)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.