केंद्र बिंदु से वर्ग x मील के निर्देशांक की गणना?


11

मैं एक केंद्रीय बिंदु के चारों ओर कुल्हाड़ी मील (या वृत्त) बनाने की कोशिश कर रहा हूं, जहां वर्ग के सभी किनारे केंद्र से x मील की दूरी पर होंगे। मुझे 4 कोने के निर्देशांक की आवश्यकता है।

यह मेरे दिमाग को घुमा रहा है और मेरे सिर को गोल करने की कोशिश कर रहा है? मैं हावरसाइन सूत्र का उपयोग करके दो बिंदुओं के बीच की दूरी तय कर सकता हूं लेकिन गणित गंभीरता से मेरा मजबूत बिंदु नहीं है और मुझे पाप, कॉस आदि समझ में नहीं आते हैं और इस तरह की कोशिश करने से मुझे हार हुई है!

मैं बिंदु से अक्षांश / देशांतर X मील की गणना करके आया हूं ? लेकिन मैं अभी नहीं मिला!

किसी को यह समझाने के लिए पर्याप्त होगा कि मैं सेब और नाशपाती के शब्दों में यह कैसे करूं?

यह समझाने के लिए कि मैं क्या करने की कोशिश कर रहा हूं;

मेरे पास एक वेबसाइट है, जहां उपयोगकर्ता किसी विशिष्ट क्षेत्र में इमारतों की खोज कर सकते हैं। वे एक शहर या स्थान में प्रवेश करेंगे (जिसे मैं लंबे समय तक पता करूंगा) और वे स्थान के 10 मील के भीतर एक विशिष्ट दायरे में खोज करते हैं।

मुझे 10 मीटर त्रिज्या के न्यूनतम / अधिकतम अक्षांश और लंबे समय को खोजने की आवश्यकता है ताकि मैं अपने डेटाबेस को क्वेरी कर सकूं जहां एक समान क्लिप का उपयोग किया जा सकता है:

Where buildingLat <= maxLat 
  and buildingLat <= minLat 
  and buildingLong >= minLong 
   or buildingLong >= maxLong

मुझे किसी प्रकार के सूत्र की आवश्यकता है!

मेरे निर्देशांक दशमलव डिग्री में हैं

जवाबों:


10

इस प्रयोजन के लिए सरल सन्निकटन अच्छे से अधिक हैं। उत्तर या दक्षिण, एक डिग्री लगभग 69 मील लेकिन पूर्व या पश्चिम है, यह केवल 69 * कॉस (अक्षांश) मील है। क्योंकि दस मील की अवधि में अक्षांश बहुत अधिक नहीं बदलते हैं, आप "वर्ग" के मध्य अक्षांश के कोसाइन का सुरक्षित रूप से उपयोग कर सकते हैं। इसलिए एक मध्य स्थान (च, l) से दूरी r वर्ग पर वर्ग के लिहाज से वांछित निर्देशांक , जिसे lat-lon के रूप में दिया गया है, की गणना की जाती है

df = r/69        // North-south distance in degrees
dl = df / cos(f) // East-west distance in degrees
{(f-df,l-dl), (f+df,l-dl), (f+df,l+dl), (f-df,l+dl)} // List of vertices

उदाहरण के लिए, मान लीजिए कि आर = 10 मील और केंद्रीय स्थान अक्षांश 50 डिग्री उत्तर, देशांतर 1 डिग्री पश्चिम में है, इसलिए (एफ, एल) = (50, -1) डिग्री। फिर

df = 10/69 = 0.145
dl = 0.145 / cos(50 degrees) = 0.145 / 0.6428 = 0.225
f - df = 50 - 0.145 = 49.855 (southernmost latitude)
f + df = 50 + 0.145 = 50.145 (northernmost latitude)
l - dl = -1 - 0.225 = -1.225 (western longitude)
l + dl = -1 + 0.225 = -0.775 (eastern longitude)

और निर्देशांक हैं (49.855, -1.225), (50.145, -1.225), (50.145, -0.775), और (49.855, -0.775) जब आप दक्षिण-पश्चिम कोने से शुरू होने वाले वर्ग के चारों ओर दक्षिणावर्त मार्च करते हैं।

इस सन्निकटन का उपयोग डंडे के पास या चौकों के लिए एक तरफ कुछ डिग्री से बड़ा न करें। इसके अलावा, जीआईएस की सीमाओं के आधार पर, देशांतर में वैश्विक कटौती के आसपास कुछ देखभाल की आवश्यकता हो सकती है, आमतौर पर + -180 डिग्री पर लिया जाता है।


4

केंद्र का X निर्देशांक लें और इसमें से x मील को घटाएं यह आपके वर्ग का बाईं ओर है। फिर केंद्र के Y समन्वय को लें और उसमें से X मील को घटाएं, यह आपके वर्ग का निचला भाग है। इन चरणों को दोहराएं लेकिन दाहिने हाथ और शीर्ष किनारों को प्राप्त करने के लिए घटाना के बजाय जोड़ना। अब आप अपने वर्ग के चार कोनों का निर्माण कर सकते हैं।

