我正在尝试使用SLD (Styled Layer Descriptor)为将在地图服务器上显示的图层着色,但是我的SLD中存在错误,因此颜色错误。这是因为SLD使用填充值的随机十六进制值。正确的十六进制值在SLD中,但它们不在正确的位置(它们用作图层名称)。
这是SLD的一个片段,它为一个特征着色(还有大约850个其他特征)。
<se:Name>#27D1D1</se:Name>
<se:Description>
<se:Title>#27D1D1</se:Title>
</se:Description>
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>HEXCOLOR</ogc:PropertyName>
<ogc:Literal>#27D1D1</ogc:Literal> <--I want this Hex value
</ogc:PropertyIsEqualTo>
</ogc:Filter>
<se:PolygonSymbolizer>
<se:Fill>
<se:SvgParameter name="fill">#cd42a3</se:SvgParameter> <--- Put here
</se:Fill>
<se:Stroke>
<se:SvgParameter name="stroke">#000001</se:SvgParameter>
<se:SvgParameter name="stroke-width">1</se:SvgParameter>
<se:SvgParameter name="stroke-linejoin">bevel</se:SvgParameter>
</se:Stroke>
</se:PolygonSymbolizer>
</se:Rule>
<se:Rule>
SED或类似方法是否可以将Hex值从Literal复制并粘贴到Fill?
答案 0 :(得分:1)
我认为这可以满足您的需求:
awk '/ogc:Literal/{split($0,a,/[><]/);hex=a[3]} /se:SvgParameter name="fill"/{sub(/#[0-9a-fA-F]*/,hex)} 1' YourFile
所以,那说...... &#34;如果你看到字符串ogc:Literal
,请使用>
和<
作为分隔符拆分行,并将元素放入数组a
。将a[3]
保存在名为hex
的变量中以供日后使用。如果您看到包含se:SvgParameter name="fill"
的行,请使用您之前记得的变量hex
替换该行中十六进制值的任何内容。最后1
表示awk
应执行默认操作,即打印该行。&#34;
如果要保存修改后的文件,请使用:
awk ... YourExistingFile > ModifiedFile
答案 1 :(得分:1)
使用sed
sed -E '/Literal/{h;s/([^#]*)(#[^<]*)(.*)/\2/;x};/fill/G;s/([^#]*)(#[^<]*)([^\n]*)\n(.*)/\1\4\3/' SLDfile
当您看到包含Literal的行时,请将十六进制数保留在保留空间中。
当您看到带有填充的行时,请将六角编号与保留空间中的六角编号进行交换