Я работаю над проектом с использованием GeoServer (v2.5.2) и GeoWebcache. Я хочу иметь возможность загружать изображения для создания магазина покрытия и связанных с ним слоев. Я использую PHP с cURL для связи с REST API.
Загрузка и создание магазина покрытия работает с использованием этого кода:
$curl = curl_init($service_url."workspaces/".htmlentities($workspace)."/coveragestores");
$data = '<coverageStore>
<name>'.htmlentities($name).'</name>
<type>'.htmlentities($type).'</type>
<enabled>true</enabled>
<connectionParameters>
<entry key="url">file:'.$file.'</entry>
<entry key="namespace">'.htmlentities($workspace, ENT_COMPAT).'</entry>
</connectionParameters>
</coverageStore>';
curl_setopt($curl, CURLOPT_POST, True);
curl_setopt($curl, CURLOPT_HTTPHEADER,array("Content-type: application/xml, Content-Length: ".strlen($data)));
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_USERPWD, $auth);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$buffer = curl_exec($curl);
Теперь я хочу создать новый слой.
Я использую тот же код, что и выше (меняются только параметры URL и XML).
Лучшая «документация», которую я нашел, это:
http://docs.geoserver.org/2.5.x/en/user/geowebcache/rest/layers.html
Попытался использовать версии GeoWebCache и GeoServer, оба возвращают мне код ошибки 404.
Итак, я попробовал еще раз, используя этот документ: http://docs.geoserver.org/2.5.x/en/user/rest/api/layers.html
Но это не говорит, что ожидаемые параметры POST. Единственное, что я получаю, это код ошибки 500.
Что я делаю неправильно ? Большое спасибо.
Нашел мою ошибку:
Я пытался добавить слой, но мне нужно было добавить покрытие, слой автоматически создается с ним.
Если это может кому-то помочь, вот как я это сделал:
$data = '<coverage>
<name>'.htmlentities($name).'</name>
<title>'.htmlentities($name).'</title>
<nativeCRS>'.htmlentities('
GEOGCS["WGS 84",
DATUM["World Geodetic System 1984",
SPHEROID["WGS 84", 6378137.0, 298.257223563, AUTHORITY["EPSG","7030"]],
AUTHORITY["EPSG","6326"]],
PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]],
UNIT["degree", 0.017453292519943295],
AXIS["Geodetic longitude", EAST],
AXIS["Geodetic latitude", NORTH],
AUTHORITY["EPSG","4326"]]
').'
</nativeCRS>
<supportedFormats>
<string>GEOTIFF</string>
<string>PNG</string>
<string>JPEG</string>
<string>TIFF</string>
</supportedFormats>
<requestSRS>
<string>EPSG:4326</string>
</requestSRS>
<responseSRS>
<string>EPSG:4326</string>
</responseSRS>
<srs>EPSG:4326</srs>
</coverage>';
$curl = curl_init($service_url."workspaces/".htmlentities($workspace)."/coveragestores/".htmlentities($name)."/coverages");
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_HTTPHEADER,array("Content-Type: application/xml","Content-Length: ".strlen($data)));
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_USERPWD, $auth);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_exec($curl);
Других решений пока нет …