كيف أرسم النقاط في خط polyline ESRI ، بالنظر إلى المربع المحيط بأنه LAT/Long و "النقاط" كراديان؟

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

سؤال

أنا أستخدم OpenMap وأنا أقرأ شكلًا باستخدام com.bbn.openmap.layer.shape.shapefile. تتم قراءة المربع المحيط في نقاط LAT/طويلة ، على سبيل المثال 39.583642 ، -104.895486. المربع المحيط هو نقطة أقل اليسار ونقطة يمين العلوي التي تمثل المكان الذي توجد فيه النقاط. The "points," which are named "radians" in OpenMap, are in a different format, which looks like this: [0.69086486, -1.8307719, 0.6908546, -1.8307716, 0.6908518, -1.8307717, 0.69085056, -1.8307722, 0.69084936, -1.8307728 ، 0.6908477 ، -1.8307738 ، 0.69084626 ، -1.8307749 ، 0.69084185 ، -1.8307792].

كيف يمكنني تحويل نقاط مثل "0.69086486 ، -1.8307719" إلى إحداثيات X ، Y التي يمكن استخدامها في الرسومات العادية؟

أعتقد أن كل ما هو مطلوب هنا هو نوع من التحويل ، لأن إدخال النقاط في Excel وترسمها يخلق خطًا يتطابق منحنى منحنى الطريق في الموقع المحدد (LAT/Long). ومع ذلك ، يجب تعديل المحاور يدويًا وليس لدي أي إشارة إلى كيفية ضبط الفؤوس ، حيث يبدو أن المربع المحيط المحدد في تنسيق مختلف عن النقاط المحددة.

لا يبدو أن الوصف الفني لـ ESRI ShapeFile يذكر هذا (http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf).

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

المحلول

0.69086486, -1.8307719 هو خط العرض وخط الطول في الراديان.

أولاً ، قم بتحويلها إلى درجات (اضرب (180/PI)) ، ثم سيكون لديك وحدات مشتركة بين المربع المحيط والإحداثيات الخاصة بك.

ثم يمكنك رسم كل ذلك في إطار محلي مع ما يلي:

x = (longitude-longitude0)*(6378137*pi/180)*cos(latitude0*pi/180)
y = (latitude-latitude0)*(6378137*pi/180)

(Latitude0 ، loncitude0) هي إحداثيات نقطة مرجعية (على سبيل المثال الزاوية السفلية اليسرى من المربع المحيط) درجات للزوايا و متر للمسافات

تحرير-شرح: هذا إسقاط إملائي للأرض يعتبر كرة نصف قطرها هو 6378137.0 م (محور شبه ماجور من الإهليلجيات WGS84) ، تتمحور على النقطة (LAT0 ، LON0)

نصائح أخرى

في OpenMap ، هناك عدد من الطرق للتحويل من الراديان إلى درجات عشرية:

Length.DECIMAL_DEGREE.fromRadians(radVal);
Math.toDegrees(radVal)  // Standard java library

للحصول على صفيف ، يمكنك استخدام projmath.arraygtorad (double [] radvals) ؛

كن حذرًا مع ذلك الأخير ، فهو يقوم بالتحويل في مكانه. لذا ، إذا أمسك بصفيف Lat/Lon من Ompoly ، فقم بنسخه أولاً قبل تحويله. خلاف ذلك ، سوف تعبث الإحداثيات الداخلية لـ Ompoly ، والتي تتوقع أن تكون في Radians.

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