欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

目錄

通過(guò)Java的geoserver-manager管理GeoServer自定義SLD樣式,實(shí)現(xiàn)不同圖斑展示不同顏色

SLD是風(fēng)格化圖層描述器(Styled Layer Descriptor)的簡(jiǎn)稱,是2005年OGC提出的一個(gè)標(biāo)準(zhǔn),這個(gè)標(biāo)準(zhǔn)在一定條件下允許WMS服務(wù)器對(duì)地圖可視化的表現(xiàn)形式進(jìn)行擴(kuò)展。在沒(méi)有SLD之前,只能使用一些已經(jīng)在服務(wù)器上規(guī)定好的樣式來(lái)對(duì)地圖進(jìn)行可視化。而當(dāng)使用了實(shí)現(xiàn)了SLD標(biāo)準(zhǔn)之后,它允許我們從客戶端來(lái)對(duì)地圖進(jìn)行定義自己的樣式,分級(jí)顯示等操作,極大的擴(kuò)展了地圖可視化的靈活性。

簡(jiǎn)單來(lái)說(shuō),sld就是用于描述圖層樣式的一個(gè)xml格式的文本

SLD文檔的元素架構(gòu)如下:

掌握使用java api 發(fā)布樣式

一、前置準(zhǔn)備

以我本地的環(huán)境為例

導(dǎo)入依賴 geoserver-manager

<!--圖層發(fā)布-->
<dependency>
    <groupId>nl.pdok</groupId>
    <artifactId>geoserver-manager</artifactId>
    <version>1.7.0-pdok2</version>
</dependency>

獲取manager對(duì)象 —— 比較簡(jiǎn)單,配置一些必要的參數(shù)即可

從指定路徑讀取sld文件文本,在進(jìn)行發(fā)布

為什么使用后string字符串進(jìn)行發(fā)布 —— 為了便于后期進(jìn)行數(shù)據(jù)庫(kù)配置后進(jìn)行發(fā)布

設(shè)計(jì)從數(shù)據(jù)庫(kù)字段自定義樣式

一、數(shù)據(jù)庫(kù)設(shè)計(jì)

目標(biāo):根據(jù)數(shù)據(jù)庫(kù)動(dòng)態(tài)生成發(fā)布所需的sld文件。

其實(shí)就是需要6個(gè)核心參數(shù):條件x2, stroke x2 , fill x2

property_name 字段名

literal 條件

fill_color 填充顏色

fill_opacity 不透明度

stroke_color 線條顏色

stroke_width 線寬

給出初版表結(jié)構(gòu)如下

CREATE TABLE "public"."geoserver_publish_style" (
  "id" int8 NOT NULL DEFAULT nextval('geoserver_publish_style_id_seq'::regclass),
  "property_name" varchar(255) COLLATE "pg_catalog"."default",
  "literal" varchar(255) COLLATE "pg_catalog"."default",
  "fill_color" varchar(255) COLLATE "pg_catalog"."default",
  "fill_opacity" varchar(255) COLLATE "pg_catalog"."default",
  "stroke_color" varchar(255) COLLATE "pg_catalog"."default",
  "stroke_width" varchar(53) COLLATE "pg_catalog"."default",
  "parent_id" int8,
  "created_id" int8,
  "created_time" timestamp(6) DEFAULT now(),
  "last_modify_id" int8,
  "last_modify_time" timestamp(6) DEFAULT now(),
  "is_valid" int2,
  "bsm" varchar(255) COLLATE "pg_catalog"."default",
  "table_name" varchar(255) COLLATE "pg_catalog"."default",
  "is_sm" varchar(255) COLLATE "pg_catalog"."default",
  "name" varchar(255) COLLATE "pg_catalog"."default",
  "sorting" int4,
  CONSTRAINT "geoserver_publish_style_pkey" PRIMARY KEY ("id")
)
;
ALTER TABLE "public"."geoserver_publish_style" 
  OWNER TO "postgres";
COMMENT ON COLUMN "public"."geoserver_publish_style"."property_name" IS '字段名';
COMMENT ON COLUMN "public"."geoserver_publish_style"."literal" IS '條件';
COMMENT ON COLUMN "public"."geoserver_publish_style"."fill_color" IS '填充顏色';
COMMENT ON COLUMN "public"."geoserver_publish_style"."fill_opacity" IS '不透明度';
COMMENT ON COLUMN "public"."geoserver_publish_style"."stroke_color" IS '線條顏色';
COMMENT ON COLUMN "public"."geoserver_publish_style"."stroke_width" IS '線寬';
COMMENT ON COLUMN "public"."geoserver_publish_style"."parent_id" IS '父類id';
COMMENT ON COLUMN "public"."geoserver_publish_style"."table_name" IS '所屬表名';
COMMENT ON COLUMN "public"."geoserver_publish_style"."is_sm" IS '是否為多色(1為單色;2為多色)';
COMMENT ON COLUMN "public"."geoserver_publish_style"."name" IS '名稱(如是根節(jié)點(diǎn)的話,代表樣式名稱,子節(jié)點(diǎn)澤表示圖例名稱)';
COMMENT ON COLUMN "public"."geoserver_publish_style"."sorting" IS '排序';
COMMENT ON TABLE "public"."geoserver_publish_style" IS '圖層樣式';

邏輯其實(shí)以拼接出所需要的sld文檔為主,邏輯思路如下:

