أكثر

WMS مع التحكم في الوصول (ACL) لمستخدمين مختلفين؟ أو حل لآلاف النقاط على خريطة الويب؟

WMS مع التحكم في الوصول (ACL) لمستخدمين مختلفين؟ أو حل لآلاف النقاط على خريطة الويب؟


لدي مجموعة من المواقع بالآلاف. لا يرى جميع المستخدمين نفس المواقع على الخريطة - وبالتالي ACL. يتم تخزين البيانات في قاعدة بيانات غير GIS (mssql ، ora ، إلخ) ويتم استردادها الآن باستخدام استعلام SQL قياسي وإعادتها إلى العميل (OpenLayers) باستخدام JSP.

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

ما أود بدلاً من ذلك هو إنشاء صور / مربعات لجميع بياناتي ، على غرار الطريقة التي تعرض بها خرائط Google الكثير من النقاط الحمراء الصغيرة لجميع النتائج - http://bit.ly/d73qrw [بحث خرائط Google عن "قهوة"] وعرضها على العميل. وعند النقر فوق ، قم بإجراء مكالمة ajax سريعة لخدمة WMS للحصول على معلومات. هذه هي الفكرة على الأقل.

ولكن ها هي المشكلة - لا يمكنني فقط إعداد خدمة WMS قياسية أمام بياناتي لأنه لا يرى جميع المستخدمين نفس البيانات. هل هناك طريقة لإنشاء هذه المربعات أثناء التنقل أو جعل WMS ACL مدركًا؟

تحرير - 9/22/2010 - لذلك اكتشفت كيف يولد Google البلاط ، أو بالأحرى التكنولوجيا التي تقف وراءه. إنهم يستخدمون Google Fusion Tables. قم بتخزين N من الصفوف في الجداول الخاصة بهم ، ثم إذا كانت البيانات على دراية بخطوط العرض / الطول ، فيمكن لمنتج Fusion Table إنشاء المربعات بسرعة (!). هذا هو الشيء الذي أبحث عنه - خريطة عالية الأداء تحتوي على الكثير من البيانات. لكن بالطبع أحتاج إلى التحكم في الرباط الصليبي الأمامي (ACL). هل يعقل كتابة تنفيذ خفيف الوزن مخصص لمواصفات WMS أو تعديل منتج موجود؟ على الرغم من أن geoserver يبدو كثيرًا لتعديله "فقط" لدعم ACL.

تحرير - 9/27/2010 - بعض المعلومات الإضافية منذ إضافة المكافأة. بياناتي موجودة في Oracle. لم يتم تمكين Ora spatial. الآن يتم استخراج البيانات على مستوى الأعمال وتحويلها إلى بيانات ، وإرسالها إلى العميل حيث يضع العميل "النقاط" على الخريطة. يتم إجراء ACL على مستوى منطق الأعمال ، وليس على DB أو ActivDir أو أي شيء من هذا القبيل. المصادقة بسيطة ، لكن التفويض ليس كذلك ولذا كان لا بد من تسجيله في الكود. هل ترغب في معرفة أفضل طريقة لإنشاء خدمة WMS لخدمة ما يصل إلى 1000 من "النقاط" على الخريطة حيث سيرى كل مستخدم مجموعة فرعية مختلفة من النقاط. هل الجواب CQL_FILTER؟ ولكن كيف يتم تعيين المعلمات بعد ذلك؟ إحدى الأفكار التي لدي الآن هي القيام بعملية من خطوتين. قم أولاً بتشغيل استعلام داخلي للحصول على قائمة بالمعرفات التي سمح للمستخدم برؤيتها ، ثم أنشئ سلسلة طلب WMS باستخدام تلك المعرفات في معلمة CQL_FILTER. هل هناك أي شيء يبسط هذه العملية؟ وإذا ذهبت مع هذا ، كيف يمكنني إضافة هذه الطبقة كطبقة "WMS" إلى عميل Open Layers نظرًا لأن نقطة النهاية بالنسبة إلى OL هي الكود الخاص بي للحصول على معرفات من DB وليس خدمة WMS الفعلية على سبيل المثال GeoServer؟


بعض المشاريع الخاصة بخدمات الويب GIS ACL

  • http://52north.org/maven/project-sites/52n-security-site/
  • http://www.geoxacml.org/
  • https://secureows.org/
  • http://www.easysdi.org/
  • http://istgeo.ist.supsi.ch/site/projects/geoshield
  • http://wald.intevation.org/scm/؟group_id=39 (Gispatcher)
  • http://www.mapbender.org/OWS_Proxy (لـ Mapbender)
  • http://wiki.deegree.org/deegreeWiki/iGeoSecurity (للدرجة العلمية)

في foss4g 2010 ، راجع 9 سبتمبر ، 11:00 في البرنامج النهائي http://2010.foss4g.org/program_print.php (العروض التقديمية غير متوفرة في الوقت الحالي)


أعتقد أن الحل الشائع هو إنشاء برنامج نصي وكيل أو مجمّع يقع بين العميل و WMS. يتم استخدام الوكيل لإنشاء مكالمة WMS مخصصة بناءً على معلمات من العميل.

لم تذكر ما إذا كان غرضك من هذا الإعداد هو الأمان أم مجرد التخصيص ، أو ما هي المعلومات التي سيحتاجها العميل لتحديد "العرض" المخصص للبيانات التي يجب أن ينتجها WMS.

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


لدي إجابة عملت معنا بعد بعض التجارب والخطأ.

