মাইএসকিউএল এর মাধ্যমে ব্যাসার্ধে জিপ পেতে সমস্যা


9

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

এটি আমার কাছে কেবল ঘটেছিল, কারণ একটি জিপের কেন্দ্র বিন্দু প্রদত্ত ব্যাসার্ধের মধ্যে নয়, এর অর্থ এই নয় যে জিপটি নিজেই ব্যাসার্ধের মধ্যে নেই।

আমি এখানে আমার অতি উন্নত শিল্প দক্ষতা ব্যবহার করে পয়েন্টটি চিত্রিত করতে:

এখানে চিত্র বর্ণনা লিখুন

  • সবুজ স্ট্রিপি ব্লবগুলি এ, বি এবং সি এর জিপ কোডগুলি উপস্থাপন করে

  • লাল smudges প্রতিটি জিপ কোডের জন্য ভৌগলিক কেন্দ্র

  • ফুচিয়া ডট হ'ল লক্ষ্য অবস্থান এবং ..

  • গলদা নীল বৃত্ত লক্ষ্য অবস্থান থেকে 1 মাইল ব্যাসার্ধ

আমি যদি গোলাপী ধর্ষণ থেকে 1 মাইল ব্যাসার্ধের মধ্যে সমস্ত জিপ কোডগুলির জন্য একটি কোয়েরি চালনা করি তবে কেবল জিপ কোড বি এবং সি ফিরে আসবে কারণ জিপ এ এর ​​কেন্দ্র বিন্দু এক মাইল ব্যাসার্ধের মধ্যে নয়, যদিও গোলাপী ধূলা নিজেই স্পষ্টভাবে জিপ কোড এ is

SELECT *,
        p.distance_unit
                 * DEGREES(ACOS(COS(RADIANS(p.latpoint))
                 * COS(RADIANS(z.y))
                 * COS(RADIANS(p.longpoint) - RADIANS(z.x))
                 + SIN(RADIANS(p.latpoint))
                 * SIN(RADIANS(z.y)))) AS dist
  FROM standard_zip AS z
  JOIN (   /* these are the query parameters */
        SELECT  $lat  AS latpoint,  $lng AS longpoint,
                $miles AS radius,      69 AS distance_unit
    ) AS p ON 1=1
  WHERE z.y
     BETWEEN p.latpoint  - (p.radius / p.distance_unit)
         AND p.latpoint  + (p.radius / p.distance_unit)
    AND z.x
     BETWEEN p.longpoint - (p.radius / (p.distance_unit * COS(RADIANS(p.latpoint))))
         AND p.longpoint + (p.radius / (p.distance_unit * COS(RADIANS(p.latpoint))))
  ORDER BY dist

আমি কীভাবে এই প্রশ্নটি লিখব যাতে ফলাফলগুলিতে জিপ এ অন্তর্ভুক্ত থাকবে?

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


সম্পাদনা : আমি স্থিতিশীল ডেটার জন্য ওরাকল এবং মাইএসকিউএল ডক্স পড়তে একদিন ব্যয় করেছি এবং আমার স্থানিক ডেটা সফলভাবে মাইএসকিউএলে রূপান্তরিত করতে পরিচালিত হয়েছি । আমি কীভাবে অনুরূপ ক্যোয়ারী লিখতে যাব যাতে ল্যাট এবং লম্বার পরিবর্তে জ্যামিতি কলাম ব্যবহার করা হয়? আমি 2 ডি ডেটা ব্যবহার করছি .. জ্যামিতিটি হ'ল বহুভুজ এবং কেবলমাত্র বহুগুণ ..

আমি মনে করি আমি এটি এক ধরণের খুঁজে পেয়েছি ..

select
  *
from
  (
    select
      MIN(st_distance(geom, POINT(-82.765136, 28.0914015))) * 69 as miles,
      zip
    from
      zip_spatial
    group by
      zip
    order by
      miles asc
  ) d
where
  d.miles < 5

