ভিনসেন্টি এবং গ্রেট-সার্কেল দূরত্ব গণনার মধ্যে পার্থক্য?


16

পাইথনের জিওপি প্যাকেজে দুটি দূরত্ব পরিমাপের কৌশল রয়েছে: গ্রেট সার্কেল এবং ভিনসেন্টির সূত্র

>>> from geopy.distance import great_circle
>>> from geopy.distance import vincenty
>>> p1 = (31.8300167,35.0662833) # (lat, lon) - https://goo.gl/maps/TQwDd
>>> p2 = (31.8300000,35.0708167) # (lat, lon) - https://goo.gl/maps/lHrrg
>>> vincenty(p1, p2).meters
429.16765838976664
>>> great_circle(p3, p4).meters
428.4088367903001

পার্থক্য কি? কোন দূরত্ব পরিমাপ পছন্দ হয়?

উত্তর:


18

উইকিপিডিয়া অনুসারে, ভিনসেন্টির সূত্রটি ধীর হলেও আরও নির্ভুল :

থানডিয়াস ভিনসেন্টি (1975a) দ্বারা বর্ধিত গোলকের পৃষ্ঠের দুটি পয়েন্টের মধ্যকার দূরত্ব গণনা করতে ভিনসেন্টির সূত্রগুলি জিওডেসিতে ব্যবহৃত দুটি সম্পর্কিত পুনরাবৃত্ত পদ্ধতি যা এগুলি পৃথিবীর চিত্রটি একটি বিচ্ছিন্ন গোলক, এই ধারণার উপর ভিত্তি করে তৈরি করা হয়েছে গোলাকৃতির পৃথিবী ধরে নিয়েছে এমন মহাকেন্দ্রের দূরত্বের মতো পদ্ধতির চেয়ে আরও সঠিক।

নির্ভুলতার পার্থক্য ~0.17%ইস্রায়েলে একটি 428 মিটার দূরত্বে। আমি একটি দ্রুত এবং নোংরা গতির পরীক্ষা করেছি:

<class 'geopy.distance.vincenty'>       : Total 0:00:04.125913, (0:00:00.000041 per calculation)
<class 'geopy.distance.great_circle'>   : Total 0:00:02.467479, (0:00:00.000024 per calculation)

কোড:

import datetime
from geopy.distance import great_circle
from geopy.distance import vincenty
p1 = (31.8300167,35.0662833)
p2 = (31.83,35.0708167)

NUM_TESTS = 100000
for strategy in vincenty, great_circle:
    before = datetime.datetime.now()
    for i in range(NUM_TESTS):
        d=strategy(p1, p2).meters
    after = datetime.datetime.now()
    duration = after-before
    print "%-40s: Total %s, (%s per calculation)" % (strategy, duration, duration/NUM_TESTS)

উপসংহারে: ভিনসেন্টির সূত্রটি গ্রেট-সার্কেলের তুলনায় গণনার সময়কে দ্বিগুণ করে এবং পরীক্ষিত বিন্দুতে এর যথার্থতা লাভ হয় ~ 0.17%।

গণনার সময় যেহেতু নগণ্য, তাই প্রতিটি ব্যবহারিক প্রয়োজনের জন্য ভিনসেন্টির সূত্রটি পছন্দ করা হয়।

আপডেট : whuber এবং cffk এবং cffk এর উত্তর দ্বারা অন্তর্দৃষ্টিপূর্ণ মন্তব্য অনুসরণ , আমি সম্মত যে নির্ভুলতা লাভ ত্রুটির সাথে তুলনা করা উচিত, পরিমাপ নয়। সুতরাং, ভিনসেন্টির সূত্রটি আরও সঠিক মাত্রার কয়েকটি আদেশ, orders 0.17% নয়।


3
+1 ভাল হয়েছে। পৃথিবী জুড়ে ত্রুটির একটি সাধারণ বিশ্লেষণের জন্য, দয়া করে থ্রেডটি gis.stackexchange.com/questions/25494দেখুন
whuber

3
ভিনসেন্টি বড় বৃত্তের সূত্রের তুলনায় উপবৃত্তাকার জিওডাসিক দূরতকে বহুগুণ বেশি গণনা করে। তাই বলে ভিনসেন্টির যথার্থতা লাভ মাত্র 0.17% বিভ্রান্তিকর। (এটি একটি স্লাইড নিয়ম ব্যবহারের চেয়ে ডাবল নির্ভুল পাটিগণিত 0.1% বেশি নির্ভুল বলে সমতুল্য))
সিএফকেক

14

আপনি যদি ভূ-উপকারী ব্যবহার করে থাকেন তবে গ্রেট_সার্কেল এবং ভিনসেন্টি দূরত্বগুলি সমানভাবে সুবিধাজনক। এই ক্ষেত্রে, আপনার প্রায়শই এমনটি ব্যবহার করা উচিত যা আপনাকে আরও সঠিক ফলাফল দেয়, অর্থাত্ ভিনসেন্টি। দুটি বিবেচনা (যেমন আপনি উল্লেখ করেছেন) হ'ল গতি এবং যথার্থতা।

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

