我正在将 GeoServer 的 REST API 集成到我们的软件中,但我找不到在创建 Shapefile 数据源或更新图层时如何指定坐标参考系统 (CRS)。
我目前通过 API 所做的是:
如果我在 2 层上保留默认的
EPSG:404000
,那么它们不会出现在 Leaflet 中,因为 bbox
参数是错误的。我必须在两个图层中手动将 EPSG:404000
(由 API 设置的默认值)更改为 EPSG:4326
,以使图层组显示在 Leaflet 中(bbox
参数现在是正确的)。
我可以在通过 API 创建图层组时指定 CRS 值,但在创建图层时则不能指定。
如果我通过了
<attribution>
<title>hello</title>
</attribution>
<bounds>
<crs>EPSG:4326</crs>
</bounds>
然后图层的标题发生更改,但 CRS 不变。
如何通过API更改图层的CRS值?
谢谢!
与往常一样,任何 REST API 的技巧都是查看来自正确层的响应(尽管在这种情况下,真正的技巧是修复您的 shapefile),所以
http://localhost:8080/geoserver/rest/workspaces/topp/datastores/states_shapefile/featuretypes/states.xml
:
<featureType>
<name>states</name>
<nativeName>states</nativeName>
<namespace>
<name>topp</name>
<atom:link xmlns:atom="http://www.w3.org/2005/Atom" rel="alternate" href="http://localhost:8080/geoserver/rest/namespaces/topp.xml" type="application/xml"/>
</namespace>
<title>USA Population</title>
<abstract>This is some census data on the states.</abstract>
<keywords>
<string>census</string>
<string>united</string>
<string>boundaries</string>
<string>state</string>
<string>states</string>
</keywords>
<nativeCRS>GEOGCS["GCS_WGS_1984",
DATUM["WGS_1984",
SPHEROID["WGS_1984", 6378137.0, 298.257223563]],
PRIMEM["Greenwich", 0.0],
UNIT["degree", 0.017453292519943295],
AXIS["Longitude", EAST],
AXIS["Latitude", NORTH]]</nativeCRS>
<srs>EPSG:4326</srs>
<nativeBoundingBox>
<minx>-124.73142200000001</minx>
<maxx>-66.969849</maxx>
<miny>24.955967</miny>
<maxy>49.371735</maxy>
<crs>EPSG:4326</crs>
</nativeBoundingBox>
<latLonBoundingBox>
<minx>-124.731422</minx>
<maxx>-66.969849</maxx>
<miny>24.955967</miny>
<maxy>49.371735</maxy>
<crs>EPSG:4326</crs>
</latLonBoundingBox>
<projectionPolicy>FORCE_DECLARED</projectionPolicy>
<enabled>true</enabled>
...
因此,您似乎可以将 XML 中的本机 CRS 和默认 CRS 指定为 WKT 字符串或 EPSG 代码,在您的情况下,您希望使用 EPSG:4326 覆盖本机 CRS(EPSG:40400,这意味着未知) (如果这就是您的数据实际所在的位置)因此,在修改
featuretype
时,您至少需要 POST:
<featureType>
<srs>EPSG:4326</srs>
<projectionPolicy>FORCE_DECLARED</projectionPolicy>
</featureType>
但我怀疑您还需要设置
latLonBoundingBox
除非它看起来正确。