কারওর আরও ভাল, আরও কার্যকর সমাধান হওয়ার ক্ষেত্রে আমি এখনই অনুগ্রহ উন্মুক্ত রেখে দেব।

উত্তর:


7

ওরাকল স্পেসিয়াল ডেভেলপারদের গাইড 11 জি রিলিজ 2 (১১.২) এর ওরাকলে ইনডেক্সিং এবং স্পেসিয়াল ডেটা অনুসন্ধান করা থেকে :

স্থানিক ডেটা জিজ্ঞাসা করা হচ্ছে

স্থানিক জিজ্ঞাসা এবং স্থানিক যোগদানগুলিতে সমাধানের জন্য প্রাথমিক ও মাধ্যমিক ফিল্টার অপারেশন সহ একটি দ্বি-স্তরের ক্যোয়ারী মডেল ব্যবহার করে। দ্বি-স্তর শব্দটি ইঙ্গিত দেয় যে প্রশ্নের সমাধানের জন্য দুটি স্বতন্ত্র অপারেশন করা হয়। যদি উভয় অপারেশন করা হয় তবে সঠিক ফলাফল সেটটি ফেরত দেওয়া হবে।

যদি কোনও টেবিলে স্থানিক সূচকটি সংজ্ঞায়িত করা হয় তবে আপনি কোয়েরিতে স্থানিক টেবিলের নামের সাথে একটি ডেটাবেস লিঙ্ক (dblink) নামের সংযুক্ত করতে পারবেন না।

স্থানিক প্রশ্ন

একটি স্থানিক আর-ট্রি ইনডেক্সে প্রতিটি জ্যামিতি তার ন্যূনতম বাউন্ডিং আয়তক্ষেত্র (এমবিআর) দ্বারা উপস্থাপিত হয়। চিত্র 1-তে কয়েকটি বস্তু সমন্বিত নিম্নলিখিত স্তরটি বিবেচনা করুন। প্রতিটি বস্তুকে তার জ্যামিতি নাম (রেখার স্ট্রিংয়ের জন্য জিওম_1, চারদিকী বহুভুজের জন্য জিম 3, ত্রিভুজাকার বহুভুজের জন্য জিওম 14, এবং উপবৃত্তের জন্য জিওম 1) দিয়ে লেবেলযুক্ত এবং প্রতিটি বস্তুর চারপাশের এমবিআর একটি ড্যাশযুক্ত রেখার দ্বারা উপস্থাপিত হয়।

চিত্র 1 এমবিআর সহ জ্যামিতি

"এমবিআর সহ চিত্র 1 জ্যামিতি" এর বর্ণনা

একটি সাধারণ স্থানিক জিজ্ঞাসা হ'ল ক্যোরি উইন্ডোতে থাকা সমস্ত বস্তুর অনুরোধ করা, এটি একটি নির্ধারিত বেড়া বা উইন্ডো। একটি গতিশীল কোয়েরি উইন্ডোটি একটি আয়তক্ষেত্রাকার ক্ষেত্রকে বোঝায় যা ডেটাবেসে সংজ্ঞায়িত নয়, তবে এটি ব্যবহারের আগে অবশ্যই এটি সংজ্ঞায়িত করা উচিত। চিত্র 2 চিত্র 1-এর মতো একই জ্যামিতি দেখায়, তবে ভারী ডটেড-লাইন বাক্স দ্বারা প্রতিনিধিত্ব করা একটি ক্যোয়ারী উইন্ডো যুক্ত করে।

চিত্র উইন্ডো সহ চিত্র 2 স্তর

"একটি প্রশ্নের উইন্ডো সহ চিত্র 2 স্তর" এর বিবরণ

চিত্র 2-এ, ক্যোয়ারী উইন্ডো জ্যামিতিগুলির কিছু অংশ জিওম_1 এবং জিওম 3 এবং সেইসাথে জিওএম 14 এর জন্য এমবিআর অংশটি অন্তর্ভুক্ত করেছে তবে আসল ভূমিকার জ্যামিতির কোনওটিই নয়। ক্যোয়ারী উইন্ডোটি ভূগোলের জ্যামিতির কোনও অংশ বা এর এমবিআরকে কভার করে না।