আপনার ব্যবহৃত পয়েন্টগুলির জন্য, ভিনসেন্টিতে ত্রুটিটি 6 μm এবং দুর্দান্ত বৃত্তের দূরত্বের ত্রুটিটি 0.75 মিটার। আমি তখন বলব যে ভিনসেন্টি 120000 গুণ বেশি নির্ভুল (0.17% এর চেয়ে বেশি নির্ভুল)। সাধারণ পয়েন্টগুলির জন্য, দুর্দান্ত বৃত্তের দূরত্বের ত্রুটিটি 0.5% এর বেশি হতে পারে। তাহলে কি আপনি দূরত্বে 0.5% ত্রুটি নিয়ে বেঁচে থাকতে পারবেন? নৈমিত্তিক ব্যবহারের জন্য (কেপটাউন থেকে কায়রো থেকে দূরত্ব কী?) সম্ভবত আপনি পারবেন। তবে, অনেকগুলি জিআইএস অ্যাপ্লিকেশনের আরও কঠোর নির্ভুলতার প্রয়োজনীয়তা রয়েছে। (0.5% 1mm এর 5 মি। এটি সত্যই একটি পার্থক্য করে))

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

যোগ করুন (মে 2017)

@ ক্রেগ-হিকদের দেওয়া উত্তরের উত্তরে। জিওপিতে ভিনসেন্টি () পদ্ধতির একটি মারাত্মক মারাত্মক ত্রুটি রয়েছে: এটি প্রায় অ্যান্টিপোডাল পয়েন্টগুলির জন্য একটি ত্রুটি নিক্ষেপ করে। কোডের ডকুমেন্টেশনগুলি পুনরাবৃত্তির সংখ্যা বাড়ানোর পরামর্শ দেয়। তবে এটি সাধারণ সমাধান নয় কারণ ভিনসেন্টি () দ্বারা ব্যবহৃত পুনরাবৃত্তি পদ্ধতি এই জাতীয় পয়েন্টগুলির জন্য অস্থির। (প্রতিটি পুনরাবৃত্তি আপনাকে সঠিক সমাধান থেকে আরও এগিয়ে নিয়ে যায়)।

আমি কেন এই সমস্যাটিকে "সম্ভাব্য মারাত্মক" হিসাবে চিহ্নিত করব? কারণ অন্য একটি সফ্টওয়্যার লাইব্রেরির মধ্যে দূরত্ব ফাংশনের যে কোনও ব্যবহারের ব্যতিক্রমটি পরিচালনা করতে সক্ষম হওয়া দরকার। কোনও এনএএন বা গ্রেট-সার্কেল দূরত্ব ফিরিয়ে এটিকে পরিচালনা করা সন্তোষজনক হতে পারে না, কারণ ফলস্বরূপ দূরত্বের কার্যটি ত্রিভুজ বৈষম্যকে মানবে না যা এর ব্যবহারকে বাদ দেয়, যেমন, ভ্যানটেজ-পয়েন্ট গাছগুলিতে।

পরিস্থিতি পুরোপুরি দুর্বল নয়। আমার পাইথন প্যাকেজ জিওগ্রাফিকালিব কোনও ব্যর্থতা ছাড়াই জিওডেসিক দূরত্বকে নির্ভুলভাবে গণনা করে। Geopy টান অনুরোধ # 144 geopy এর দূরত্ব ব্যবহার geographiclib প্যাকেজ ফাংশন পরিবর্তন যদি এটা উপলব্ধ। দুর্ভাগ্যক্রমে এই টানার অনুরোধটি অউজেস্ট ২০১ since সাল থেকে লম্বা।

অ্যাডেন্ডাম (মে 2018)

জিওপি 1.13.0 এখন কম্পিউটারের দূরত্বের জন্য ভৌগলিক প্যাকেজটি ব্যবহার করে। এখানে একটি নমুনা কল এসেছে (মূল প্রশ্নের উদাহরণের ভিত্তিতে):

>>> from geopy.distance import great_circle
>>> from geopy.distance import geodesic
>>> p1 = (31.8300167,35.0662833) # (lat, lon) - https://goo.gl/maps/TQwDd
>>> p2 = (31.8300000,35.0708167) # (lat, lon) - https://goo.gl/maps/lHrrg
>>> geodesic(p1, p2).meters
429.1676644986777
>>> great_circle(p1, p2).meters
428.28877358686776

3

এখানে দ্বিতীয় উত্তর পোস্ট করার জন্য আমার ক্ষমা, তবে আমি জিওডেসিক দূরত্ব গণনার জন্য বিভিন্ন অ্যালগরিদমের জন্য নির্ভুলতা এবং সময়ের তুলনা প্রদান করতে @ ক্রেগ-হিকদের অনুরোধটির প্রতিক্রিয়া জানার সুযোগ নিচ্ছি taking জিওপিসির জন্য আমি আমার টানার অনুরোধে # 144-এ এই মন্তব্যটির একটি মন্তব্য বলেছি যা জিওডিক্সের জন্য আমার অ্যালগরিদমের দুটি প্রয়োগের মধ্যে একটিকে জিওপির অভ্যন্তরে ব্যবহার করতে দেয়, একটি হল নেটিভ পাইথন বাস্তবায়ন, জিওডেসিক (জিওগ্রাফিক) এবং অন্যান্য ব্যবহারগুলি সি, জিওডেসিক (পাইপ্রোজ) এ একটি বাস্তবায়ন

