سؤال

لقد وجدت بيانات الشكل من أجل حدود جميع البلدان وفئة لمعالجة ذلك، وقد كتبت نصا لتحويل خط الطول والطول إلى موقع بكسل على صورة ورسم البلدان باستخدام imagefilledpolygon و imageline. وبعد كل شيء يعمل بشكل رائع باستثناء:

1) لدي متغير مقياس $ الذي يمكنني تغييره. على نطاق $ = 1 الصورة هي 360x180 بكسل (1 بكسل = 1 درجة خطوط الطول). من الناحية المثالية الصورة الأخيرة التي أريدها ستكون حوالي مقياس $ = 2 (720x360) ومع ذلك فإن الخطوط الحدودية في 1 بكسل تبدو سميكة سميكة للغاية. لذلك اعتقدت أن أفضل حل سيكون لتوليد الخريطة على نطاق $ = 10 ثم تغيير حجم الصورة التي تم إنشاؤها. المشكلة هي imagecopyresized لا antialias عندما يتم تغيير حجمها ويتركني مع صورة خشنة حقا، كيف يمكنني تغيير حجمها والانتياس؟

2) عدد النقاط لتوليد مضلع البلد هو الكثير. تتمثل الخطة في استخدام نفس الكود لإنتاج ImageMap HTML لجعل البلدان في روابط. ومع ذلك، أخشى في الوقت الحالي، هناك الكثير من النقاط لمخترق (قد يكون حجم الملف كبيرا جدا). كان نهجي الأولي هو تخطي كمية X من النقاط، مما يؤدي إلى بعض النجاح، إذا قمت بمعالجة 1 في 10 نقاط، أحصل على نتيجة مقبولة في الغالب. من الناحية المثالية، سأكون أقل ... عندما حاولت 1 في 40، وجدت بعض الحدود القطرية متداخلة وكانت هناك بعض الثغرات بين البلدان (ولكن بعض السواحل الباصية تبدو أفضل). ما هي طريقة معقولة للحد من عدد النقاط مع الحفاظ على مستوى معقول من الدقة؟

إذا كان أي شخص مهتم، فسوف نشر الرمز (بمجرد الانتهاء.)

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

المحلول

للحصول على تبسيط / تقريب المنحنيات إلقاء نظرة على http://en.wikipedia.org/wiki/ramer-douglas-peucker_algorithm.

نصائح أخرى

لذلك ليس لدي أي رمز لهذا، هو أكثر من مجرد فكرة لمشكلتك الثانية. هل تستطيع فصولك التي تولد الخريطة بتنسيق X / Y وتحديد البلد الذي أنت فيه؟

إذا استطعت، فيمكنك تجنب استخدام خريطة الصورة واستخدم JavaScript فقط لتحديد ما هو تنسيق X / Y نقرة. حل هذا في موقع وتعمل عليه كما تفعل عادة. الجانب السلبي لهذا بالطبع هو أنه إذا تم إيقاف تشغيل JavaScript، فلن يعمل ذلك.

يبدو أنيق على الرغم من.

حل أول واحد:

ImageiCopyresampleed هي الوظيفة التي احتاجها غير مبتهية

للجزء الثاني من مشكلتك، ما عليك القيام به لا يستخدم كل نقطة 10، ولكن فقط استخدم تلك التي تضيف شيئا إلى الخريطة. يمكنك محاولة استخدام نقطة إذا كانت أكثر من مسافة الحد من النقطة الأخيرة المقدمة. من شأنه أن يعني في مناطق كثافة تستخدم نقاط أقل، ولكن عندما تكون متباعدة، يمكنك استخدام أكبر عدد ممكن.

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