প্রাথমিক ফিল্টার অপারেটর

SDO_FILTER অপারেটর, ওরাকল স্পেসিয়াল ক্যোয়ারী প্রসেসিং মডেলের সাথে জড়িত দ্বি-পদক্ষেপ প্রক্রিয়াটির প্রাথমিক ফিল্টার অংশটি প্রয়োগ করে। প্রাথমিক ফিল্টারটি কেবলমাত্র পরীক্ষার্থী অবজেক্ট জোড়ির একটি সেট ইন্টারেক্ট করতে পারে তা নির্ধারণ করতে সূচক ডেটা ব্যবহার করে। বিশেষত, প্রাথমিক ফিল্টার পরীক্ষকগণের এমবিআরগুলি ইন্টারেক্ট করে কিনা তা পরীক্ষা করে দেখুন না, বস্তুগুলি তারা নিজে ইন্টারঅ্যাক্ট করে কিনা। SDO_FILTER অপারেটর সিনট্যাক্সটি নিম্নরূপ:

SDO_FILTER(geometry1 SDO_GEOMETRY, geometry2 SDO_GEOMETRY, param VARCHAR2)

পূর্ববর্তী বাক্য বাক্যটিতে:

  • জ্যামিতি 1 একটি সারণীতে SDO_GEOMETRY ধরণের একটি কলাম। এই কলামটি অবশ্যই স্থানিকভাবে সূচকযুক্ত হতে হবে।

  • জ্যামিতি 2 হ'ল SDO_GEOMETRY টাইপের একটি অবজেক্ট। এই বস্তুটি কোনও টেবিল থেকে আসতে পারে এবং নাও পারে। যদি এটি কোনও টেবিল থেকে আসে তবে এটি স্থানিকভাবে সূচকযুক্ত বা নাও থাকতে পারে।

  • প্যারাম হ'ল VARCHAR2 টাইপের একটি .চ্ছিক স্ট্রিং। এটি উভয়ই মিনি_রেসোলিউশন এবং ম্যাক্স_রেসোলিউশন কীওয়ার্ড নির্দিষ্ট করতে পারে।

নিম্নলিখিত উদাহরণগুলি কেবলমাত্র প্রাথমিক ফিল্টার অপারেশন করে (কোনও গৌণ ফিল্টার অপারেশন ছাড়াই)। তারা চিত্র 2-তে প্রদর্শিত সমস্ত জ্যামিতিগুলিতে ফিরে আসবে যার একটি এমবিআর রয়েছে যা ক্যোরি উইন্ডোটির সাথে ইন্টারেক্ট করে। নিম্নলিখিত উদাহরণগুলির ফলাফল হ'ল জ্যামিতি জিওম_1, জিওম_2 এবং জিওম_3।

উদাহরণ 1 কোয়েরিতে উইন্ডোটি কোনও সারণিতে inোকানো ছাড়াই একটি প্রাথমিক ফিল্টার ক্রিয়াকলাপ সম্পাদন করে। উইন্ডোটি স্মৃতিতে সূচিযুক্ত হবে এবং অভিনয়টি খুব ভাল হবে good

উদাহরণ 1 অস্থায়ী প্রশ্নের উইন্ডো সহ প্রাথমিক ফিল্টার

SELECT A.Feature_ID FROM TARGET A  WHERE sdo_filter(A.shape, SDO_geometry(2003,NULL,NULL,
                                       SDO_elem_info_array(1,1003,3),
                                       SDO_ordinate_array(x1,y1, x2,y2))
                           ) = 'TRUE';   

উদাহরণ 1-এ, (x1, y1) এবং (x2, y2) কোয়েরি উইন্ডোর নীচের বাম এবং উপরের-ডান কোণ।