এখানে কিছু সময়সীমার তথ্য রয়েছে। টাইমগুলি প্রতিটি কল প্রতি মাইক্রোসিসে রয়েছে

method                          dist    dest
geopy great_circle              20.4    17.1
geopy vincenty                  40.3    30.4
geopy geodesic(pyproj)          37.1    31.1
geopy geodesic(geographiclib)  302.9   124.1

আমার জিওডেসিক টেস্ট সেটের ভিত্তিতে জিওডেসিক গণনার যথার্থতা এখানে । ত্রুটিগুলি মাইক্রনগুলির ইউনিটগুলিতে দেওয়া হয় (1e-6 মি)

method                        distance destination
geopy vincenty                 205.629  141.945
geopy geodesic(pyproj)           0.007    0.013
geopy geodesic(geographiclib)    0.011    0.010

আমি হ্যানোশে-এর পুল অনুরোধ # 194 অন্তর্ভুক্ত করেছি যা গন্তব্য ফাংশনে একটি খারাপ ত্রুটি সমাধান করে। এই ফিক্স ব্যতীত ভিনসেন্টির জন্য গন্তব্য গণনায় ত্রুটি 8.98 মিটার।

19.2% পরীক্ষার ক্ষেত্রে ভিনস্যান্টি.ডেসটেন্স (পুনরাবৃত্তি = 20) দিয়ে ব্যর্থ হয়েছে। তবে পরীক্ষার সেটটি সেই মামলার দিকে ঝুঁকছে যা এই ব্যর্থতার ক্ষেত্রে ঘটবে।

ডাব্লুজিএস ৮৮ এলিপসয়েডে এলোমেলো পয়েন্ট সহ, ভিন্স্টি অ্যালগরিদমটি 1000000 বারের মধ্যে 16.6 ব্যর্থ হওয়ার গ্যারান্টিযুক্ত (সঠিক সমাধান ভিনসেন্টি পদ্ধতির একটি অস্থির স্থির বিন্দু)।

ভিনসেন্টি এবং পুনরাবৃত্তির ভৌগলিক প্রয়োগের সাথে = 20, ব্যর্থতার হার 1000000 প্রতি 82.8। পুনরাবৃত্তি = 200 সহ, ব্যর্থতার হার 1000000 প্রতি 21.2 হয় is

এই হারগুলি কম হলেও ব্যর্থতাগুলি বেশ সাধারণ হতে পারে। উদাহরণস্বরূপ, 1000 এলোমেলো পয়েন্টের একটি ডেটাসেটে (বিশ্বে বিমানবন্দরগুলি মনে করুন, সম্ভবত), সম্পূর্ণ দূরত্বের ম্যাট্রিক্সের গণনা গড়ে 16 বার ব্যর্থ হবে (পুনরাবৃত্তি = 20 সহ)।


2

এটি প্রদর্শিত হয় যে জিওপি.ডেসটেন্স প্যাকেজ একটি ফাংশন "দূরত্ব ()" সরবরাহ করে যা ভিনসেন্টির () থেকে ডিফল্ট হয়। আমি নীতিগতভাবে দূরত্ব () ব্যবহার করার পরামর্শ দেব, কারণ এটি প্যাকেজের প্রস্তাবনা হিসাবে যদি ভবিষ্যতে ভিনসেন্টি () থেকে কখনও সরিয়ে দেওয়া হয় (তবে তা সম্ভবত সম্ভাব্য নয়)। পড়া চালিয়ে যান:

এই দস্তাবেজ নোটটি আপনার নির্দিষ্ট করা ভিনসেন্টি () ফাংশনের জন্য উত্স কোডে অন্তর্ভুক্ত রয়েছে:

দ্রষ্টব্য: ভিনসেন্টি দূরত্বের এই বাস্তবায়নটি কিছু বৈধ পয়েন্টের জন্য রূপান্তর করতে ব্যর্থ। কিছু ক্ষেত্রে, পুনরাবৃত্তির সংখ্যা বাড়িয়ে ( ২০ টির ডিফল্ট সহ iterationsশ্রেণীর দেওয়া কীওয়ার্ড আর্গুমেন্ট __init__) ফলাফল পাওয়া যায়। এটি ব্যবহার করা পছন্দনীয় হতে পারে: শ্রেণি .great_circle:, যা প্রান্তিকভাবে কম সঠিক, তবে সর্বদা একটি ফলাফল দেয়।

উপরের মন্তব্য / নোট সহ উত্স কোডটি https://github.com/geopy/geopy/blob/master/geopy/distance.py এ পাওয়া যাবে ভিনসেন্টির সংজ্ঞাটির জন্য নীচে স্ক্রোল করুন ()

