متوسط ​​مجموعة من النقاط على خريطة جوجل إلى مجموعة أصغر

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

سؤال

أعرض خريطة Google صغيرة على صفحة ويب باستخدام Google Maps Static API.

لدي مجموعة مكونة من 15 إحداثيًا، والتي أود تمثيلها كنقاط على الخريطة.

نظرًا لكون الخريطة صغيرة إلى حد ما (184 × 90 بكسل) والحد الأقصى الذي يبلغ 2000 حرف على عنوان URL لخرائط Google، لا يمكنني تمثيل كل نقطة على الخريطة.

لذا، بدلًا من ذلك، أود إنشاء قائمة صغيرة من الإحداثيات التي تمثل متوسط ​​القائمة الكبيرة.

لذلك بدلاً من الحصول على 15 مجموعة، سينتهي بي الأمر بـ 5 مجموعات، ومواضعها تقارب مواضع الـ 15.لنفترض أن هناك 3 نقاط قريبة من بعضها البعض أكثر من أي نقطة أخرى على الخريطة، سيتم طي هذه النقاط إلى نقطة واحدة.

لذا أعتقد أنني أبحث عن خوارزمية يمكنها القيام بذلك.

لا أطلب من أي شخص أن يوضح كل خطوة، ولكن ربما يوجهني في اتجاه مبدأ رياضي أو وظيفة ذات غرض عام لهذا النوع من الأشياء؟

أنا متأكد من أنه يتم استخدام وظيفة مماثلة، على سبيل المثال، في برامج الرسومات، عند تقسيم الصورة إلى وحدات بكسل.

(إذا قمت بحل هذه المشكلة، فسأتأكد من نشر نتائجي.)

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

المحلول

أوصي K-يعني التجميع عندما تحتاج إلى تجميع كائنات N في عدد معروف K < N من المجموعات، وهو ما يبدو أنه حالتك.لاحظ أن مجموعة واحدة قد تنتهي بنقطة خارجية واحدة وأخرى بخمس نقاط قريبة جدًا من بعضها البعض:لا بأس، ستبدو أقرب إلى مجموعتك الأصلية مما لو قمت بإدخال 3 نقاط بالضبط في كل مجموعة!-)

نصائح أخرى

إذا كنت كذلك يبحث لمثل هذه الوظائف/الفئات، قم بإلقاء نظرة على MarkerClusterer و MarkerManager فئات المنفعة.يتطابق MarkerClusterer بشكل وثيق مع الوظيفة الموضحة، كما هو موضح في هذا العرض.

بشكل عام أعتقد أن المجال الذي تحتاج إلى البحث فيه هو "تقدير المتجهات".لدي كتاب قديم يحمل عنوان Vector Quantization and Signal Compression من تأليف Allen Gersho وRobert M.Gray الذي يقدم مجموعة من الأمثلة.

من الذاكرة، كان تكرار Lloyd خوارزمية جيدة لهذا النوع من الأشياء.يمكنه أخذ مجموعة الإدخال وتقليلها إلى مجموعة نقاط ذات حجم ثابت.بشكل أساسي، قم بتوزيع نقاطك بشكل موحد أو عشوائي حول المساحة.قم بتعيين كل من مدخلاتك إلى أقرب نقطة كمية.ثم احسب الخطأ (على سبيل المثال.مجموع المسافات أو جذر متوسط ​​التربيع).ثم، لكل نقطة إخراج، قم بتعيينها في مركز المجموعة التي تعينها.سيؤدي هذا إلى تحريك النقطة وربما تغيير المجموعة التي تعينها.قم بإجراء ذلك بشكل متكرر حتى يتم اكتشاف عدم وجود تغييرات من تكرار إلى آخر.

أتمنى أن يساعدك هذا.

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