1
দারুন .. সুতরাং আমার ব্যাসার্ধটি ব্যাসার্ধকে উপস্থাপন করার জন্য তৈরি করা উচিত এবং তারপরে কেবল বহুভুজগুলি ছেদ করে দেখুন .. আকর্ষণীয় .. তথ্যের জন্য thx
আমি একবার ভাল্লুককে কুস্তি দিয়েছিলাম।

হ্যাঁ ... চলুন ... আশা করি এটি আপনার পক্ষে ভাল কাজ করে।
l.lijith

5

এটিকে অন্তর্ভুক্ত করার যে কোনও প্রয়াসে সম্ভবত ডি, ই, এফ, জি অন্তর্ভুক্ত থাকবে each

এই জাতীয় ডেটাবেস সন্ধান করুন, তারপরে এ SPATIALজাতীয় নির্ধারিত বহুভুজ ব্যবহার করে একটি সূচক তৈরি করুন ।


আমি জানি আমার স্থানিক ডেটা প্রয়োজন (এবং আমার কাছে এটি আছে তবে এটি একটি ওরাকল টেবিলের মধ্যে রয়েছে এবং আমি কীভাবে এটি রূপান্তর করব সে সম্পর্কে খুব বেশি তথ্য খুঁজে পাচ্ছি না) .. সমস্যা কীভাবে ডেটা অনুসন্ধান করতে হবে তা নির্ধারণ করছে।
আমি একবার ভাল্লুক কুস্তি করেছিলাম।

আপনি যদি নতুন কোডটির পারফরম্যান্সে খুশি হন তবে এটি সম্ভবত সেরা। দ্রষ্টব্য: ক্যোয়ারী প্রতিটি জিপের দূরত্বকে তালিকাবদ্ধ করে, তাই সম্ভবত কোনও অপ্টিমাইজেশন সম্ভাবনা নেই। (আপনি যদি আরও ভাল কোড পান তবে আমি আনন্দিত অবাক হব))
রিক জেমস

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

3

আপনি এটা ভুল করছেন. প্রথমত, যদি সম্ভব হয় তবে পোস্টজিআইএস ব্যবহার করুন - যা স্থানিক দ্রবণ সহ শীর্ষস্থানীয় আরডিএমবিএস।

তারপরে আপনি এই পদক্ষেপগুলি অনুসরণ করতে চান।

  1. আদমশুমারির টাইগার ডেটাसेट থেকে জেডটিটিএ (জিপ কোড ট্যাবুলেশন অঞ্চলগুলি) নীচে টানুন । জিপ কোডগুলি আসলে নির্দিষ্টভাবে জানা থাকে না। আনুষ্ঠানিকভাবে, জিপ কোডগুলি কেবল ইউএসপিএসের অভ্যন্তরীণ ব্যবহারের জন্য। যেহেতু সবাই এগুলি ব্যবহার করে সরকার সহ, দ্বিতীয় সর্বাধিক অনুমোদিত উত্স জেডসিটিএ শেফফাইলে পরিণত হয়েছে।
  2. আপনি সহজেই ব্যবহার করতে পারেন PostgreSQL সহ আপনার ডাটাবেসে এই শেফফাইলগুলি আমদানি করুন shp2pgsql
  3. আপনার আমদানি করা জ্যামিতিকে সূচক করুন।

    CREATE INDEX ON census_zcta USING gist (geog);
    ANALYZE census_zcta;
  4. শেফফিলসের বিপরীতে পয়েন্ট-অফ-ইন্টারেস্ট (পিওআই) কোয়েরি চালান। আপনার ক্ষেত্রে আগ্রহের বিষয় হ'ল ইনপুট কর্ডগুলি, এটি দেখতে এরকম হবে,

    SELECT *
    FROM census_zcta AS zcta
      WHERE ST_Intersects( zcta, ST_MakePoint(long,lat)::geog );

। 1609.344 মিটার = 1 মাইল

মাইএসকিউএল