তবুও, প্যাকেজটির দ্বারা ডিফল্ট দূরত্ব ফাংশন ব্যবহৃত হয় যখন দূরত্ব () দূর করা হয় ভিনসেন্টি () ফাংশন, যা বোঝায় যে রূপান্তর করতে ব্যর্থতা বিপর্যয়কর নয়, এবং একটি যুক্তিসঙ্গত উত্তর ফিরে আসে - সর্বাধিক গুরুত্বপূর্ণভাবে একটি ব্যতিক্রম উত্পন্ন হয় না।

আপডেট: "সিএফকে" দ্বারা উল্লিখিত হিসাবে, অ্যালগরিদম একত্রিত না হলে ভিনসেন্টি () ফাংশন স্পষ্টভাবে একটি ভ্যালুরইরারের ব্যতিক্রম ছুঁড়ে ফেলে - যদিও এটি ফাংশন বিবরণীতে ডকুমেন্টেড নয়। সুতরাং, ডকুমেন্টেশন বগি হয়।


না, ভিনসেন্টি () পদ্ধতিটি একটি ব্যতিক্রম উত্পন্ন করতে পারে । এটি প্রায়শই দাবি করা হয় যে এটি কোনও বিষয় নয় কারণ এটি প্রায় অ্যান্টিপোডাল পয়েন্টগুলির মধ্যে দূরত্বের গণনাকেই প্রভাবিত করে। তবে এই জাতীয় ব্যর্থতার অর্থ এই যে ত্রিভুজ বৈষম্য ব্যর্থ হয় এবং তাই ভ্যানস্টি দূরত্বটি ভ্যানটেজ-পয়েন্ট গাছ ব্যবহার করে নিকটতম-প্রতিবেশী অনুসন্ধান প্রয়োগ করতে ব্যবহার করা যায় না (যা আপনাকে নির্ধারণ করতে দেয়, উদাহরণস্বরূপ, নিকটতম বিমানবন্দরের অবস্থান দক্ষতার সাথে)। এই সমস্যাটি পেতে, আপনি এই জিওপি টান অনুরোধটি github.com/geopy/geopy/pull/144 ব্যবহার করতে পারেন যা দূরত্বের জন্য GeographicLib ব্যবহার করে।
সিএফেকে

@ সিএফকে - আপনার মন্তব্য বা লিঙ্ক থেকে আমি নিশ্চিতভাবে বুঝতে পারি না, তবে আমি অনুমান করছি "জিওপি পুল অনুরোধ" হয়ত দেখার সারণী হতে পারে - তাই না? আলোচনাটি দুটি ভাগে বিভক্ত করা যেতে পারে: যেখানে সন্ধানের টেবিলটি উপলব্ধ নেই (ডাউনলোড করা হয়েছে) এবং যেখানে এটি উপলব্ধ is
ক্রেগ হিক্স

@cffk - এটি উপলভ্য নয় এমন ক্ষেত্রে: প্রথমত, ডকুমেন্টেশনগুলি বগি মূলত কারণ এটিতে পরিকল্পনার ব্যতিক্রমের বিবরণ অন্তর্ভুক্ত করা হয় না (ভ্যালুয়েরিয়ার উত্থাপন ("ভিনসেন্টি সূত্রটি রূপান্তর করতে ব্যর্থ!")), কিন্তু কারণ এটি অ্যান্টিপোডাল প্রায় পয়েন্ট পরিমাপ হিসাবে অস্থিরতা বর্ণনা করে না। আমি ভিনসেন্টি ক্লাসে একটি ভিনসেন্টি_নএক্সসিপিটি ফাংশন যুক্ত করার পরামর্শ দিচ্ছি যা অভ্যন্তরীণভাবে ব্যতিক্রমগুলি ধরে এবং পরিবর্তে একটি দুর্দান্ত বৃত্তের মান প্রদান করে এবং ডিফল্ট সেটিংটি তৈরি করে: দূরত্ব = বিন্যাস_নেক্সসেপ।
ক্রেগ হিক্স

@cffk - যেখানে সন্ধানের টেবিলটি পাওয়া যায়: আমি অনেক পরীক্ষার এবং সময় দেওয়ার পরামর্শ দেব কারণ লুকিং পদ্ধতিগুলি প্রায়শই ক্যাশের বাইরে চলে যায় এবং তাই সময় ব্যয়বহুল। "টানুন" পদ্ধতিটি ভিনসেন্টি পদ্ধতিটি ডিফল্ট হিসাবে প্রতিস্থাপনের অর্থ, পাইথন ডিরেক্টরিতে যে কেউ "টানুন" প্যাকেজ ডাউনলোড করার ফলে সমস্ত বিদ্যমান কলগুলি ভিনস্যান্টিকে কলগুলিতে টেনে আনার জন্য পরিবর্তন করতে পারে - যদি ব্যবহারকারী (গুলি) সত্যিই ঠিক থাকেন তবে সমস্যা হতে পারে সাবধানে এবং স্পষ্টভাবে "টান" পদ্ধতিটি চেষ্টা করতে চেয়েছিলেন।
ক্রেগ হিক্স

