একটি আবদ্ধ বাক্সের মধ্যে সমস্ত পয়েন্ট নির্বাচন করুন


11

আমি এই প্রশ্নটি আগে জিজ্ঞাসা করেছি, কিন্তু আমি যে উত্তরগুলি চেষ্টা করছি তা কার্যকর হচ্ছে না।

আমি বাউন্ডিং বাক্সের মধ্যে থাকা সমস্ত ওএসএম উপায়গুলি জিজ্ঞাসা করছি। ওএসএম ডেটা ডিফল্ট গোলাকৃতির মেরেটর দিয়ে আমদানি করা হয়েছিল। আমি LAT / LON ব্যবহার করে জিজ্ঞাসা করছি তাই রূপান্তরটি

SELECT *
FROM planet_osm_ways
WHERE ST_Transform(
  ST_MakeEnvelope(37.808264, 37.804339, -122.275244, -122.271189, 
  4326),3857
);

আমি এটি চালানোর সময় আমি নিম্নলিখিত ত্রুটিটি পাই:

ত্রুটি: WHOE এর যুক্তিটি টাইপ বুলিয়ান হতে হবে, জ্যামিতির লাইন 3 টাইপ করতে হবে না: যেখানে এসT_ ট্রান্সফর্ম (এসT_MakeEnvelope (37.808264, 37.804339, -12 ...


1
আপনার জিজ্ঞাসাটি তৈরির জন্য আপনি যে পুরানো প্রশ্নগুলি পড়েছেন এবং ব্যবহৃত হয়েছে তার একটি লিঙ্ক দিন।
ব্যবহারকারী 30184

ST_MakeEnvelope () এ আপনার স্থানাঙ্ক আদেশটি এই ফর্ম্যাটটিতে দেখতে পাবেন না, xmin, ymin, xmax, ymax
artwork21

@ আর্টওয়ার্ক 21 আমি ST_MakeEnvelope এ একটি দীর্ঘ / দীর্ঘ ব্যবহার করছি। এটা কি ভুল? আমার কি এটিকে অন্য কোনও ফর্ম্যাটে রূপান্তর করতে হবে? আমি ভেবেছিলাম এস এস ট্রান্সফর্ম যা করছে
18

1
দুঃখিত, আমাকে আবার স্কিমা ডকুমেন্ট সহ সূক্ষ্ম ম্যানুয়ালগুলি পড়তে হয়েছিল wiki.openstreetmap.org/wiki/Osm2pgsql/schema#planet_osm_ways । প্ল্যানেট_সোম_ওয়েতে জ্যামিতিগুলি থাকে না এবং শেষ ব্যবহারকারীর জন্য এটি অকেজো। এটা সিস্টেমের জন্য। সেই টেবিল থেকে বাউন্ডিং বক্স অনুসন্ধান করার কোনও সুযোগ নেই। গ্রহ_সোম_রোডের মতো সারণীগুলির সাহায্যে এটি সম্ভব। এখনও প্ল্যানেট_স্মম_রোডস.জুমের অস্তিত্ব নেই, কারণ আপনি যেমন স্কিমা থেকে দেখেন, এর নাম দেওয়া হয়েছে প্ল্যানেট_সোম_রোড.ওয়ে।
ব্যবহারকারী 30184

1
না, আমি বলেছি আপনি গ্রহ_আসেম_ওয়ে থেকে বাউন্ডিং বক্স কোয়েরি করতে পারবেন না কারণ সেই টেবিলে কোনও জ্যামিতি নেই। দেখুন: আইডি, নোড, ট্যাগ, মুলতুবি - তাদের কোনওটিতে জ্যামিতি নেই। সারণী _লাইন, _পয়েন্ট, _ পলিগন এবং _রোডগুলি ঠিক আছে। এবং আমি জ্যামিতি কলামগুলিকে সমস্ত জ্যামিতি সারণীতে জোর করে বলার চেষ্টা করেছি "জাইম" বা অন্য কিছু হিসাবে নয়, "উপায়" হিসাবে নামকরণ করা হয়েছে।
ব্যবহারকারী 30184

উত্তর:


14

আপনার বিবৃতিতে আপনার তিনটি সমস্যা রয়েছে যদিও ত্রুটি বার্তাটি এর অংশে কেবল ইঙ্গিত দিচ্ছে ... "" যেখানে টাইপ বুলিয়ান হতে হবে "এর অর্থ হ'ল আপনি WHERE দিয়েছিলেন সেই তথ্যটি বুলিয়ান ফলাফলের জন্য মূল্যায়ন করছে না।

  1. ST_MakeEnvelope এই আদেশ তার পরামিতি জন্য জিজ্ঞেস করল: xmin, ymin, xmax, ymax, srid

    আপনি ভুলভাবে প্রবেশ করেছেন ymax, ymin, xmax, xmin, srid

  2. বুলিয়ান জন্য মূল্যায়ন করতে হবে যেখানে:

    কোনও জ্যামিতি এবং খামের কোনও সাধারণ উপাদান রয়েছে কিনা তা নির্ধারণ করতে WHEREটি এমনভাবে তৈরি করা উচিত: WHERE geom && envelope_geomঅন্যথায় আপনি ST_Contains ব্যবহার করতে পারেন

    খামের মধ্যে জ্যামিতি অন্তর্ভুক্ত রয়েছে কিনা তা নির্ধারণ করতে: `যেখানে ST_Contains (খামে_জিয়াম, জিওম)

    আপনি এর জন্য তুলনার কোনও পদ্ধতি সরবরাহ করেন নি WHERE

  3. সারণী 'গ্রহ_অসেম_ওয়েস'-তে কোনও জ্যামিতি কলাম থাকে না, যদিও' গ্রহ_সৌম_রোডস'-এ 'উপায়' নামে জ্যামিতি কলাম থাকে।

    আপনি সম্পর্কিত প্ল্যানেট_সোম_নোড.লট এবং প্ল্যানেট_সোম_নোড.লোন থেকে টেবিল 'গ্রহ_আসেম_ওয়েস' তে জ্যামিতি কলাম তৈরি করতে পারেন।

'প্ল্যানেট_সোম_রোডস' ব্যবহার করে, এটি জ্যামিতি কলাম সহ একটি টেবিলের বিপরীতে একটি সীমানা বাক্স কীভাবে ব্যবহার করবেন তা দেখায়:

SELECT *
FROM planet_osm_roads
WHERE planet_osm_roads.way && ST_Transform(
  ST_MakeEnvelope(-122.271189, 37.804339, -122.275244, 37.808264, 
  4326),3857
);

বা এটিতে এটি পরিবর্তন করুন:

SELECT *
FROM planet_osm_roads
WHERE ST_Contains(
    ST_Transform(
        ST_MakeEnvelope(-122.271189, 37.804339, -122.275244, 37.808264, 
        4326)
        ,3857)
    ,planet_osm_roads.way);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.