মাইএসকিউএল সহ আপনারা পাবেন

  1. সেন্সাস শ্যাপফিলের জন্য মাইএসকিউএল সন্নিবেশ বিবৃতিগুলি আউটপুট দিতে ogr2ogr ব্যবহার করুন।
  2. MBRIntersectsস্থানিক সূচকটি ব্যবহার করতে ব্যবহার করুন। শেষ ক্যোয়ারির মতো দেখতে কিছু উচিত

    SELECT *
    FROM zcta
    WHERE MBRIntersects( geom, Point(long,lat) )
      AND ST_Intersects ( geom, Point(long,lat) );

3
1) আমি জানি আমি এটি ভুল করেছিলাম। এজন্যই আমি জিজ্ঞাসা করেছি। 2) আমি যে প্রতিষ্ঠানের জন্য কাজ করি সেগুলি ইউএসপি অভ্যন্তরীণ জিপ কোডের সীমানায় প্রবেশাধিকার দিয়েছে। আমরা এই প্রকল্পের জন্য সরাসরি ইউএসপি নিয়ে কাজ করেছি, এবং 3) সাধারণত, পরামর্শ দিয়েছিলেন যে ওপি সম্পূর্ণ ভিন্ন একটি টুলসেট ব্যবহার করে সঠিক উত্তর নয়।
আমি একবার ভাল্লুক কুস্তি করেছিলাম।

1
@iwrestledabearonce আপনি মাইএসকিউএল 8 এর সাহায্যে এই সমস্ত কিছু করতে পারেন কেবলমাত্র বিকল্পের ST_DWithinসাথেMBRIntersects
ইভান ক্যারল

1
"ইউএসপি অভ্যন্তরীণ জিপ কোডের সীমানায় অ্যাক্সেস দেওয়া হয়েছে" আপনি কি সেই পণ্যের নাম জানবেন? এএফআইকে তেমন কোনও জিনিস নেই। (যদিও ইউএসপিএস 2 টি ডেটা পণ্য এবং ডিকোডিং ঠিকানার জন্য কিছু এপিআই সরবরাহ করে)
ইভান ক্যারল

1
মাইএসকিএল সম্পর্কিত তথ্য যুক্ত করার জন্য আপনাকে ধন্যবাদ। +1 টি। এপিআই সর্বজনীন নয় এবং এটি কোনও ওয়েবেসাইটে তালিকাভুক্ত নয়, প্রকৃতপক্ষে শেষ পয়েন্ট ইউআরএলটির একটি ডোমেন নামও নেই, আমরা সরাসরি আইপি ঠিকানা থেকে অনুরোধ করছি। তবে, কেবল এপিআই বিদ্যমান রয়েছে তা প্রমাণ করার জন্য এটি এই দস্তাবেজে তালিকাভুক্ত করা হয়েছে (3 টি যেটি ইডিডিএমকে উল্লেখ করছে আমি তার সাথে উল্লেখ করছি) usps.com/business/web-tools-apis/archive/…
আমি ভাল্লুক কুস্তি

1
আপনি যদি EDDM / সিলেক্টিজআইপি শেষ পয়েন্টটি সরিয়ে ফেলেন তবে এটি আসলে বৈধ বলে মনে হচ্ছে। এটি সেই উদ্দেশ্যে বিজ্ঞাপন দেওয়া হয়নি, তবে শেষের পয়েন্টটি অনুসন্ধান করার জন্য এটি কুডোস।
ইভান ক্যারল

1

GreatData.com থেকে সেট করা এই ডেটাটি দেখুন (নোট করুন যে এটি ওপেন সোর্স নয় তবে অর্থ প্রদানের পরিষেবা) is

তারা জিপ কেন্দ্রের পরিবর্তে জনসংখ্যার ঘনত্ব ব্যবহার করে।

এবং দ্রুত সঠিক ফলাফল পেতে কীভাবে এসকিএল সার্ভারের স্থানিক ডেটা ব্যবহার করতে হয়।

আশাকরি এটা সাহায্য করবে.


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