@ ক্রেগ-হিক্স - না, "টান অনুরোধ" দূরত্ব পরিমাপের জন্য আরও ভাল অ্যালগরিদম (আমার দ্বারা!) প্রতিস্থাপন করে দেখুন doi.org/10/10.1007/s00190-012-0578-z এটি ভিন্স্টির চেয়ে আরও সঠিক, সর্বদা ফলাফল দেয় , এবং একই সময় নেয়। আমি ভূ-তত্ত্বের রক্ষণাবেক্ষণকারী নই এবং এই টানার অনুরোধটি গত আগস্ট থেকে সুপ্ত রয়েছে। যদি আমার ড্রাথার থাকে তবে এটি জিওপিতে প্রতিস্থাপিত হবে (এবং ভিন্সেন্টি () ভিনসেন্টির পরিবর্তে নতুন অ্যালগরিদমকে ডেকে তুলবে) এবং এটিই আলোচনার সমাপ্তি হবে।
সিএফকে

1

ভিনসেন্টি বা হ্যাওয়ারিন বা কোসাইনের গোলাকৃতি আইন ব্যবহার করা হোক না কেন, আপনি যে কোডটি ব্যবহার করার পরিকল্পনা করছেন সেটি যে কোনও সম্ভাব্য সমস্যা সম্পর্কে সচেতন হওয়ার বুদ্ধি রয়েছে, কীভাবে ভিনসেন্টি বনাম হ্যাজারিন বনাম স্লোক ইস্যুগুলির সাথে একটি আচরণ করে প্রত্যেকের লুকোচুরি বিষয়গুলি / এজজাগুলি সম্পর্কে সচেতন হওয়ার সাথে সাথে পৃথক হবে, যা সম্ভবত পরিচিত বা নাও হতে পারে। পাকা প্রোগ্রামার এটি জানেন। Newbies না পারে। আমি যখন কোনও ফোরামের স্নিপেট কিছু ক্ষেত্রে অপ্রত্যাশিতভাবে কিছু করি তখন আমি তাদের মধ্যে কিছুটা হতাশার হাত থেকে রক্ষা পাওয়ার আশা করি। যদি কেউ গুরুত্ব সহকারে এর কোনও সংস্করণ, ভিনসেন্টি, হ্যারসাইন, স্লোক, এসই, এসও, রেডডিট, কোওড়া ইত্যাদি ব্যবহার করতে পারে তবে সমাধানের প্রাথমিক কোডিংয়ে সীমিত সহায়তা দিতে পারে, তবে এর অর্থ এই নয় যে তাদের সমাধান বা গৃহীত 'উত্তর' সমস্যাগুলি মুক্ত। যদি কোনও প্রকল্প যথেষ্ট গুরুত্বপূর্ণ, তবে এটি উপযুক্ত যুক্তিসঙ্গত গবেষণার দাবিদার। ম্যানুয়ালটি পড়ুন, দস্তাবেজগুলি পড়ুন এবং যদি সেই কোডটির একটি কোড পর্যালোচনা বিদ্যমান থাকে তবে তা পড়ুন। একশ বা তারও বেশি বার উত্থাপিত একটি স্নিপেট বা টুকরোটি অনুলিপি করা এবং আটকানোর অর্থ এই নয় যে এর সুরক্ষাটি বিস্তৃত এবং আশ্বাসযুক্ত।

সিএফকে পোস্ট করা উদ্বেগজনক উত্তরটি প্যাকেজযুক্ত সমাধানগুলিতে লুক্কায়িত এজক্যাসগুলি সম্পর্কে সচেতন হওয়ার বিষয়টি উত্থাপন করে, এটি ব্যতিক্রম বা অন্যান্য সমস্যা তৈরি করতে পারে । এই পোস্টে সুনির্দিষ্ট দাবিগুলি বর্তমানে অনুসরণ করার জন্য আমার সময় বাজেটের বাইরে, তবে আমি এ থেকে দূরে সরে যাচ্ছি যে কমপক্ষে একটি ভিনসেন্টি বাস্তবায়ন সহ কয়েকটি প্যাকেজগুলিতে প্রকৃতপক্ষে রীতিমতো সমস্যা রয়েছে, যার বিষয়ে কমপক্ষে একজন ব্যক্তি উন্নতির প্রস্তাব করেছেন এই সমস্যাগুলির মুখোমুখি হওয়ার ঝুঁকি হ্রাস বা হ্রাস করার জন্য এক বা অন্য উপায়। আমি ভিনসেন্টি সম্পর্কিত এ বিষয়ে আর যুক্ত করব না (এটি সম্পর্কে খুব বেশি অজ্ঞ) তবে এটিকে পরিবর্তে হেরসিনে পরিণত করব, কমপক্ষে আংশিকভাবে ওপি নিয়ে এই বিষয়টিতে।