ऊपर दिए गए मान लें कि आपका केंद्र बिंदु मील में है। यदि यह पहले इसे अस्वीकार नहीं करता है। अन्य बुद्धिमान सभी दांव बंद हैं और आपका वर्ग वर्गाकार नहीं होगा।


क्या आप उदाहरण पृष्ठ की बात कर रहे हैं? मैं एक समन्वय से मीलों को कैसे घटा सकता हूं और क्या मुझे पृथ्वी की वक्रता को ध्यान में रखने की आवश्यकता नहीं है?
बेक्स

नहीं, यह इतना सरल है कि काम करने के लिए कोई वास्तविक उदाहरण नहीं है। शायद आपको यह निर्दिष्ट करने की आवश्यकता है कि आप किस सॉफ़्टवेयर का उपयोग कर रहे हैं? जैसा कि मैंने कहा मेरा समाधान मान लिया गया है कि आप अपने एक स्थानीय एसआरएस के लिए समन्वय (यदि आप तो नहीं है कि अपने पहले प्रश्न होना चाहिए) का अनुमान है
इयान Turton

मैं अब वास्तव में उलझन में हूँ! मैंने अपने प्रश्न को अद्यतन करने के लिए कहा कि मैं क्या करने की कोशिश कर रहा हूं। मुझे एक बाउंडिंग बॉक्स बनाने की आवश्यकता है ताकि मैं न्यूनतम और अधिकतम लाट और लंबा पा सकूं।
बेक्स

3
proj4js ( proj4js.org ) तो मदद करनी चाहिए
इयान Turton

1
मेरे निर्देशांक इस तरह दिखते हैं: 51.498485, -0.129089 जो डिग्री है वह नहीं है?
Bex

4

