簡體   English   中英

如何使用帶有 PHP CURL 的 REST API 更改地理服務器上的圖層樣式?

[英]How to change layer style on geoserver using REST API with PHP CURL?

Geoserver rest api 使用 PHP curl 更改圖層樣式的問題

我曾嘗試使用此代碼但它不起作用

curl_setopt($this->ch, CURLOPT_POST, True);
$passwordStr = "admin:geoserer";
curl_setopt($this->ch, CURLOPT_USERPWD, $passwordStr);

curl_setopt($this->ch, CURLOPT_CUSTOMREQUEST, 'PUT'); // -X
curl_setopt($this->ch, CURLOPT_BINARYTRANSFER, false); // --data-binary
curl_setopt($this->ch, CURLOPT_HTTPHEADER, ['Content-Type: text/xml']); // -H

$post = array("<layer><defaultStyle><name>polygon</name></defaultStyle></layer>");
curl_setopt($this->ch, CURLOPT_POSTFIELDS, $post);

buffer = curl_exec($this->ch);

這是正確的 CURL 請求

url -v -u admin:geoserver -XPUT -H "Content-type: text/xml"
-d "<layer><defaultStyle><name>roads_style</name></defaultStyle></layer>"
http://localhost:8080/geoserver/rest/layers/acme:roads

如果您不使用“經典”表單數據(url 編碼或多部分)並設置您自己的內容類型,請向CURLOPT_POSTFIELDS提供字符串而不是數組:

 $post = "<layer><defaultStyle><name>polygon</name></defaultStyle></layer>";
 curl_setopt($this->ch, CURLOPT_POSTFIELDS, $post)

正如手冊所述:

如果value是一個數組,則 Content-Type 標頭將設置為 multipart/form-data。

如果您在同一台服務器上運行 curl 請求,最簡單的方法是使用 exec() php 函數運行,

exec('url -v -u admin:geoserver -XPUT -H "Content-type: text/xml"
-d "<layer><defaultStyle><name>roads_style</name></defaultStyle></layer>"
http://localhost:8080/geoserver/rest/layers/acme:roads')

可選的。 這是用於更改 geoserver v2.3.0 中的現有圖層樣式的函數 php。

我通過以下功能解決了這個問題,注意 $params 必須在 geoserver 中的更改樣式之后為啟用層設置“true”。

function change_layer_style($url_layer,$style_name) {
    $params = '<layer><defaultStyle><name>'.$style_name.'</name></defaultStyle><enabled>true</enabled></layer>';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url_layer);
    curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml"));
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
    curl_setopt($ch, CURLOPT_USERPWD,"user:password"); //geoserver.
    curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Receive server response ...


    $response = curl_exec($ch);

    curl_close ($ch);
    return $response;


}


//--> how to use.
//--> 1. config your geoserver url.
$your_workspace = "xxx";
$your_layer_name = = "bbb";

$url_layer = "http://xxxx.co.uk:8080/geoserver/rest/layers/".$your_workspace.":".$your_layer_name;
$style_name ="your_exist_style_name";

//--> call above function.
change_layer_style($url_layer,$style_name);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM