jQuery('#TreeTableMap').TableAjaxMap({
wpsUrl: 'http://biuro.biall-net.pl/wps',
wfsUrl: 'http://biuro.biall-net.pl/wps'
});
*
*/
class TableAjaxMap {
private $_acl;
private $_zasobID;
private $_width;
private $_height;
public function __construct($tblAcl, $width = 512, $height = 256) {
$this->_acl = $tblAcl;
$this->_zasobID = $tblAcl->getID();
$this->_width = $width;
$this->_height = $height;
}
public function printCSS() {
//
//
?>
sendAjaxProxy($_REQUEST);
break;
}
default:
//$this->sendAjaxData($_REQUEST);
}
}
public function sendAjaxProxy($args) {
$url = V::get('url', '', $args);
// 1. http%3A%2F%2Fbiuro.biall-net.pl%2Fwps%3FSERVICE%3DWPS%26REQUEST%3DGetCapabilities
// 2. http%3A%2F%2Fbiuro.biall-net.pl%2Fwps%3FSERVICE%3DWPS%26REQUEST%3DDescribeProcess%26VERSION%3D1.0.0%26IDENTIFIER%3Dpozdrawiam
header('Content-Type: application/xml; charset=utf-8');
$urlParts = parse_url($url);
$urlQuery = array();
$urlQueryTmp = V::get('query', '', $urlParts);
$urlQueryTmp = explode('&', $urlQueryTmp);
foreach ($urlQueryTmp as $vQuery) {
$parts = explode('=', $vQuery, 2);
$urlQuery[$parts[0]] = $parts[1];
}
$wpsServer = new TableAjaxMapWpsServer($this->_zasobID);
if ('WPS' == V::get('SERVICE', '', $urlQuery)) {
$req = V::get('REQUEST', '', $urlQuery);
$methodName = "{$req}Action";
if (method_exists($wpsServer, $methodName)) {
$wpsServer->$methodName($urlQuery);
}
}
else {
$wpsServer->parseXMLRequest();
}
exit;
}
}
class TableAjaxMapWfsAction {
private $_zasobID;
public function __construct($zasobID) {
$this->_zasobID = $zasobID;
}
/**
* example: MULTIPOLYGON(((2072016.74395199 7234076.79293037,2072016.74395199 7234115.01144451,2072131.3994944 7234115.01144451,2072131.3994944 7234076.79293037,2072016.74395199 7234076.79293037)))
*/
public function generateGmlFromWKT($wkt) {
$gml = '';
$wktParts = explode('(', $wkt, 2);
ob_start();
switch ($wktParts[0]) {
case 'MULTIPOLYGON':
case 'POLYGON': {
$points = trim($wktParts[1], '() ');
$points = str_replace(',', "\n", $points);
?>
-180 -90
180 90
_zasobID == 16) {// TODO: read by TableAcl from Data_Source?
$sql = "select b.`ID`, AsWKT(b.`the_geom`) as the_geom
from `BUILDINGS` as b
where b.`the_geom` is not null and b.`the_geom`!=''
limit 10;
";
$res = $db->query($sql);
while ($r = $db->fetch($res)) {
$buildingsGml[$r->ID] = $this->generateGmlFromWKT($r->the_geom);
}
}
/**
*
*
*
* goes to js: @see priv.addWKTInput _layer.selectedFeatures[0]
*
* attributes: Object
recordId: "1130"
tblId: "16"
*/
echo '';
?>
-180 -90
180 90
$vGml) : ?>
_zasobID; ?>
title = 'Przypisz';
$this->description = 'Przypisuje położenie do wybranego rekordu w tabeli.';
$this->dataInputs['geom'] = new stdClass();
$this->dataInputs['geom']->title = 'geom';
$this->dataInputs['geom']->description = 'Input geometry';
$this->dataInputs['geom']->type = 'geom';// CoomplexData
$this->dataInputs['idTable'] = new stdClass();
$this->dataInputs['idTable']->title = 'geom';
$this->dataInputs['idTable']->description = 'Table ID';
$this->dataInputs['idTable']->type = 'integer';// LiteralData: xs:integer
$this->dataInputs['idRecord'] = new stdClass();
$this->dataInputs['idRecord']->title = 'idRecord';
$this->dataInputs['idRecord']->description = 'Record ID';
$this->dataInputs['idRecord']->type = 'integer';// LiteralData: xs:integer
}
}
class TableAjaxMapWpsServer {
private $_fun;// config for identifiers
private $_wfsAction;
private $_zasobID;
public function __construct($zasobID) {
$this->_fun['przypiszDoRekordu'] = new WpsActionPrzypiszDoRekordu();
$this->_wfsAction = new TableAjaxMapWfsAction($zasobID);
$this->_zasobID = $zasobID;
}
public function parseXMLRequest() {
$data = array();
$reqContent = file_get_contents('php://input');
$xml = new SimpleXMLElement($reqContent);
if ('GetFeature' == $xml->getName()) {
// TODO: parse xml and set query params
$this->_wfsAction->execute($data);
}
else if (isset($xml->children('ows', TRUE)->Identifier)) {
$identifier = (string)$xml->children('ows', TRUE)->Identifier;
if (array_key_exists($identifier, $this->_fun)) {
foreach ($xml->children('wps', TRUE)->DataInputs->children('wps', TRUE) as $input) {
$inputIdentifier = (string)$input->children('ows', TRUE)->Identifier;
if (array_key_exists($inputIdentifier, $this->_fun[$identifier]->dataInputs)) {
$inputType = (string)$this->_fun[$identifier]->dataInputs[$inputIdentifier]->type;
switch ($inputType) {
case 'integer':
$data[$inputIdentifier] = (string)$input->children('wps', TRUE)->Data->LiteralData;
break;
case 'geom':
$data[$inputIdentifier] = (string)$input->children('wps', TRUE)->Data->ComplexData;
break;
default:
}
} else {
// brak zdefiniowanego inputa
}
}
$this->_fun['przypiszDoRekordu']->execute($data);
} else {
echo "TODO: brak zdefiniowanej funkcji '{$identifier}'";
var_dump($identifier);
}
}
else {
echo "TODO: '" . $xml->getName() . "' ...";
}
}
public function getCapabilitiesAction() {
echo '';
?>
Prototype GeoServer WPS
wps
geoserver
WPS
1.0.0
NONE
NONE
GeoServer
_fun as $kFun => $vFun) : ?>
title; ?>
description; ?>
en-US
en-US
';
if (array_key_exists($args['IDENTIFIER'], $this->_fun)) {
$identifier = $this->_fun[$args['IDENTIFIER']];
?>
title; ?>
description; ?>
dataInputs as $kInput => $vInput) : ?>
title; ?>
description; ?>
type == 'geom') : ?>
text/xml; subtype=gml/3.1.1
text/xml; subtype=gml/3.1.1
text/xml; subtype=gml/2.1.2
application/wkt
application/gml-3.1.1
application/gml-2.1.2
type == 'integer') : ?>
xs:integer