अंत में मेरा जवाब है: (सी # में)

मुझे शायद 4 निर्देशांक की आवश्यकता नहीं है, लेकिन मुझे लगता है कि वे काफी सटीक हैं।

 public static void GetBoundingCoords(double centerLat, double centerLong,  double distance)
    {
     Coordinate top=   MaxLatLongOnBearing(centerLat, centerLong,45,10);
     Coordinate right = MaxLatLongOnBearing(centerLat, centerLong, 135, 10);
     Coordinate bottom = MaxLatLongOnBearing(centerLat, centerLong, 225, 10);
     Coordinate left = MaxLatLongOnBearing(centerLat, centerLong, 315, 10);
    }

    public static Coordinate MaxLatLongOnBearing(double centerLat, double centerLong, double bearing, double distance)
    {

        var lonRads = ToRadian(centerLong);
        var latRads = ToRadian(centerLat);
        var bearingRads = ToRadian(bearing);
        var maxLatRads = Math.Asin(Math.Sin(latRads) * Math.Cos(distance / 6371) + Math.Cos(latRads) * Math.Sin(distance / 6371) * Math.Cos(bearingRads));
        var maxLonRads = lonRads + Math.Atan2((Math.Sin(bearingRads) * Math.Sin(distance / 6371) * Math.Cos(latRads)), (Math.Cos(distance / 6371) - Math.Sin(latRads) * Math.Sin(maxLatRads)));

        var maxLat = RadiansToDegrees(maxLatRads);
        var maxLong = RadiansToDegrees(maxLonRads);

        return new Coordinate(){Latitude=maxLat, Longitude=maxLong};
    }

संपादित करें

अगर मैं केंद्र बिंदु से अपने वर्ग x मील के कोनों को सेट करता हूं, तो मुझे एहसास होता है कि मेरे वर्ग के किनारे समान x मील नहीं होंगे। (गणित ने कहा कि मेरा मजबूत बिंदु नहीं था) इसलिए अगर मैं अपने वर्ग किनारों को x मील तक चाहता हूं तो केंद्र बिंदु से कोने की दूरी प्राप्त करने के लिए मैंने विकर्ण की दूरी को काम करने के लिए पाइथागोरस के प्रमेय का उपयोग किया। (एक समकोण त्रिभुज पर, कर्ण (विकर्ण) पर वर्ग वह अन्य दो भुजाओं के वर्ग के बराबर है)


यह एक वर्ग नहीं होगा।
इयान Turton

मैंने अपने बीयरिंगों में संशोधन किया है, यह एक हीरा था .. यह अब वर्ग है
Bex

संपादन के संबंध में, पाइथागोरस प्रमेय छोटे वर्गों के लिए ठीक है, लेकिन सामान्य तौर पर यह गोलाकार दाएं त्रिकोण के लिए नहीं होता है। यह अजीब है, फिर, कि आपका कोड गोलाकार त्रिकोणमिति का उपयोग करता है, जो प्लेन ज्यामिति के आधार पर इस सन्निकटन के साथ होता है।
whuber

मेरी दूरी कभी भी 100 मील से अधिक नहीं होगी इसलिए मुझे नहीं लगता कि यह मायने रखता है। जैसे कि अशुद्धि उस छोटी दूरी के साथ छोटी होगी।
बेक्स

1
मुझे लगता है कि बिंदु @whuber बना रहा है कि लैट और लॉन्ग के साथ दूरी की एक जटिल गणना का उपयोग करने का कोई लाभ नहीं है, यह देखते हुए कि आप पाइथागोरस प्रमेय के साथ उन लोगों को जोड़ते हैं। आप इसके बजाय एक बहुत सरल गणना का उपयोग कर सकते हैं, जैसे कि व्हीबर ने किया, या जैसा कि इवान टॉड करता है। देशांतर को मीलों और अक्षांश को मीलों, या इसके विपरीत में बदलने के लिए सरल रैखिक सूत्रों का उपयोग करें। एकमात्र "मुश्किल" भाग यह जान रहा है कि * cos(lat)डिग्री को मील में / cos(lat)परिवर्तित करते समय , और मील को डिग्री में परिवर्तित करते समय देशांतर सूत्र को समायोजन की आवश्यकता होती है ।
टूलमेकरसेव

0

यदि आप एक स्थानिक रूप से जागरूक डेटाबेस का उपयोग कर रहे हैं, तो आप अपने ब्याज के क्षेत्र को उसी समन्वय प्रणाली में परिवर्तित कर सकते हैं, जिसमें आपका डेटा संग्रहीत है और फिर सेब की तुलना सेब से करें।

उदाहरण के लिए:

  1. उपयोगकर्ता एक स्थान चुनता है, जिसके परिणामस्वरूप lat / lon होता है।
  2. इस बिंदु को क्षेत्र (पैरों या मीटर, आदि की इकाइयों) के लिए उपयुक्त एक अनुमानित समन्वय प्रणाली में बदलने के लिए स्थानिक डेटाबेस से पूछें।
  3. अनुमानित बिंदु के आसपास अपने हित के क्षेत्र का निर्माण करें।
  4. ब्याज के इस क्षेत्र को लाट / लोन में बदलने के लिए स्थानिक डेटाबेस से पूछें।
  5. आपको जो भी तुलना करने की आवश्यकता है वह करें।

0

मैंने इस पृष्ठ में क्या उपयोग किया है

गंतव्य बिंदु दी गई दूरी और प्रारंभ बिंदु से असर

सूत्र:
lat2 = asin (sin (lat1) * cos (d / R) + cos (lat1) * sin (d / R) * cos (θ))
lon2 = lon1 + atan2 (sin (θ) sin (d / d) R) * cos (lat1), cos (d / R) (sin (lat1) * sin (lat2)

from असर (रेडियन में, उत्तर से दक्षिणावर्त) है; d / R कोणीय दूरी (रेडियन में) है, जहाँ d दूरी की यात्रा है और R पृथ्वी की त्रिज्या है

For के लिए मैंने -45 डिग्री (रेडियन में) "ऊपरी-बाएँ बिंदु" के लिए और "नीचे-दाएं" के लिए 135 डिग्री का उपयोग किया

(मैंने हाल ही में गणित साइट में एक ही सवाल पूछा था )


इस समाधान के साथ समस्या यह है कि आपको पहले वर्ग के विकर्णों के लिए दूरी का पता लगाना होगा। इसके बजाय केंद्र से भुजाओं के मध्य बिंदु तक जियोडेसिक्स के साथ चलना आसान है और फिर, 90 डिग्री को मोड़कर, वर्ग के पक्षों के साथ स्थानांतरित करना।
व्हिबर

यदि आप दूरी काफी छोटी है, तो क्या आप इसके लिए सरल त्रिकोणमिति का उपयोग नहीं कर सकते? (d = विरोध पक्ष / पाप (निकटवर्ती पक्ष)। मैं ऐसा इसलिए करता हूं क्योंकि मुझे सटीक होने के लिए उस दूरी की आवश्यकता नहीं है। अन्यथा, आप इस सूत्र को दो बार लागू कर सकते हैं ठीक उसी तरह से जो आप कहते हैं (पहले θ = 0 के साथ) फिर side के साथ = -90 उदाहरण के लिए ऊपरी बाईं ओर)
जुआन

यह सही है, जुआन। लेकिन एक यह सोचकर छोड़ दिया जाता है कि आप गोलाकार ज्यामिति के अधिक जटिल सूत्रों का उपयोग क्यों करते हैं जब आप एक अनुमान के साथ शुरू करते हैं जो लगता है कि यूक्लिडियन सूत्र पहले स्थान पर काम करेंगे। गोलाकार फॉर्मूलों का उपयोग करने में कुछ भी गलत नहीं है, लेकिन यह अनावश्यक और कम्प्यूटेशनल रूप से अक्षम है।
whuber

@whuber, दूसरे मामले के लिए यह अनुमानित नहीं है (प्रत्येक पक्ष के लिए दो बार सूत्र को लागू करना)। आप सही हैं कि यह हालांकि उन्हें मिश्रण करने के लिए कोई मतलब नहीं होगा। मैंने वास्तव में इसे लागू किया है, लेकिन मैं इसे बदल दूंगा (ओह, और इसका कारण यह है कि मैं गणित में उतना अच्छा नहीं हूं :))
जुआन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.