解决GeoServices发布带有中文属性字段的shp文件出现无法使用sld文件的问题

来源:互联网 发布:淘宝级别怎么升 编辑:程序博客网 时间:2024/05/21 14:51

在GeoService开源地图服务器中,发布shp文件及风格文件sld是相互独立的。由于GeoService发布配置还不够灵活,所以直接发布带有中文属性字段的shp时,会发生许多问题。
例如如果shp文件中有一个属性字段为“名称”,当用Udig工具设置其它风格时如果使用了名称作为依据,就会在输出的配置文件中出现中文。如:

<?xml version="1.0" encoding="UTF-8"?> <sld:StyledLayerDescriptor xmlns="http://www.opengis.net/sld" xmlns:sld="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml" version="1.0.0">    <sld:UserLayer>        <sld:LayerFeatureConstraints>            <sld:FeatureTypeConstraint/>        </sld:LayerFeatureConstraints>        <sld:UserStyle>            <sld:Name>WXQR</sld:Name>            <sld:Title/>            <sld:FeatureTypeStyle>                <sld:Name>group 0</sld:Name>                <sld:FeatureTypeName>Feature</sld:FeatureTypeName>                <sld:SemanticTypeIdentifier>generic:geometry</sld:SemanticTypeIdentifier>                <sld:SemanticTypeIdentifier>colorbrewer:unique:custom</sld:SemanticTypeIdentifier>                <sld:Rule>                    <sld:Name>rule01</sld:Name>                    <sld:Title>中</sld:Title>                    <ogc:Filter>                        <ogc:PropertyIsEqualTo>                            <ogc:PropertyName>危险程度</ogc:PropertyName>                            <ogc:Literal>中</ogc:Literal>                        </ogc:PropertyIsEqualTo>                    </ogc:Filter>                    <sld:PolygonSymbolizer>                        <sld:Fill>                            <sld:CssParameter name="fill">#2892C7</sld:CssParameter>                            <sld:CssParameter name="fill-opacity">0.2</sld:CssParameter>                        </sld:Fill>                        <sld:Stroke>                            <sld:CssParameter name="stroke">#C0C0C0</sld:CssParameter>                            <sld:CssParameter name="stroke-width">0.1</sld:CssParameter>                        </sld:Stroke>                    </sld:PolygonSymbolizer>                </sld:Rule>                <sld:Rule>                    <sld:Name>rule02</sld:Name>                    <sld:Title>低</sld:Title>                    <ogc:Filter>                        <ogc:PropertyIsEqualTo>                            <ogc:PropertyName>危险程度</ogc:PropertyName>                            <ogc:Literal>低</ogc:Literal>                        </ogc:PropertyIsEqualTo>                    </ogc:Filter>                    <sld:PolygonSymbolizer>                        <sld:Fill>                            <sld:CssParameter name="fill">#BFD48A</sld:CssParameter>                            <sld:CssParameter name="fill-opacity">0.2</sld:CssParameter>                        </sld:Fill>                        <sld:Stroke>                            <sld:CssParameter name="stroke">#C0C0C0</sld:CssParameter>                            <sld:CssParameter name="stroke-width">0.1</sld:CssParameter>                        </sld:Stroke>                    </sld:PolygonSymbolizer>                </sld:Rule>                <sld:Rule>                    <sld:Name>rule03</sld:Name>                    <sld:Title>安全区</sld:Title>                    <ogc:Filter>                        <ogc:PropertyIsEqualTo>                            <ogc:PropertyName>危险程度</ogc:PropertyName>                            <ogc:Literal>安全区</ogc:Literal>                        </ogc:PropertyIsEqualTo>                    </ogc:Filter>                    <sld:PolygonSymbolizer>                        <sld:Fill>                            <sld:CssParameter name="fill">#D1FF73</sld:CssParameter>                            <sld:CssParameter name="fill-opacity">0.2</sld:CssParameter>                        </sld:Fill>                        <sld:Stroke>                            <sld:CssParameter name="stroke">#C0C0C0</sld:CssParameter>                            <sld:CssParameter name="stroke-width">0.1</sld:CssParameter>                        </sld:Stroke>                    </sld:PolygonSymbolizer>                </sld:Rule>                <sld:Rule>                    <sld:Name>rule04</sld:Name>                    <sld:Title>高</sld:Title>                    <ogc:Filter>                        <ogc:PropertyIsEqualTo>                            <ogc:PropertyName>危险程度</ogc:PropertyName>                            <ogc:Literal>高</ogc:Literal>                        </ogc:PropertyIsEqualTo>                    </ogc:Filter>                    <sld:PolygonSymbolizer>                        <sld:Fill>                            <sld:CssParameter name="fill">#F57A7A</sld:CssParameter>                            <sld:CssParameter name="fill-opacity">0.2</sld:CssParameter>                        </sld:Fill>                        <sld:Stroke>                            <sld:CssParameter name="stroke">#C0C0C0</sld:CssParameter>                            <sld:CssParameter name="stroke-width">0.1</sld:CssParameter>                        </sld:Stroke>                    </sld:PolygonSymbolizer>                </sld:Rule>            </sld:FeatureTypeStyle>        </sld:UserStyle>    </sld:UserLayer></sld:StyledLayerDescriptor>

