يمكنك إعادة استخدام أجزاء من XML (في نوع من طريقة المتغيرات / المراجع)؟

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

  •  22-07-2019
  •  | 
  •  

سؤال

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

<StyledLayerDescriptor>
  <NamedLayer>
    <UserStyle>
      <FeatureTypeStyle>
        <Rule>
          <Filter>
            <PropertyIsEqualTo>
              <PropertyName>object_type</PropertyName>
              <Literal>1</Literal>
            </PropertyIsEqualTo>
          </Filter>
          <PointSymbolizer>
            <Graphic>
              <ExternalGraphic>
                <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="/images/1.png" />
                <Format>image/png</Format>
              </ExternalGraphic>
              <Size>16</Size>
              <Opacity>1</Opacity>
            </Graphic>
          </PointSymbolizer>
          <TextSymbolizer>
            <Label>
              <ogc:PropertyName>name</ogc:PropertyName>
            </Label>
            <Font>
              <CssParameter name="font-family">Times New Roman</CssParameter>
              <CssParameter name="font-style">Normal</CssParameter>
              <CssParameter name="font-size">12</CssParameter>
            </Font>
            <Fill>
              <CssParameter name="fill">#110011</CssParameter>
              <CssParameter name="fill-opacity">1</CssParameter>
            </Fill>
            <Halo />
          </TextSymbolizer>
        </Rule>

        <Rule>
          <Filter>
            <PropertyIsEqualTo>
              <PropertyName>object_type</PropertyName>
              <Literal>2</Literal>
            </PropertyIsEqualTo>
          </Filter>
          <PointSymbolizer>
            <Graphic>
              <ExternalGraphic>
                <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="/images/2.png" />
                <Format>image/png</Format>
              </ExternalGraphic>
              <Size>16</Size>
              <Opacity>1</Opacity>
            </Graphic>
          </PointSymbolizer>
          <TextSymbolizer>
            <Label>
              <ogc:PropertyName>name</ogc:PropertyName>
            </Label>
            <Font>
              <CssParameter name="font-family">Times New Roman</CssParameter>
              <CssParameter name="font-style">Normal</CssParameter>
              <CssParameter name="font-size">12</CssParameter>
            </Font>
            <Fill>
              <CssParameter name="fill">#110011</CssParameter>
              <CssParameter name="fill-opacity">1</CssParameter>
            </Fill>
            <Halo />
          </TextSymbolizer>
        </Rule>
      </FeatureTypeStyle>
    </UserStyle>
  </NamedLayer>
</StyledLayerDescriptor>

والشيء أحب أن تفعل سيتم كتابة TextSymbolizer مرة واحدة واستخدامها في اثنين أو أكثر من الأماكن ... لم أسمع أي شيء من هذا القبيل في XML، ولكن ربما لديك؟ : -)

وأحد الحلول التي تأتي لي، هو أن يكتب بعض مولد بسيط جدا (xml.erb: P) والسماح لها توليد XML ...

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

المحلول

وGeoServer في "الحيوي Symbolizer" تمديد لSLD لا تسمح لك باستخدام خصائص قاعدة البيانات كما كل أو جزء من عناوين رمز. يمكنك حتى إجراء عمليات حسابية واستدعاء وظائف مرشح إذا كنت تريد (أنها تستخدم جزءا لا يتجزأ من CQL في URL.

وهنا بلوق وظيفة ميزة: HTTP: / /blog.geoserver.org/2008/12/08/dynamic-symbolizers-part-1/

نصائح أخرى

هل حاول تحديد ل مخطط XML أو اختياريا <لأ href = "HTTP: //www.w3.org/XML/1998/06/xmlspec-report-v21.htm "يختلط =" نوفولو noreferrer "> XML DTD للحصول على XML الخاصة بك، وبعد ذلك باستخدام <لأ href =" HTTP: / /www.w3.org/TR/xmlschema-0/#schemaConstraintsVsXML1 "يختلط =" نوفولو noreferrer "> معرفات عنصر http://www.w3.org/TR/xmlschema-0/#schemaConstraintsVsXML1 أو شيء من هذا القبيل :



<StyledLayerDescriptor>
  <NamedLayer>
    <CommonStyles>
      <TextSymbolizer id="name_times_normal_12">
        <Label>
          <ogc:PropertyName>name</ogc:PropertyName>
        </Label>
        <Font>
          <CssParameter name="font-family">Times New Roman</CssParameter>
          <CssParameter name="font-style">Normal</CssParameter>
          <CssParameter name="font-size">12</CssParameter>
        </Font>
        <Fill>
          <CssParameter name="fill">#110011</CssParameter>
          <CssParameter name="fill-opacity">1</CssParameter>
        </Fill>
        <Halo />
      </TextSymbolizer>
    </CommonStyles>
    <UserStyle>
      <FeatureTypeStyle>
        <Rule>
          <Filter>
            <PropertyIsEqualTo>
              <PropertyName>object_type</PropertyName>
              <Literal>1</Literal>
            </PropertyIsEqualTo>
          </Filter>
          <PointSymbolizer>
            <Graphic>
              <ExternalGraphic>
                <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="/images/1.png" />
                <Format>image/png</Format>
              </ExternalGraphic>
              <Size>16</Size>
              <Opacity>1</Opacity>
            </Graphic>
          </PointSymbolizer>
          <TextSymbolizer ref="#name_times_normal_12" />
        </Rule>
        <Rule>
          <Filter>
            <PropertyIsEqualTo>
              <PropertyName>object_type</PropertyName>
              <Literal>2</Literal>
            </PropertyIsEqualTo>
          </Filter>
          <PointSymbolizer>
            <Graphic>
              <ExternalGraphic>
                <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="/images/2.png" />
                <Format>image/png</Format>
              </ExternalGraphic>
              <Size>16</Size>
              <Opacity>1</Opacity>
            </Graphic>
          </PointSymbolizer>
          <TextSymbolizer ref="#name_times_normal_12" />
        </Rule>
      </FeatureTypeStyle>
    </UserStyle>
  </NamedLayer>
</StyledLayerDescriptor>

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