অজগর বা অন্য কোন ভাষাতে জনপ্রিয়ভাবে প্রকাশিত হরসিন সূত্রটি সম্ভবত আজ প্রায় সকল ইন্টেল এবং ইন্টেল-জাতীয় সিস্টেমে এবং আইআরএম প্রসেসর, পাওয়ারপিসি, ইত্যাদিতে আইইইই 754 ফ্লোটিং পয়েন্ট স্পেস ব্যবহার করে চলেছে, এটি চলছে ভাসমান পয়েন্ট আনুমানিকতা এবং বৃত্তাকার কারণে খুব কাছাকাছি বা 180 ডিগ্রি তোরণ দূরত্ব, অ্যান্টিপোডাল পয়েন্টগুলিতে খুব বিরল তবে বাস্তব এবং পুনরাবৃত্তযোগ্য ব্যতিক্রম ত্রুটিগুলির প্রতিও সংবেদনশীল হতে পারে। কিছু নবজাতক সম্ভবত এখনও এই পরিস্থিতি দ্বারা কামড়ায় না। যেহেতু এই এফপি স্পেকটি প্রায় এবং গোলাকার হয়, এর অর্থ এই নয় যে কোনও কোড যা fp64 এ কল করে ব্যতিক্রম ত্রুটি ঘটাতে পারে, না। তবে কিছু কোড, কিছু সূত্রে এত সুস্পষ্ট প্রান্তকোষ নাও থাকতে পারে যেখানে আইইইই 754 এফপি 64 এর আনুমানিকতা এবং রাউন্ডিংগুলির কারণে কোনও গণিত পদ্ধতির ডোমেনের বাইরে কোনও মান ভ্রান্ত হতে পারে যা নির্দ্বিধায় এই জাতীয় মানের মূল্যায়নের প্রত্যাশা করে। একটি উদাহরণ ... বর্গ ()। যদি একটি নেতিবাচক মান স্কয়ার্ট () যেমন স্কয়ার্ট (-0.00000000000000000122739) এর দিকে সন্ধান করে তবে ব্যতিক্রম ত্রুটি থাকবে। হ্যাওয়ারসিন সূত্রে, এটি যেভাবে সমাধানের দিকে অগ্রসর হয়, সেখানে অ্যাটান 2 () এ দুটি স্কয়ার্ট () পদ্ধতি রয়েছে। দ্যএকটি যা গণনা করা হয় এবং তারপরে স্কয়ার্ট () এ ব্যবহৃত হয়, এটি পৃথিবীর অ্যান্টিপোডাল পয়েন্টগুলিতে 0.0 এর নীচে বা 1.0 এর উপরে সামান্য বিভ্রান্ত হতে পারে, খুব কম fp64 আনুমানিকতা এবং বৃত্তাকার কারণে, তবে খুব সম্ভবত পুনরাবৃত্তি হয়। ধারাবাহিকভাবে নির্ভরযোগ্য পুনরাবৃত্তিযোগ্যতা, এই প্রসঙ্গে, এটিকে একটি ব্যতিক্রম ঝুঁকি, সুরক্ষার জন্য একটি কিনার, একটি বিচ্ছিন্ন এলোমেলো ফ্লুকের পরিবর্তে প্রশমিত করতে পারে makes প্রয়োজনীয় সুরক্ষা ছাড়াই এখানে হ্যারসিনের একটি সংক্ষিপ্ত অজগর 3 স্নিপেটের একটি উদাহরণ রয়েছে:

import math as m

a = m.sin(dlat / 2)**2 + m.cos(lat1) * m.cos(lat2) * m.sin(dlon / 2)**2
c = 2 * m.atan2(m.sqrt(a), m.sqrt(1 - a))
distance = Radius * c

অ্যান্টিপোডাল পয়েন্টগুলির খুব কাছাকাছি বা কাছাকাছি সময়ে, সূত্রের প্রথম লাইনে গণনা একটি ঘৃণিত হতে পারে, খুব কমই, তবে একইভাবে দীর্ঘ একই স্থানাঙ্কের সাথে পুনরাবৃত্তি হয়। রক্ষা করার জন্য / ঐ বিরল ঘটনার সংশোধন, কেবল এক যোগ করতে পারেন, পরে একটি হিসাব, নিচের দেখা গেছে:

import math as m

note = ''

a = m.sin(dlat / 2)**2 + m.cos(lat1) * m.cos(lat2) * m.sin(dlon / 2)**2
if a < 0.0: a = 0.0 ; note = '*'
if a > 1.0: a = 1.0 ; note = '**'
c = 2 * m.atan2(m.sqrt(a), m.sqrt(1 - a))
distance = Radius * c

# note = '*'  # a went below 0.0 and was normalized back to 0.0
# note = '**' # a went above 1.0 and was normalized back to max of 1.0

