سؤال

لدي قاعدة بيانات لنقاط الخريطة، وأريد الحد من الشاشة لإظهارها على الأكثر ~ 50 نقطة في وقت واحد. عند تكبير المستخدم، قد يتم عرض المزيد من النقاط.

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

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

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

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

المحلول 3

نظرا لأنني لدي فقط بضعة آلاف نقطة، والكثير من الوقت غير المتصل، فقد أنشأت خوارزمية لإنشاء عامل تشتت من خلاله يمكنني فرز البيانات.

  1. أبدأ بنقطة عشوائية من مجموعتي، أعطها درجة n = 1، وأضفها إلى المحدد قائمة.
  2. ثم ابحث عن النقطة التي هي أبعد من أي نقطة في المحدد قائمة.
  3. آخذ هذه النقطة، أعطها درجة ن + 1، أضفها إلى المحدد قائمة، ثم كرر الخطوة الثانية حتى يتم اختيار جميع النقاط.

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

نصائح أخرى

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

أما بالنسبة لصنعها بشكل أسرع، فربما يمكنك تعيين عتبة لكل شبكة. إذا كان العد يضرب كمية معينة، انتقل إلى الشبكة التالية. بهذه الطريقة يمكنك أن يكون لديك نقطة "أقصى" وتسريع الأشياء عن طريق تجاهل النقاط أعلاه من ذلك العتبة المصطنعة (والتي يمكنك تحديدها بناء على تحليل تجريبي لبياناتك).

قدم مايكل تود بعض الاقتراحات الجيدة. +1 لذلك.

أرغب في إضافة ذلك (اعتمادا على نوع البيانات) يمكنك إضافة خاصية إضافية إلى نقاط الخريطة الخاصة بك.

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

يعمل هذا النهج بشكل جيد لأي ZoomLevel، في حين أن مجموعات البيانات المحددة مسبقا لكل ZoomLevel تعمل فقط في خطوات منفصلة.

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