يقوم Oracle Spatial + Oracle VPD بالمهمة. نحن نستخدم بالفعل Ora و VPD ، لذلك كانت هذه هي الخطوة المنطقية التالية. لدى Ora spatial خدمة WMS ويمكن تخصيصها لتكون مختلفة للمستخدمين المختلفين بناءً على حقوقهم / ACL عبر VPD. إذا كان الآخرون يبحثون عن شيء مثل هذا ، فأنا أدرك أنه ليس كل عملية لديها أو يمكنها تحمل تكلفة Oracle ، ولكن إذا كانت لديك - فهي موجودة هناك. لا أعرف ما إذا كان MS SQL Server لديه وظائف مماثلة.


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

دانيال


ما هو الموعد النهائي الخاص بك؟ في Geomajas ، لدينا بالفعل قيود الأمان / الوصول إلى البيانات. نحن نعمل على التخزين المؤقت / التنقيط في هذه اللحظة مما سينتج عنه نوع النظام الذي تبحث عنه. يجب أن يتم الانتهاء منه في غضون أسبوعين.


هل ستكون خدمة ميزات الويب (WFS) أكثر كفاءة؟

http://openlayers.org/dev/examples/getfeatureinfo-popup.html

مجرد فكرة.


من المحتمل أن يكون هذا الحل مجنونًا ، لكن ها نحن ذا.

لماذا لا يكون خادم WMS لكل مستخدم؟ لنفترض أننا نستخدم MapServer. يتم تخزين تهيئة MapServer في ملف .map (ويعرف أيضًا باسم mapfile) ، ولكن لا شيء يمنع استخدام العديد من ملفات الخرائط. عند إجراء طلب WMS ، فإن إحدى المعلمات الخاصة بالبائع التي يقبلها MapServer هي "map" ، وهي عبارة عن سلسلة تحتوي على مسار واسم ملف الخريطة المستخدم [1]. إذا تم إرسال ملف خرائط مختلف في طلبات WMS بناءً على معرف المستخدم الذي قام بتسجيل الدخول مسبقًا ، فستحصل على خوادم WMS كمستخدمين ، وبتثبيت واحد فقط من MapServer.

على الجانب الأمني ​​، يجب عليك التحقق من ملف الخريطة المستخدم مقابل معرف جلسة العمل ، وهي المهمة التي من المحتمل أن يتم تنفيذها بواسطة وكيل بين العملاء و MapServer. يمكن للمستخدم الذي يرغب في رؤية خرائط مستخدم آخر أن يغير عنوان URL يدويًا ويغير معلمة "الخريطة" ، وسيؤدي إجراء التحقق المضاد هذا إلى عدم نجاح مثل هذه المحاولات.

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

[1] في حالة استخدام MapServer ، فإن معلمة "map" إلزامية بالفعل.


هناك عدة أجزاء متحركة هنا.

أولاً ، هناك تصفية للنقاط: يجب أن يتم ذلك من جانب الخادم ، مباشرة بعد أو أثناء استعلام SQL.

ثم يجب إعادة النقاط المصفاة إلى العميل.

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

ومع ذلك ، إذا كان لديك عدد كبير جدًا من النقاط لعرضها بكفاءة في OpenLayers ، فستصل إلى التحسين (التحسينات) التي يبدو أن Google تقوم بها للنقاط الحمراء الصغيرة:

  • تحتاج إلى توصيل عارض التجانب بالمجموعة الكاملة من النتائج التي تمت تصفيتها ، مما ينتج عنه مربعات شفافة تمامًا باستثناء نقطة صغيرة لكل نتيجة. (قرار التصميم: قم بإنتاجها بفارغ الصبر ، أو عند الطلب فقط؟)

    • سوف يتطلب GeoServer ، وما إلى ذلك ، رمز "المشغل" حيث سيحتاجون إلى طبقة جديدة لكل استعلام لكل مستخدم ؛ عند إضافة المستخدمين ، ستحتاج إلى إضافة أشياء جديدة لعرضها في GeoServer. (ستحتاج أيضًا إلى إنتاج سجلات النتائج بتنسيق يمكن استهلاكه بواسطة تنفيذ العرض). وكم مرة يتم إعادة تصيير البلاط القديم؟

    • أود أن أوصي قليلاً من كود الخادم الذي يقوم بالوصول الوكيل إلى عارض التجانب - وبهذه الطريقة لن يتمكن أي شخص من رؤية النتائج التي ليست له من خلال تخمين عنوان URL.

  • بعد ذلك ، يجب تقسيم النتائج التي يتم إرجاعها إلى المتصفح: الأول ن هي النتائج الكاملة التي يتم وضع علامات عليها ، بينما يتم إرسال الباقي على هيئة إحداثيات + عنوان URL لمعاودة الاتصال. (حتى لو لم يكن مسؤولاً عن عرضها ، يحتاج المتصفح إلى معرفة مكانها لتغيير المؤشر وتقديم تلميح أداة واتخاذ إجراء ذي مغزى بمجرد نقرة!)

  • ثم هناك كود JS في المتصفح لإدارة التفاعلات مع النقاط.

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


إذا كان لديك استعلام يمكن تنفيذه لإخبارك بالمعرفات التي يمكن للمستخدم رؤيتها (كما قلت في التعديل الأخير) ، فمن المحتمل أن يكون الحل "الأفضل" هو ترميز هذا الفلتر كعامل تصفية CQL أو OGC كجزء من طلب WMS. قد تجد أن إعادة تنظيم البيانات في طريقة عرض ضرورية لجعل ذلك ممكنًا.

قبل أن تبدأ في استخدام Tile Caches ، كنت أقوم ببناء الإصدار البسيط ومعرفة ما إذا كان سريعًا بدرجة كافية ، ثم أصبح معقدًا إذا كنت بحاجة إلى مزيد من السرعة وفقط.


شاهد الفيديو: كيفية إنشاء خرائط خطوط الهجرة والتجارة Creating Flow Lines بستخدام Arc Map