অবশ্যই আমি এখানে পুরো ফাংশনটি দেখাইনি তবে একটি সংক্ষিপ্ত স্নিপেট যেমন প্রায়শই পোস্ট করা হয়। কিন্তু এই এক শো SQRT () এর জন্য সুরক্ষা, পরীক্ষার দ্বারা একটি এবং যদি প্রয়োজন এটা স্বাভাবিক, এছাড়াও ব্যতীত ব্যবহার করে দেখুন পুরো জিনিস রাখা প্রয়োজন সংরক্ষণ। নোট = '' আপ টপটি হ'ল বাইটকোড পর্যায়ের প্রতিবাদ করা থেকে বিরত রাখা that নোটটি কোনও কার্য নির্ধারিত ফলাফলের সাথে ফিরিয়ে দেওয়া হলে কোনও মূল্য নির্ধারিত হওয়ার আগে ব্যবহার করা হচ্ছে।

এই সহজ পরিবর্তনের সাথে সাথে, দুই যোগ করার একটি পরীক্ষার, বর্গমূল () ফাংশন খুশি হবে, এবং কোড এখন একটি অতিরিক্ত আছে নোট যে কোড কলিং, সতর্কতা যে এর ফলে সামান্য স্বাভাবিক করা হয়েছে, এবং কেন ফিরে যেতে পারে। কিছু যত্ন নিতে পারে, কিছু নাও পারে, তবে এটি সেখানে রয়েছে, ব্যতিক্রমী ত্রুটি প্রতিরোধ করে, অন্যথায় ঘটতে পারে 'পারে'। ব্লক ব্যতীত একটি চেষ্টা ব্যতিক্রমটি ধরতে পারে তবে এটি ঠিক করতে পারে না, যদি না তা করার জন্য স্পষ্টভাবে লেখা হয়। এটা তোলে কোড সংশোধন লাইন (গুলি) অবিলম্বে পরে করা আরো সহজ বলে মনে হয় একটি হিসাব লাইন। পুঙ্খানুপুঙ্খভাবে স্ক্র্যাব করা ইনপুটটির জন্য এখানে মোটেও ব্লক ব্যতীত চেষ্টা করার দরকার নেই।

সারাংশ, haversine ব্যবহার করা হয় তবে, বরং স্পষ্টভাবে কোডেড একটি প্যাকেজ বা গ্রন্থাগার ব্যবহার করে, কোন উপায় আপনার ভাষা ব্যাপার চেয়ে, এটা পরীক্ষা করার জন্য একটি ভাল ধারণা হবে এবং স্বাভাবিক একটি অনুক্রমে 0.0 এর প্রয়োজনীয় পরিসর ফিরে <= একটি <= 1.0 তার সি গণনা সহ পরবর্তী লাইন রক্ষা করতে । তবে বেশিরভাগ হ্যাশারিন কোড স্নিপেটগুলি এটি দেখায় না এবং ঝুঁকিটি উল্লেখ করে না।

অভিজ্ঞতা: বিশ্বজুড়ে পুরোপুরি পরীক্ষার সময়, ০.০০১১ ডিগ্রি ইনক্রিমেন্টে, আমি ল্যাট লম্বা সংমিশ্রণগুলির সাথে একটি হার্ড ড্রাইভ পূরণ করেছি যা একটি ব্যতিক্রম ঘটেছে, একটি নির্ভরযোগ্য ধারাবাহিক পুনরাবৃত্তযোগ্য ব্যতিক্রম, এক মাসের মধ্যেও সিপিইউ কুলিংয়ের নির্ভরযোগ্যতা পরীক্ষা করার জন্য অনুরাগী, এবং আমার ধৈর্য। হ্যাঁ, আমি তখন থেকে বেশিরভাগ লগ মুছে ফেলেছি, যেহেতু তাদের উদ্দেশ্যটি মূলত পয়েন্টটি প্রমাণ করার জন্য ছিল (যদি শাস্তির অনুমতি দেওয়া হয়)। তবে আমার পরীক্ষার উদ্দেশ্যে রাখা সমস্যা 'ল্যাট লম্বাল মান' এর কিছু সংক্ষিপ্ত লগ রয়েছে।

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

আকাশের বস্তুগুলির মধ্যে কৌনিক দূরত্ব পরিমাপের জন্য আমি একটি ওভারহেড প্রজেক্টড আকাশচুম্বীতে হাওয়ারসিন ব্যবহার করেছি, যেমন পৃথিবীর অবস্থান থেকে দেখা যায়, আজিমূথ এবং এলইটিকে আকাশচুম্বী ল্যাট লম্বার সমতুল্য স্থানাঙ্কগুলির ম্যাপিং করা হয়েছে, একেবারে বিবেচনার জন্য কোনও এলিপসয়েড নেই পৃথিবীর পৃষ্ঠের অবস্থান থেকে দুটি বস্তুর মধ্যে কৌণিক দূরত্বের কোণটি পরিমাপ করার ক্ষেত্রে প্রজেক্টড তাত্ত্বিক আকাশচুম্বী একটি নিখুঁত গোলক is এটি আমার প্রয়োজনগুলি পুরোপুরি ফিট করে। সুতরাং, কিছু নির্দিষ্ট অ্যাপ্লিকেশনগুলিতে (আমার উদ্দেশ্যগুলির মধ্যে ভাল) হ্যাশারিন এখনও খুব দরকারী এবং খুব নির্ভুল ... তবে আপনি যদি এটি জিআইএস বা নেভিগেশনের জন্য পৃথিবীতে বা আকাশের বস্তু পর্যবেক্ষণ এবং পরিমাপে ব্যবহার করেন তবে এটি সুরক্ষিত রাখুন এটি অ্যান্টিপোডাল পয়েন্টগুলির ক্ষেত্রে বা অ্যান্টিপোডাল পয়েন্টগুলির খুব কাছাকাছি সময়ে, পরীক্ষা করেএবং যখন প্রয়োজন হয় তখন এটিটিকে প্রয়োজনীয় ডোমেইনে ফিরিয়ে আনা হচ্ছে।

