كيفية العثور على العلاقة بين التغيير في خطوط العرض في مركز الخريطة وأعلى / أسفل

StackOverflow https://stackoverflow.com/questions/2422770

سؤال

أناm having little trouble finding a relation between the movement at centre and edge of a circle, IM القيام به لسلطة خريطة العالم، مدى بياناتي 180،89: -180، -89، مقالي خرائطي عن طريق إضافة التغيير (DX، DY) إلى النطاقات وليس مركزها. الآن قد أدرجت وضعا حيث يتعين علي نقل الخريطة إلى مركز معين، لحساب التغيير في Lightudes سهل وبسيط للغاية، لكن التغيير في الكريات التي تسببت في مشكلة. يبدو أن التغيير في Centrey of Map هو أكثر من التغيير على حافة MAPY، أو ببساطة إذا اضطررت إلى تحريك مركز الخريطة من 0LONG، 0LAT إلى 73LONG، 33LAT، ل DX، فقط احصل على 73، ولكن بالنسبة إلى DE يبدو 33 ولكن إذا أضفت 33 إلى أعلى خريطة 89، فستكون 122 غير صحيحة لأن خطوط العرض هناك ما بين 90 و -90. يبدو أن هناك حالة إسقاط دائرة على متن طائرة ثنائية الأبعاد حيث تتحرك حافة الدائرة لأنها تتحرك إلى الوراء بسبب الزاوية تعرض تغيرا أقل من التغيير والمركز تعريض المزيد من التغيير، هل هناك علاقة بين هذين العاملين؟ حاولت تحويل الفرق بين المنشأ والمدى إلى الرضيات ثم أضف إلى الأعلى وأسفل الخريطة، لكنها لم تنجح حقا بالنسبة لي. يرجى ملاحظة أن الخريطة هي مشروع على قماش افتراضي يبدأ عرضه من 256 ويزيد من 256 * 2 ^ z، Z = 0 هو الافتراضي والعالم كله مرئي في هذا المدى من القماش

public void moveMapTo(double destinationLongitude,double destinationLattitude) // moves map to the new centre
        {
            double dXLong=destinationLongitude-centreLongitude; // centreLongitude and centreLattitude are centre of current map position
            double atanhsinO = atanh(Math.sin(destinationLattitude * Math.PI / 180.00));
            double atanhsinD = atanh(Math.sin(centreLatitude * Math.PI / 180.00));
            double atanhCentre = (atanhsinD + atanhsinO) / 2;
            double latitudeSpan =destinationLattitude - centreLatitude;
            double radianOfCentreLatitude = Math.atan(Math.sinh(atanhCentre));
            double dXLat=latitudeSpan / Math.cos(radianOfCentreLatitude);
            dXLat*=getLattitudeSpan()*(Math.PI/180); //<--- HERE IS THE PORBLEM

            System.out.println("dxLong:"+dXLong+"_dxLat:"+dXLat);
    //map left.right.top,bottom are current extents of map
            mapLeft+=dXLong;
            mapRight+=dXLong;
                         mapTop+=dXLat;
            mapBottom+=dXLat;




    }
    private double getLattitudeSpan()
    {

            double latitudeSpan = mapTop - mapBottom;
            latitudeSpan = latitudeSpan / Math.cos(radianOfCentreLatitude);
            return Math.abs(latitudeSpan);

    } 
هل كانت مفيدة؟

المحلول

حل مشكلة مماثلة لفترة طويلة وقد تكون قادرة على إعطائك بعض التلميحات.

بالغسل في جميع الاتجاهات الأربعة عن طريق إضافة خطوط خطوط محجول أو خطوط العرض يعمل فقط للحصول على إسقاط مركسي؛ هل هذا ما لديك؟ إذا كان الأمر كذلك، جيدة.

لعموم الشمال والجنوب، أعتقد أن الشيء الوحيد الذي يمكنك القيام به هو عرض خلفية بيضاء (فارغة) شمال القطب إذا كنت قد احبقت الشمال؛ أي أنت تظهر أقل خريطة.

إلى Pan East و West، عليك أن تحل محل الجزء من العالم الذي خرج من الحافة الملفية من الجانب الآخر.

لقد وجدت أن الكود الخاص بي يصبح بسيطا جدا إذا قمت بإنشاء خريطة مثل هذا:

ws ws ws ws ws ws ws ws
eu po PO NA EU PO po na
af po PO SA AF PO po sa
ws ws ws ws ws ws ws ws

الجزء المركزي، في الحروف الكبيرة، هو خريطة العالم الأصلية الخاصة بك: NA، SA، الاتحاد الأوروبي وتقف على أمريكا الشمالية وأمريكا الجنوبية وأوروبا وأفريقيا، على التوالي (خريطة مبسطة جسيمة هنا). بو هي المحيط الهادئ. حول تلك الخريطة الأصلية، قمت بخيط نسخة أخرى من الخريطة أفقيا وأبيض (WS) رأسيا.

في البداية، تركزت وجهة نظرك في 0/0، أي بين NA / SA و EU / AF، وأقصىت أن تظهر لك 90 درجة شمال وجنوب والشرق والغرب من هناك، بما مجموعه 180 درجة في كلا الاتجاهين. من هناك، يمكنك عميل ما يصل إلى 180 درجة شرقا أو غربا وما زلت ترى نفس الكمية من العالم. يمكنك، على سبيل المثال عموم 180 درجة شرقا إلى خط التاريخ الدولي (في المحيط الهادئ) ونرى أوروبا وأفريقيا إلى اليسار وأمريكا الشمالية / الجنوبية على اليمين.

يمكنك أيضا عموم صعودا وهبوطا بنسبة 90 درجة. نظرا لأن التفاف حولها لن يكون منطقيا هنا، فسيكون جزءا من وجهة نظرك مساحة بيضاء.

الجانب السلبي لهذا هو أن صورة الخريطة ستكون حوالي ضعف حجم الملف المضغوط وأربع مرات كبيرة الحجم في حجم البكسل. يمكنك تحقيق نفس التأثير من خلال خياطة في التعليمات البرمجية، ولكن استخدام خريطة العالم الفائقة الحجم هي أسهل قليلا.

نصائح أخرى

هذا سوف يعتمد بشكل كبير على خريطة الإسقاط من صورة الأرض الأصلية الخاصة بك. دون معرفة الإسقاط المعين الذي تستخدمه، من المستحيل إنتاج ومعادلة خرائط مسافات XY بكسل على صورتك إلى أرقام Lat-Long (والعكس العكس).

إذا كنت تستخدم متساوية المساحة الإسقاط، مثل مريرة بيترز, ، بعد ذلك سوف تنقذ نفسك قدرا كبيرا من الوقت والكثير لأنه لا توجد معادلات للتطبيق: ستتعلق مسافات بكسل خطيا للأرقام الطويلة.

حظا طيبا وفقك الله!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top