পোস্টজিআইএস ব্যবহার করে একাধিক টেবিল থেকে জ্যামিতি পাচ্ছেন?


13

আমি পোস্টজিআইএস, পোস্টগ্র্যাস এসকিউএল এবং সাধারণভাবে এসকিউএল-এ খুব নতুন।

আমার পোস্টজিআইএস ডাটাবেসে আমার 44 টি টেবিল রয়েছে এবং প্রত্যেকে ভেক্টর ডেটার একটি পৃথক স্তর উপস্থাপন করে। প্রত্যেকটি পৃথক শেফফাইল থেকে লোড করা হয়েছিল এবং প্রত্যেকটির একটি কলাম রয়েছে যা সেই স্তরটির জ্যামিতি বর্ণনা করে, যাকে বলেwkb_geometry

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

আমার এসকিউএল বিবৃতিটির একটি নমুনা এখানে:

SELECT
    ST_AsEWKT(wkb_geometry) /* Some of this data has z values, hence the EWKT */
FROM
    table2, table3, table4, table5
WHERE 
    wkb_geometry &&
        (
        SELECT
            wkb_geometry
        FROM
            table1
        WHERE
            ogc_fid = 25
        );

যা ত্রুটি প্রদান করে:

column reference "wkb_geometry" is ambiguous
/* note that every table that I am selecting from has a "wkb_geometry" column */

এটি করার সঠিক উপায় কী?


1
আপনি আমাদের এসকিউএল প্রাইমার দরকারী মনে হতে পারে। আমরা এটি এসকিউএল নবাগত প্রশ্নের উত্তর দেওয়ার জন্য ডিজাইন করেছিলাম যদিও এটি কিছু উন্নত এসকিউএল কনস্ট্রাক্টগুলিও কভার করে না। postgis.us/chapter_appendix_c অধ্যায় 1টি দরকারী হতে পারে কারণ এটি একটি পোস্টজিআইএস স্থানিক প্রাইমার।
LR1234567

+1 টি। এটি বিনামূল্যে অধ্যায়। পুরো বইটি কিনুন, বেঞ্জামিন, এটি বেশ মূল্যবান একটি বিনিয়োগ। আপনি যদি পোস্টজিআইএস এবং আরও অনেক কিছু সম্পর্কে জানতে চান।
নিক্লাস আভেন

উত্তর:


8

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

কলাম রেফারেন্স "wkb_geometry" অস্পষ্ট

আপনার যদি একাধিক সারণীতে একই কলামের নাম থাকে তবে সর্বদা কলামের নামের সামনে টেবিলের নাম যুক্ত করুন: যেমন eg table1.wkb_geometry

আপনার ক্যোয়ারির জন্য: যদি আমি আপনাকে সঠিকভাবে বুঝতে পারি তবে আপনি বিভিন্ন স্তরগুলিতে একটি নির্দিষ্ট স্তরে নির্দিষ্ট বস্তুকে ছেদ করে এমন বস্তুগুলি সন্ধান করতে চান।

এটিকে সহজ রাখতে একবারে দুটি টেবিলের দিকে তাকানো শুরু করুন:

সারণি 1 হ'ল নির্দিষ্ট বস্তুর সাথে সারণী, অন্য বস্তুর সাথে টেবিল 2

SELECT
ST_AsEWKT(table2.wkb_geometry)
FROM
table1, table2
WHERE
(table2.wkb_geometry && table1.wkb_geometry)
AND
table1.ogc_fid = 25

এখন, আপনি যদি অন্য টেবিলগুলি থেকে অতিরিক্ত অবজেক্ট যুক্ত করতে চান তবে সাসা ইতিমধ্যে উল্লিখিত হিসাবে আপনার সমস্ত ইউনিয়ন দরকার। কলামের নাম একই হওয়ার দরকার নেই, তবে কলাম এবং ডেটা ধরণের সংখ্যা!

SELECT
ST_AsEWKT(table2.wkb_geometry)
FROM
table1, table2
WHERE
(table2.wkb_geometry && table1.wkb_geometry)
AND
table1.ogc_fid = 25

UNION ALL

SELECT
ST_AsEWKT(table3.wkb_geometry)
FROM
table1, table3
WHERE
(table3.wkb_geometry && table1.wkb_geometry)
AND
table1.ogc_fid = 25

UNION ALL

etc...

কোনও অনন্য আইডি না থাকায় কোনও সমস্যা দর্শকের কাছে ক্যোয়ারী খোলার কারণে আপনি সমস্যা পেতে পারেন। এটি সমাধানের একটি সহজ উপায় হ'ল ফলটি একটি আইডি কলাম সহ একটি টেবিল হিসাবে সংরক্ষণ করা।

আনন্দ কর


6

আমার সামনে এসকিউএল ক্লায়েন্ট নেই তাই এটি 100% নির্ভুল নাও হতে পারে তবে আপনি এই লাইনের সাথে কিছু চাইবেন:

SELECT ST_AsEWKT(wkb_geometry) FROM table2 WHERE ...
UNION ALL
SELECT ST_AsEWKT(wkb_geometry) FROM table3 WHERE ...

ইত্যাদি। আপনার সমস্যাটি হল যে বর্গ কোয়েরিটি আপনি কী সারণী (টেবিল 2/3/4/5) উল্লেখ করছেন তা আপনি জানেন না যখন আপনি SELECT ST_AsEWKT (wkb_geometry) নির্দিষ্ট করেন, এইভাবে অস্পষ্ট রেফারেন্স। আপনি যদি ফলাফলগুলি অর্ডার করতে চান তবে আপনি ফলাফল দ্বারা একটি অর্ডার যোগ করতে পারেন

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