構(gòu)建出一個(gè)sld文件雛形(string

從數(shù)據(jù)庫(kù)獲取自定義的字段結(jié)構(gòu)

將每個(gè)數(shù)據(jù)庫(kù)實(shí)體拼接成一個(gè)單獨(dú)的rule標(biāo)簽

將所有rule標(biāo)簽拼接后,存入1.中的sld文件中

返回結(jié)果即可

 /**
     * 根據(jù)樣式名稱name 查詢出對(duì)應(yīng)的整個(gè)實(shí)體列表
     */
    public RestResult<List<GeoserverPublishStyleResponse>> getListByName(String name) {
        LambdaQueryWrapper<GeoserverPublishStyle> wrapper = new LambdaQueryWrapper<>();
//        wrapper.eq(GeoserverPublishStyle::getName , name);
        List<GeoserverPublishStyle> list = this.list(wrapper);
        List<GeoserverPublishStyleResponse> responses = new ArrayList<>();
        for (GeoserverPublishStyle geoserverPublishStyle : list) {
            GeoserverPublishStyleResponse response = GeoserverPublishStyleConvert.INSTANCE.toResponse(geoserverPublishStyle);
            responses.add(response);
        }
        return RestResultUtils.success(responses);
    }
    @Override
    public String composeSldText(String name) {
        List<GeoserverPublishStyleResponse> styleResponses = this.getListByName(name).getData();
        // 獲取初始sld文本
        StringBuffer sld = new StringBuffer(SLD_ORIGIN_TEXT);
        StringBuffer rules = new StringBuffer();
        // 循環(huán)生成rule文本
        for (GeoserverPublishStyleResponse style : styleResponses) {
            StringBuffer str = new StringBuffer(SLD_RULE_HEAD);
            // 存title
            str.append(style.getPropertyName() + "=" + style.getLiteral());
            // 存條件名PropertyName
            str.append(SLD_RULE_2);
            str.append(style.getPropertyName());
            // 存屬性值
            str.append(SLD_RULE_3);
            str.append(style.getLiteral());
            str.append(SLD_RULE_4);
            // 存填充顏色
            str.append("<Fill><CssParameter name=\"fill\">");
            str.append(style.getFillColor() != null ?
                    style.getFillColor() :
                    "#DDDDDD");
            // 存填充顏色的透明度
            str.append("</CssParameter> <CssParameter name=\"fill-opacity\">");
            str.append(style.getFillOpacity() != null ? style.getFillOpacity() : "0.7");
            str.append("</CssParameter></Fill><Stroke>");
             存線條信息
            String strokeColor = style.getStrokeColor();
            String strokeWidth = style.getStrokeWidth();
            if (StringUtils.hasText(strokeColor) ) {
                str.append("<CssParameter name=\"stroke\">");
                str.append(strokeColor);
                str.append("</CssParameter>");
            }
            if(StringUtils.hasText(strokeWidth)){
                str.append("<CssParameter name=\"stroke-width\">");
                str.append(strokeWidth);
                str.append("</CssParameter>");
            }
            str.append("</Stroke>");
            // 存結(jié)尾
            str.append(SLD_RULE_END);
            /// 插入rules中
            rules.append(str);
        }
        // 將rule替換掉sld的文本
        sld.replace(684,689 , rules.toString());
        return sld.toString();
    }

使用到的靜態(tài)變量

SLD_ORIGIN_TEXT = "<?xml version=\"1.0\" encoding=\"GBK\"?><StyledLayerDescriptor version=\"1.0.0\" xsi:schemaLocation=\"http://www.opengis.net/sld StyledLayerDescriptor.xsd\" xmlns=\"http://www.opengis.net/sld\" xmlns:ogc=\"http://www.opengis.net/ogc\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><NamedLayer><Name>name</Name><UserStyle><FeatureTypeStyle><Rule><Title>default</Title><PolygonSymbolizer><Fill><CssParameter name=\"fill\">#DDDDDD</CssParameter><CssParameter name=\"fill-opacity\">0.7</CssParameter></Fill><Stroke><CssParameter name=\"stroke\">#808080</CssParameter><CssParameter name=\"stroke-width\">0.3</CssParameter></Stroke></PolygonSymbolizer></Rule>" +
            "@rule" +
            "</FeatureTypeStyle></UserStyle></NamedLayer></StyledLayerDescriptor>";
    String SLD_RULE_HEAD = "<Rule><Title>";
    String SLD_RULE_2 = "</Title><ogc:Filter><ogc:PropertyIsEqualTo><ogc:PropertyName>";
    String SLD_RULE_3 = "</ogc:PropertyName><ogc:Literal>";
    String SLD_RULE_4 = "</ogc:Literal></ogc:PropertyIsEqualTo></ogc:Filter><PolygonSymbolizer>";
    String SLD_RULE_END = "</PolygonSymbolizer></Rule>";

來(lái)看看測(cè)試代碼 ,獲取最終數(shù)據(jù)

@SpringBootTest
class GeoserverPublishStyleServiceTest {
    @Resource
    IGeoserverPublishStyleService geoserverPublishStyleService;
    @Test
    void composeSLDStirng(){
        String s = geoserverPublishStyleService.composeSldText(null);
        System.out.println(s);
    }
}
評(píng)論可見(jiàn),查看隱藏內(nèi)容


本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/18000569.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問(wèn)

文章目錄