如何通过 REST API 在 GeoServer 中创建 WMS 图层?

How create WMS layer in GeoServer by REST API?

PostgreSQL 中,我有一个名为 geo 的方案。在该方案中,我有一个 table 和一个具有 geometry 数据类型的列。

我是 GeoServer 的新手,想知道如何使用远程 PostgreSQL 数据库的数据通过 REST API 创建 WMS 层?根据 documentation 我需要先创建工作区和数据存储,对吗?我有点困惑。应该采取什么行动顺序?我将不胜感激!

curl请求结果:

REST API 的工作方式与 GUI 完全相同,因此您可以选择创建新的 工作区 或使用现有工作区,然后在 workspace 中创建一个 store,然后从 store 创建 layers。任何图层都将自动成为可用的 WMS 图层。

  1. Create a new PostGIS store,生成包含连接详细信息的文件:
      <dataStore>
        <name>nyc</name>
        <connectionParameters>
          <host>localhost</host>
          <port>5432</port>
          <database>nyc</database>
          <user>bob</user>
          <passwd>postgres</passwd>
          <dbtype>postgis</dbtype>
        </connectionParameters>
      </dataStore>

和POST它到 REST 端点

curl -v -u admin:geoserver -XPOST -T <file.xml> -H "Content-type: text/xml"
    http://localhost:8080/geoserver/rest/workspaces/<WORKSPACENAME>/datastores
  1. 然后publish the table as a layer
curl -v -u admin:geoserver -XPOST -H "Content-type: text/xml" -d "<featureType><name>buildings</name></featureType>" http://localhost:8080/geoserver/rest/workspaces/acme/datastores/nyc/featuretypes

可选。 从现有的 PostGIS 商店发布 table。 关于 php curl.

function curl_post($url,$params) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml"));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_USERPWD,"user:password");//--> on 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;
}

 //- table_name      : xxx 
 //- work_space_name : your_workspace 
 //- store_name    : dbtest


$layer_name = "xxx";

$params ="
    <featureType>
      <name>".$layer_name."</name>
      
      <nativeName>".$layer_name."</nativeName>
      
      <title>".$layer_name."</title>
      
      <keywords>
        <string>".$layer_name."</string>
        <string>features</string>
      </keywords>
      
      <srs>EPSG:3857</srs>
      
      <nativeBoundingBox>
        <minx>1.0836244E7</minx>
        <maxx>1.1759454E7</maxx>
        <miny>625842.375</miny>
        <maxy>2328151.75</maxy>
      </nativeBoundingBox>
      
      <latLonBoundingBox>
        <minx>97.34363607648459</minx>
        <maxx>105.63697261100442</maxx>
        <miny>5.613037739416236</miny>
        <maxy>20.464604971116074</maxy>
        
      </latLonBoundingBox>
      
      <projectionPolicy>FORCE_DECLARED</projectionPolicy>
      <enabled>true</enabled>
      <metadata>
        <entry key=\"cachingEnabled\">false</entry>
      </metadata>
      <maxFeatures>0</maxFeatures>
      <numDecimals>0</numDecimals>
    </featureType>
";

$str_url = "http://xxx.co.uk/geoserver/rest/workspaces/**your_workspace**/datastores/**your_data_store**/featuretypes";

$rs = curl_post($str_url, $params);