অরক্ষিত হাওয়ারসাইন পুরো ইন্টারনেট জুড়ে রয়েছে এবং আমি কেবল একটি পুরাতন ইউজনেট পোস্ট দেখেছি যা কিছু সুরক্ষা দেখিয়েছে, আমি জেপিএল-এর কারও কাছ থেকে মনে করি, এবং এটি 1985-এর প্রাক হতে পারে, আইইইইই 754 এর ভাসমান পয়েন্ট স্পেস। অন্য দুটি পৃষ্ঠাতে অ্যান্টিপোডাল পয়েন্টগুলির নিকটে সম্ভাব্য সমস্যাগুলি উল্লেখ করা হয়েছে, তবে এই সমস্যাগুলি কীভাবে বর্ণনা করা যায় নি, বা কীভাবে এগুলি প্রশমিত করতে পারে। সুতরাং নতুনদের (আমার মতো) যারা উদ্ভাবন করেছেন তারা সবসময় ভাল অনুশীলনটি আরও গবেষণার জন্য ভালভাবে বুঝতে না পারার জন্য এবং এজডেস কেস পরীক্ষা করতে পারেন যা তারা কোনও প্রকল্পের অনুলিপি অনুলিপি করে আটকানো হয়েছিল। সিএফকেকের আকর্ষণীয় পোস্টটি সতেজ ছিল যে এই ধরণের সমস্যাগুলির সাথে এটি সর্বজনীন ছিল, যা প্রায়শই উল্লেখ করা হয় না, স্নিপেটগুলিতে সুরক্ষার জন্য খুব কমই প্রকাশ্যে কোড করা হয় এবং পোস্ট করা অনিরাপদ ও অনির্দিষ্ট সংস্করণের পরিমাণের তুলনায় খুব কমই এইভাবে আলোচনা করা হয়।

20190923 পর্যন্ত, হ্যাশারিন সূত্রের উইকি পৃষ্ঠায় কমপিউটিং ডিভাইসগুলিতে ভাসমান পয়েন্ট সমস্যার কারণে অ্যান্টিপোডাল পয়েন্টগুলিতে সম্ভব সমস্যাটি উল্লেখ করা হয়েছে ... উত্সাহজনক ...

https://en.wikipedia.org/wiki/Haversine_formula

(কারণ সেই উইকি পৃষ্ঠাটিতে এই মুহুর্তে আমি যে বিভাগে সরাসরি লিঙ্ক করব তার জন্য এইচটিএমএল অ্যাঙ্কর নেই, সুতরাং পৃষ্ঠাটি লোড হওয়ার পরে, 'এই সূত্রগুলি ব্যবহার করার সময়' জন্য সেই ব্রাউজার পৃষ্ঠায় একটি অনুসন্ধান করুন এবং আপনি উল্লিখিত অ্যান্টিপোডাল পয়েন্টগুলির সাথে হেরসিনের সমস্যাটি দেখুন, আরও সরকারীভাবে)

এবং এই অন্যান্য সাইটেরও এর একটি খুব সংক্ষিপ্ত উল্লেখ রয়েছে:

https://www.movable-type.co.uk/scripts/latlong.html

'রাউন্ডিং ত্রুটিগুলির বিরুদ্ধে সুরক্ষা সহ' এর জন্য যদি কেউ এই পৃষ্ঠায় সন্ধান করে তবে এটি রয়েছে ...

যদি অ্যাটান 2 পাওয়া না যায় তবে সিটিকে 2 ⋅ আসিন (মিনিট (1, )a)) (গোলাকার ত্রুটির বিরুদ্ধে সুরক্ষা সহ) থেকে গণনা করা যেতে পারে।

এখন একটি বিরল উদাহরণ রয়েছে যেখানে রাউন্ডিং ত্রুটিগুলি উল্লেখ করা হয়েছে এবং আসিন () সংস্করণটির জন্য সুরক্ষা দেখানো হয়েছে, তবুও এটান 2 () সংস্করণটির জন্য উল্লেখ করা বা প্রদর্শিত হয়নি। তবে কমপক্ষে গোল করার ত্রুটির ঝুঁকি উল্লেখ করা হয়েছে।

imho, hasrsine ব্যবহার করে যে কোনও 24/7/365 অ্যাপ্লিকেশন, একটি গুরুত্বপূর্ণ এবং সাধারণ বিশদ হিসাবে অ্যান্টিপোডাল পয়েন্টগুলির কাছে এই সুরক্ষা প্রয়োজন।

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

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

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