ST_Distance_Sphere এ ডিফল্ট আর্থ ব্যাসার্ধটি কোথা থেকে এসেছে?


15

মাইএসকিউএল ডক্সে বলে ST_Distance_Sphere

গণনাগুলি একটি গোলাকার পৃথিবী এবং একটি কনফিগারযোগ্য ব্যাসার্ধ ব্যবহার করে। Alচ্ছিক ব্যাসার্ধের যুক্তিটি মিটারে দেওয়া উচিত। বাদ দেওয়া থাকলে ডিফল্ট ব্যাসার্ধটি 6,370,986 মিটার। যদি ব্যাসার্ধের যুক্তি উপস্থিত থাকে তবে ইতিবাচক না হয় তবে ER_WRONG_ARGUMENTSত্রুটি ঘটে।

পোস্টজিআইএস এর ডক্সে বলেছে ST_Distance_Sphere, (যদিও ডক্সটি আর সঠিক নয় )

একটি গোলাকৃতির পৃথিবী এবং 6370986 মিটার ব্যাসার্ধ ব্যবহার করে Uses

তারা কোথা থেকে 6,370,986 মিটার ডিফল্ট পেল? WGS84 বলেছেন প্রধান অক্ষ ব্যাসার্ধ 6,378,137.0 মি। পোস্টজিআইএস যা এখন একটি গড় রেডিয়াস ব্যবহার করে মূলত 6371008 ব্যবহার করে।

কোডটি দেখছেন

#define WGS84_MAJOR_AXIS 6378137.0
#define WGS84_INVERSE_FLATTENING 298.257223563
#define WGS84_MINOR_AXIS (WGS84_MAJOR_AXIS - WGS84_MAJOR_AXIS / WGS84_INVERSE_FLATTENING)
#define WGS84_RADIUS ((2.0 * WGS84_MAJOR_AXIS + WGS84_MINOR_AXIS ) / 3.0)

এর মানে

-- SELECT 6378137.0 - 6378137.0 / 298.257223563;
WGS84_MINOR_AXIS = 6356752.314245179498
-- SELECT ( 2.0 * 6378137.0 + ( 6378137.0 - 6378137.0 / 298.257223563) ) / 3.0;
WGS84_RADIUS = 6371008.771415059833

নতুন সংস্করণগুলি অনেক কম দক্ষ, আরও জটিল এবং প্রো 4 জ ব্যবহার করুন তবে তারা একই জিনিসটি বলে মনে হচ্ছে।

এখনও 6370986 কোথা থেকে আসে?


1
এটি গড় পৃথিবী ব্যাসার্ধ, যা প্রতিনিধিত্ব থাকা উচিত (2*minorAxis+majorAxis)/3 ... যদিও WGS84 জন্য যে মান এখনো কয়েক মিটার বৃহত্তর (6,371,008.771) হল
JGH

হ্যাঁ, কেন এই তাত্পর্য প্রশ্ন।
ইভান ক্যারল

2
কিছু বিকাশকারী এটি নেট থেকে সন্ধান করেছেন? পোস্টগ্রিস উত্সটি এতে কিছুটা আলোকপাত করতে পারে
ইয়ান টার্টন

2
@ আইয়ান্টার্টন বেশিরভাগ বাগগুলিকে "কিছু বিকাশকারী কিছু করেছিলেন এবং উত্সটি এতে আলোকপাত করতে পারে" এটিকে হ্রাস করা যেতে পারে। আমি কাজটি করার ইচ্ছা করেছিলাম, যদি গল্পটি কেউ না জানত তবে তা হবে fig নীচে উত্তর দেখুন।
ইভান ক্যারল

1
সম্ভবত এখানে একটি টাইপো ছিল এবং তাদের বোঝানো হয়েছে 6370996 ... এটি ক্লার্ক 1866 এর অটহলিক ব্যাসার্ধের খুব কাছে।
মেকনেডি

উত্তর:


21

ঠিক আছে, এটি হাসিখুশি । আমি এটি ট্র্যাক। lwgeom/lwgeom_spheroid.cPostGIS 1.0.0rc4 এ পুরানো অনুলিপিতে আপনি এটি দেখতে পারেন,

/*
 * This algorithm was taken from the geo_distance function of the 
 * earthdistance package contributed by Bruno Wolff III.
 * It was altered to accept GEOMETRY objects and return results in
 * meters.
 */
PG_FUNCTION_INFO_V1(LWGEOM_distance_sphere);
Datum LWGEOM_distance_sphere(PG_FUNCTION_ARGS)
{
        const double EARTH_RADIUS = 6370986.884258304;

দস্তাবেজের দিকে অগ্রসর হওয়া earthdistance, আপনি এটি খুঁজে পাবেন:

নোট করুন যে মডিউলের কিউব-ভিত্তিক অংশের বিপরীতে, ইউনিটগুলি এখানে কঠোরভাবে ব্যবহৃত হয়েছে: earth()ফাংশন পরিবর্তন করা এই অপারেটরের ফলাফলকে প্রভাবিত করবে না।

এবং সেই হার্ড-ওয়্যার্ড নম্বর: EARTH_RADIUSএখানে দেখা যায়

/* Earth's radius is in statute miles. */
static const double EARTH_RADIUS = 3958.747716;

সুতরাং আপনি একটি সহজ করতে পারেন।

EARTH_RADIUS * MILES_TO_METERS = EARTH_RADIUS_IN_METERS
 3958.747716 * 1609.344        = 6370986.884258304

এবং আপনি আপনার আছে 6370986.884258304। অবশ্যই, কেবল এটি কেটে ফেলুন এবং এটি longকেন সংরক্ষণ করবেন তা সংরক্ষণ করুন।

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

earth_distanceব্রুস মোমজিয়ান একটি প্রাক-পোস্টজিআইএস মডিউল। আমি এখানে বমোজিয়ার কনস্ট্যান্ট: 6370986 ঘোষণা করছি: মাইএসকিউএলকে সন্তুষ্ট করার জন্য মিটারে পৃথিবীর একটি ভাল নফ '। যদিও দীর্ঘ সময় নাও হতে পারে।


2
তবে সেই খুব সুনির্দিষ্ট চিত্রটি 3958.747716 কোথা থেকে এসেছে? আমি সর্বাধিক খুঁজে পেতে পারি 3958.74795, যা মার্কিন সমীক্ষার মাইল সংখ্যা 63৩71১ কিলোমিটারে, তবে এটি এখনও প্রায় ৩ 37 সেমি
অবধিবিহীন ,,,,

1
@ হেনিংমখোলম ভাল লড়াইয়ের লড়াই চালিয়ে যাওয়ার কোনও ধারণা নেই। ;)
ইভান ক্যারল

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