আমি স্থির LAT, লং পয়েন্টের SrcRad ব্যাসার্ধের সমস্ত পয়েন্ট সাইড ইস্যু হিসাবে বাউন্ডিং বক্স সমস্যা নিয়ে কাজ করছিলাম। বেশ কয়েকটি গণনা ব্যবহার করা হয়েছে
maxLon = $lon + rad2deg($rad/$R/cos(deg2rad($lat)));
minLon = $lon - rad2deg($rad/$R/cos(deg2rad($lat)));
দ্রাঘিমাংশের সীমা গণনা করতে, তবে এটি প্রয়োজনীয় উত্তরগুলি না দেওয়ার জন্য আমি এটি পেয়েছি। কারণ আপনি যা করতে চান তা হ'ল
(SrcRad/RadEarth)/cos(deg2rad(lat))
আমি জানি, আমি জানি উত্তরটি একই হওয়া উচিত তবে আমি খুঁজে পেয়েছিলাম যে এটি ছিল না। এটি উপস্থিত হয়েছিল যে নিশ্চিত না করে আমি প্রথমে (এসআরসিগ্রাড / র্যাডার্থ) করছিলাম এবং তারপরে কোস অংশে বিভক্ত হয়ে আমি কিছু লোকেশন পয়েন্ট ছেড়ে যাচ্ছি।
আপনার সমস্ত বাউন্ডিং বক্স পয়েন্ট পাওয়ার পরে, যদি আপনার এমন একটি ফাংশন থাকে যা প্রদত্ত পয়েন্ট থেকে পয়েন্ট দূরত্ব গণনা করে, তবে দীর্ঘস্থায়ী বিন্দু থেকে নির্দিষ্ট দূরত্বের ব্যাসার্ধ কেবল সেই পয়েন্টগুলি পাওয়া সহজ get এখানে আমি কি করেছি। আমি জানি এটি কয়েকটি অতিরিক্ত পদক্ষেপ নিয়েছিল তবে এটি আমাকে সহায়তা করেছিল
-- GLOBAL Constants
gc_pi CONSTANT REAL := 3.14159265359; -- Pi
-- Conversion Factor Constants
gc_rad_to_degs CONSTANT NUMBER := 180/gc_pi; -- Conversion for Radians to Degrees 180/pi
gc_deg_to_rads CONSTANT NUMBER := gc_pi/180; --Conversion of Degrees to Radians
lv_stat_lat -- The static latitude point that I am searching from
lv_stat_long -- The static longitude point that I am searching from
-- Angular radius ratio in radians
lv_ang_radius := lv_search_radius / lv_earth_radius;
lv_bb_maxlat := lv_stat_lat + (gc_rad_to_deg * lv_ang_radius);
lv_bb_minlat := lv_stat_lat - (gc_rad_to_deg * lv_ang_radius);
--Here's the tricky part, accounting for the Longitude getting smaller as we move up the latitiude scale
-- I seperated the parts of the equation to make it easier to debug and understand
-- I may not be a smart man but I know what the right answer is... :-)
lv_int_calc := gc_deg_to_rads * lv_stat_lat;
lv_int_calc := COS(lv_int_calc);
lv_int_calc := lv_ang_radius/lv_int_calc;
lv_int_calc := gc_rad_to_degs*lv_int_calc;
lv_bb_maxlong := lv_stat_long + lv_int_calc;
lv_bb_minlong := lv_stat_long - lv_int_calc;
-- Now select the values from your location datatable
SELECT * FROM (
SELECT cityaliasname, city, state, zipcode, latitude, longitude,
-- The actual distance in miles
spherecos_pnttopntdist(lv_stat_lat, lv_stat_long, latitude, longitude, 'M') as miles_dist
FROM Location_Table
WHERE latitude between lv_bb_minlat AND lv_bb_maxlat
AND longitude between lv_bb_minlong and lv_bb_maxlong)
WHERE miles_dist <= lv_limit_distance_miles
order by miles_dist
;