上面是一个风格文件,里面的配置节出现了许多中文。将以上配置文件导入到GeoService风格库中,结果如下
<?xml version="1.0" encoding="UTF-8"?> <sld:StyledLayerDescriptor xmlns="http://www.opengis.net/sld" xmlns:sld="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml" version="1.0.0">    <sld:UserLayer>        <sld:LayerFeatureConstraints>            <sld:FeatureTypeConstraint/>        </sld:LayerFeatureConstraints>        <sld:UserStyle>            <sld:Name>WXQR</sld:Name>            <sld:Title/>            <sld:FeatureTypeStyle>                <sld:Name>group 0</sld:Name>                <sld:FeatureTypeName>Feature</sld:FeatureTypeName>                <sld:SemanticTypeIdentifier>generic:geometry</sld:SemanticTypeIdentifier>                <sld:SemanticTypeIdentifier>colorbrewer:unique:custom</sld:SemanticTypeIdentifier>                <sld:Rule>                    <sld:Name>rule01</sld:Name>                    <sld:Title>��</sld:Title>                    <ogc:Filter>                        <ogc:PropertyIsEqualTo>                            <ogc:PropertyName>Σ�ճ̶�</ogc:PropertyName>                            <ogc:Literal>��</ogc:Literal>                        </ogc:PropertyIsEqualTo>                    </ogc:Filter>                    <sld:PolygonSymbolizer>                        <sld:Fill>                            <sld:CssParameter name="fill">#2892C7</sld:CssParameter>                            <sld:CssParameter name="fill-opacity">0.2</sld:CssParameter>                        </sld:Fill>                        <sld:Stroke>                            <sld:CssParameter name="stroke">#C0C0C0</sld:CssParameter>                            <sld:CssParameter name="stroke-width">0.1</sld:CssParameter>                        </sld:Stroke>                    </sld:PolygonSymbolizer>                </sld:Rule>                <sld:Rule>                    <sld:Name>rule02</sld:Name>                    <sld:Title>��</sld:Title>                    <ogc:Filter>                        <ogc:PropertyIsEqualTo>                            <ogc:PropertyName>Σ�ճ̶�</ogc:PropertyName>                            <ogc:Literal>��</ogc:Literal>                        </ogc:PropertyIsEqualTo>                    </ogc:Filter>                    <sld:PolygonSymbolizer>                        <sld:Fill>                            <sld:CssParameter name="fill">#BFD48A</sld:CssParameter>                            <sld:CssParameter name="fill-opacity">0.2</sld:CssParameter>                        </sld:Fill>                        <sld:Stroke>                            <sld:CssParameter name="stroke">#C0C0C0</sld:CssParameter>                            <sld:CssParameter name="stroke-width">0.1</sld:CssParameter>                        </sld:Stroke>                    </sld:PolygonSymbolizer>                </sld:Rule>                <sld:Rule>                    <sld:Name>rule03</sld:Name>                    <sld:Title>��ȫ��</sld:Title>                    <ogc:Filter>                        <ogc:PropertyIsEqualTo>                            <ogc:PropertyName>Σ�ճ̶�</ogc:PropertyName>                            <ogc:Literal>��ȫ��</ogc:Literal>                        </ogc:PropertyIsEqualTo>                    </ogc:Filter>                    <sld:PolygonSymbolizer>                        <sld:Fill>                            <sld:CssParameter name="fill">#D1FF73</sld:CssParameter>                            <sld:CssParameter name="fill-opacity">0.2</sld:CssParameter>                        </sld:Fill>                        <sld:Stroke>                            <sld:CssParameter name="stroke">#C0C0C0</sld:CssParameter>                            <sld:CssParameter name="stroke-width">0.1</sld:CssParameter>                        </sld:Stroke>                    </sld:PolygonSymbolizer>                </sld:Rule>                <sld:Rule>                    <sld:Name>rule04</sld:Name>                    <sld:Title>��</sld:Title>                    <ogc:Filter>                        <ogc:PropertyIsEqualTo>                            <ogc:PropertyName>Σ�ճ̶�</ogc:PropertyName>                            <ogc:Literal>��</ogc:Literal>                        </ogc:PropertyIsEqualTo>                    </ogc:Filter>                    <sld:PolygonSymbolizer>                        <sld:Fill>                            <sld:CssParameter name="fill">#F57A7A</sld:CssParameter>                            <sld:CssParameter name="fill-opacity">0.2</sld:CssParameter>                        </sld:Fill>                        <sld:Stroke>                            <sld:CssParameter name="stroke">#C0C0C0</sld:CssParameter>                            <sld:CssParameter name="stroke-width">0.1</sld:CssParameter>                        </sld:Stroke>                    </sld:PolygonSymbolizer>                </sld:Rule>            </sld:FeatureTypeStyle>        </sld:UserStyle>    </sld:UserLayer></sld:StyledLayerDescriptor>

发现中文变成了乱码。这样将地图发布,一定会出现问题。以下是解决方案,网上查了许多资料,集成一下吧。
首先,在新建Add new Store时,设置DBF charset为GB2312

然后按照流程发布shp文件,发布文件时,注意

Feature Type Detial里应该不会出现乱码。不要上传sld风格文件,用记事本打开sld复制,粘贴到风格库里面

最后一步,看到风格文件的编码格式是不是“UTF-8”呢?改成“GB2312”,保存。这样,发布shp文件后,再修改下风格,就不会现出问题了。

原创粉丝点击