أكثر

كيفية إنشاء ملف svg محدد ببيانات من ميزة

كيفية إنشاء ملف svg محدد ببيانات من ميزة


أنا أعمل في c ++ / QT4.8.5 ، مع qgis api c ++ 2.8.2

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

هل لديك أي فكرة عن كيف يمكنني المضي قدمًا في إنشاء ملف وتطبيقه على الرمز الخاص بي؟


إليك حل لمن يريد إنشاء ملف svg محدد اعتمادًا على بيانات الميزة Language c ++ / QT4.8.5 و qgis api c ++ 2.8.2

يحتوي ملف svg على كود xml في هذا المثال ، وضعنا لونًا معينًا وقمنا بتغيير الاستخدام بناءً على معلمة "vitesse" الخاصة بالميزة. يرسم نموذج الكود هذا 3 أسهم مختلفة: صغيرة متوسطة وكبيرة في مصفوفة 30 × 30 بكسل

هنا الوظيفة:

void createTrackIco (QgsFeature pFeature، int pTrackId، bool pUpdateIco) {QString lColorIco؛ QString lUseIco ؛ lvitesse مزدوج if (pUpdateIco) {// احصل على بيانات الميزة lColorIco = pFeature.attribute ("COLOR"). toString ()؛ lVitesse = pFeature.attribute ("VITESSE"). toDouble ()؛ إذا (lVitesse <10) lUseIco = "lent" ؛ وإلا إذا (lVitesse <20) lUseIco = "moyen" ؛ else lUseIco = "Rapide" ؛ qDebug () << "تحديث Icone Type =" << lUseIco << "couleur =" << lColorIco << "vitesse =" << lVitesse؛ } else {// create type icone par defaut lColorIco = "black"؛ lUseIco = "lent" ؛ } QString fileXmlName = "… /data/Icones/iconeS52/track_"+QString::number(pTrackId)+".svg"؛ QFile fileXml (fileXmlName) ، // cretae الملف. if (! fileXml.open (QFile :: WriteOnly | QFile :: Text)) qDebug () << "error"؛ كاتب QXmlStreamWriter (& fileXml) ؛ Writer.setAutoFormatting (صحيح) ، Writer.setCodec ("iso-8859-1") ؛ // أدخل معيار ترميز xml: author.writeStartDocument () ؛ // جذر ملف XML manager.writeStartElement ("svg") ؛ الكاتب.writeAttribute ("العرض"، "30") ؛ WrriteAttribute ("الارتفاع"، "30") ؛ الكاتب.writeAttribute ("xmlns"، "http://www.w3.org/2000/svg") ؛ // إضافة عنصر WrriteStartElement ("defs") ؛ // small manager.writeStartElement ("g") ؛ الكاتب.writeAttribute ("id"، "lent")؛ WrriteStartElement ("سطر") ؛ الكاتب.writeAttribute ("x1"، "0")؛ الكاتب.writeAttribute ("y1"، "0")؛ الكاتب.writeAttribute ("x2"، "15")؛ الكاتب.writeAttribute ("y2"، "15")؛ الكاتب.writeAttribute ("النمط" ، "السكتة الدماغية:" + lColorIco + "؛ عرض السكتة الدماغية: 2") ؛ // نهاية سطر الكاتب. كاتب.رايتستارت إيليمنت ("خط") ؛ الكاتب.writeAttribute ("x1"، "0")؛ الكاتب.writeAttribute ("y1"، "30")؛ الكاتب.writeAttribute ("x2"، "15")؛ الكاتب.writeAttribute ("y2"، "15")؛ الكاتب.writeAttribute ("النمط" ، "السكتة الدماغية:" + lColorIco + "؛ عرض السكتة الدماغية: 2") ؛ // نهاية سطر الكاتب. كاتب.رايتستارت إيليمنت ("خط") ؛ الكاتب.writeAttribute ("x1"، "15")؛ الكاتب.writeAttribute ("y1"، "15")؛ الكاتب.writeAttribute ("x2"، "21") ؛ الكاتب.writeAttribute ("y2"، "15")؛ الكاتب.writeAttribute ("النمط" ، "السكتة الدماغية:" + lColorIco + "؛ عرض السكتة الدماغية: 2") ؛ // نهاية سطر الكاتب. WrriteStartElement ("سطر") ؛ الكاتب.writeAttribute ("x1"، "15")؛ الكاتب.writeAttribute ("y1"، "10")؛ الكاتب.writeAttribute ("x2"، "20")؛ الكاتب.writeAttribute ("y2"، "15")؛ الكاتب.writeAttribute ("النمط" ، "السكتة الدماغية:" + lColorIco + "؛ عرض السكتة الدماغية: 2") ؛ // نهاية سطر الكاتب. كاتب.رايتستارت إيليمنت ("خط") ؛ الكاتب.writeAttribute ("x1"، "15")؛ الكاتب.writeAttribute ("y1"، "20")؛ الكاتب.writeAttribute ("x2"، "20")؛ الكاتب.writeAttribute ("y2"، "15")؛ الكاتب.writeAttribute ("النمط" ، "السكتة الدماغية:" + lColorIco + "؛ عرض السكتة الدماغية: 2") ؛ // نهاية سطر الكاتب. // end of g tag manager.writeEndElement () ؛ // متوسط ​​الكاتب.writeStartElement ("g") ؛ WrriteAttribute ("id"، "moyen")؛ WrriteStartElement ("سطر") ؛ الكاتب.writeAttribute ("x1"، "0")؛ الكاتب.writeAttribute ("y1"، "0")؛ الكاتب.writeAttribute ("x2"، "15")؛ الكاتب.writeAttribute ("y2"، "15")؛ الكاتب.writeAttribute ("النمط" ، "السكتة الدماغية:" + lColorIco + "؛ عرض السكتة الدماغية: 2") ؛ كاتب.الكتابة إندElement () ، WrriteStartElement ("سطر") ؛ الكاتب.writeAttribute ("x1"، "0")؛ الكاتب.writeAttribute ("y1"، "30")؛ الكاتب.writeAttribute ("x2"، "15")؛ الكاتب.writeAttribute ("y2"، "15")؛ الكاتب.writeAttribute ("النمط" ، "السكتة الدماغية:" + lColorIco + "؛ عرض السكتة الدماغية: 2") ؛ كاتب.الكتابة إندElement () ، كاتب.رايتستارت إيليمنت ("خط") ؛ الكاتب.writeAttribute ("x1"، "15")؛ الكاتب.writeAttribute ("y1"، "15")؛ الكاتب.writeAttribute ("x2"، "25")؛ الكاتب.writeAttribute ("y2"، "15")؛ الكاتب.writeAttribute ("النمط" ، "السكتة الدماغية:" + lColorIco + "؛ عرض السكتة الدماغية: 2") ؛ كاتب.الكتابة إندElement () ، كاتب.رايتستارت إيليمنت ("خط") ؛ WrriteAttribute ("x1"، "15")؛ الكاتب.writeAttribute ("y1"، "10")؛ الكاتب.writeAttribute ("x2"، "25")؛ الكاتب.writeAttribute ("y2"، "15")؛ الكاتب.writeAttribute ("النمط" ، "السكتة الدماغية:" + lColorIco + "؛ عرض السكتة الدماغية: 2") ؛ // نهاية سطر الكاتب. كاتب.رايتستارت إيليمنت ("خط") ؛ الكاتب.writeAttribute ("x1"، "15")؛ الكاتب.writeAttribute ("y1"، "20")؛ الكاتب.writeAttribute ("x2"، "25")؛ الكاتب.writeAttribute ("y2"، "15")؛ الكاتب.writeAttribute ("النمط" ، "السكتة الدماغية:" + lColorIco + "؛ عرض السكتة الدماغية: 2") ؛ // نهاية سطر الكاتب. // end of g tag manager.writeEndElement () ؛ // large WrriteStartElement ("g") ؛ الكاتب.writeAttribute ("id"، "rapide")؛ كاتب.رايتستارت إيليمنت ("خط") ؛ الكاتب.writeAttribute ("x1"، "0")؛ الكاتب.writeAttribute ("y1"، "0")؛ الكاتب.writeAttribute ("x2"، "15")؛ الكاتب.writeAttribute ("y2"، "15")؛ الكاتب.writeAttribute ("النمط" ، "السكتة الدماغية:" + lColorIco + "؛ عرض السكتة الدماغية: 2") ؛ // نهاية سطر الكاتب. كاتب.رايتستارت إيليمنت ("خط") ؛ الكاتب.writeAttribute ("x1"، "0")؛ الكاتب.writeAttribute ("y1"، "30")؛ الكاتب.writeAttribute ("x2"، "15")؛ الكاتب.writeAttribute ("y2"، "15")؛ الكاتب.writeAttribute ("النمط" ، "السكتة الدماغية:" + lColorIco + "؛ عرض السكتة الدماغية: 2") ؛ // نهاية سطر الكاتب. كاتب.رايتستارت إيليمنت ("خط") ؛ الكاتب.writeAttribute ("x1"، "15")؛ الكاتب.writeAttribute ("y1"، "15")؛ الكاتب.writeAttribute ("x2"، "30") ؛ الكاتب.writeAttribute ("y2"، "15")؛ الكاتب.writeAttribute ("النمط" ، "السكتة الدماغية:" + lColorIco + "؛ عرض السكتة الدماغية: 2") ؛ // نهاية سطر الكاتب. كاتب.رايتستارت إيليمنت ("خط") ؛ WrriteAttribute ("x1"، "15")؛ الكاتب.writeAttribute ("y1"، "10")؛ الكاتب.writeAttribute ("x2"، "30") ؛ الكاتب.writeAttribute ("y2"، "15")؛ الكاتب.writeAttribute ("النمط" ، "السكتة الدماغية:" + lColorIco + "؛ عرض السكتة الدماغية: 2") ؛ // نهاية سطر الكاتب. كاتب.رايتستارت إيليمنت ("خط") ؛ الكاتب.writeAttribute ("x1"، "15")؛ الكاتب.writeAttribute ("y1"، "20")؛ الكاتب.writeAttribute ("x2"، "30") ؛ الكاتب.writeAttribute ("y2"، "15")؛ الكاتب.writeAttribute ("النمط" ، "السكتة الدماغية:" + lColorIco + "؛ عرض السكتة الدماغية: 2") ؛ // نهاية سطر الكاتب. // end of g tag manager.writeEndElement () ؛ // نهاية وسم defs الكاتب.writeEndElement () ؛ // start use writeStartElement ("use")؛ الكاتب.writeAttribute ("xlink: href"، "#" + lUseIco)؛ WrriteAttribute ("x"، "0")؛ WrriteAttribute ("y"، "0")؛ // end of svg tag manager.writeEndElement () ؛ // كتابة البيانات إلى كاتب ملف XML.writeEndDocument () ؛ // أغلق الملف وأغلق عنصر الجذر fileXml.close () ؛ }

يمكنك استكشاف هذه العينة أو تحسينها أو لمجرد المساعدة استمتع بها.