如何通过 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 图层。
- 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
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);
在 PostgreSQL
中,我有一个名为 geo
的方案。在该方案中,我有一个 table 和一个具有 geometry
数据类型的列。
我是 GeoServer
的新手,想知道如何使用远程 PostgreSQL 数据库的数据通过 REST API
创建 WMS
层?根据 documentation 我需要先创建工作区和数据存储,对吗?我有点困惑。应该采取什么行动顺序?我将不胜感激!
curl请求结果:
REST API 的工作方式与 GUI 完全相同,因此您可以选择创建新的 工作区 或使用现有工作区,然后在 workspace 中创建一个 store,然后从 store 创建 layers。任何图层都将自动成为可用的 WMS 图层。
- 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
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);