أكثر

مشكلة الرؤية القائمة على مقياس pyQGis

مشكلة الرؤية القائمة على مقياس pyQGis


أنا أقوم بتحميل بعض الطبقات من postgis باستخدام pyqgis في تطبيق qgis المستقل الخاص بي. لكل طبقة أقوم أيضًا بتحميل نمط باستخدام:

lyr.loadNamedStyle ("style.qml")

لقد قمت بإعداد نسختين من الأنماط في سطح مكتب qgis ، أحدهما مع والآخر بدون إعدادات رؤية نطاق النطاق للطبقة. تكمن المشكلة في أنه عندما أستخدم النمط مع رؤية المقياس (بغض النظر عما إذا قمت بتعيين نطاق كبير بالفعل من 1: 100000000 إلى 1: 1) لا تظهر ميزاتي ، وليس أبدًا. إذا لم أستخدم نمطًا على الإطلاق ، أو لم أستخدم نمطًا بدون إعدادات رؤية المقياس ، فستكون الطبقات مرئية بشكل طبيعي.

يجب أن أضيف ، الأنماط تعمل في سطح مكتب QGIS كما هو متوقع.

ما يزعجني قليلاً هو أنه عندما أقوم بطباعة خاصية المقياس الحالية للوحة رسم الخرائط في تطبيقي ، فإن القيمة لها قيمة كبيرة إلى حد الجنون ، على سبيل المثال 10e14 لتبدأ بها ، على الرغم من أن المقياس يجب أن يكون في مكان ما حوالي 4000000 (1: 4000000) . ما هو أكثر الأسلاك هو أن قيمة المقياس هذه (canvas.scale ()) تتغير بشكل كبير عندما أقوم بتحريك (وليس تكبير) الخريطة.

أي أفكار ماذا يحدث؟

نظرًا لأنني اعتقدت أن mapCanvas srid لم يتم إعداده بشكل صحيح وأن المقياس لن يتناسب أبدًا مع نطاق المقياس الخاص بي ، فقد حاولت تعيين خريطة قماشية بشكل صريح ، وفعلت ذلك على الطبقات ، ولم يحالفني الحظ. أنا أستخدم QGIS 2.8.1

تحديث: يبدو أنه علي أي حال أن أضبط CRS بشكل صريح

canvas.mapRenderer (). setDestinationCrs (QgsCoordinateReferenceSystem (32632))

لكنها لا تغير أي شيء. لقد اعتقدت فقط أن الطبقات ستفرض ضمنيًا CRS المحلي الخاص بي لكنهم لا يفعلون ذلك.


تمام. حلها. كان هناك شيئين كان عليّ القيام به ، للحصول على الأنماط تعمل.

  1. يجب عليك ضبط نظام الإحداثيات بشكل صريح. تحميل طبقات Postgis مع CRS مضبوط مسبقًا لم يفعل ذلك تلقائيًا (كما نستخدم من سطح مكتب QGis). يمكنك القيام بذلك عن طريق:

    map.setDestinationCrs (QgsCoordinateReferenceSystem (srid))

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

    map.setMapUnits (QGis.UnitTypes.Meters)


الإضافة إلى ما سبق (لا توجد نقاط كافية للتعليق)

map.setMapUnits (QGis.UnitTypes.Meters)

لا يعمل معي (الإصدار 2.14). يجب أن أشير إلى المقاييس بالفهرس الخاص بنوع الوحدة المذكور هنا في مستندات API. استخدام هذا يعمل بالنسبة لي (0 = متر).

map.setMapUnits (0)

باستخدام QGIS 3 ، استخرج من https://qgis.org/api/api_break.html

تمت إزالة setMapUnits (). تم إملاء وحدات الخريطة بواسطة وحدات CRS الوجهة.

أنت الآن بحاجة فقطmap.setDestinationCrs (QgsCoordinateReferenceSystem (srid))


شاهد الفيديو: QGIS Python PyQGIS - Dissolve