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->_acl);
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 $_acl;
private $_zasobID;
public function __construct($acl) {
$this->_acl = $acl;
$this->_zasobID = $acl->getID();
}
/**
* 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
45.67 88.56
// 45.67, 88.56
?>
-180 -90
180 90
-180 -90
180 90
_acl->getDB());
$dataSource->setTable($this->_acl->getName());
$dataSource->addCol('ID');
$dataSource->addCol('the_geom');
$dataSource->setColTypes($this->_acl->getTypes());
$params = array();
$params['limit'] = 1000;
if (!empty($args['BBOX'])) {
$params['f_the_geom'] = 'BBOX:' . implode(',', $args['BBOX']);
}
$items = $dataSource->getItems($params);
$buildingsGml = array();
foreach ($items as $r) {
if (!empty($r->the_geom)) {
$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;
private $_acl;
public function __construct($acl) {
$this->_fun['przypiszDoRekordu'] = new WpsActionPrzypiszDoRekordu();
$this->_acl = $acl;
$this->_zasobID = $acl->getID();
$this->_wfsAction = new TableAjaxMapWfsAction($this->_acl);
}
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
/*
the_geom
17.226562502593 53.887024366231
20.039062502593 54.847089981191
*/
$corners = null;
$xmlTag = $xml->children("wfs", TRUE)->Query;
if (!empty($xmlTag)) {
$xmlTag = $xmlTag->children("ogc", TRUE)->Filter;
if (!empty($xmlTag)) {
$xmlTag = $xmlTag->BBOX;
if (!empty($xmlTag)) {
$xmlTag = $xmlTag->children("gml", TRUE)->Envelope;
if (!empty($xmlTag)) {
$corners = (object)array('lowerCorner' => (string)$xmlTag->lowerCorner, 'upperCorner' => (string)$xmlTag->upperCorner);
}
}
}
}
if ($corners) {
$lowerCorner = (string) $corners->lowerCorner;
$upperCorner = (string) $corners->upperCorner;
$lowerCorner = explode(" ", trim($lowerCorner));
$upperCorner = explode(" ", trim($upperCorner));
if (count($lowerCorner) == 2 && count($upperCorner) == 2) {
$points = array();
$points[] = $upperCorner[1];// top
$points[] = $upperCorner[0];// right
$points[] = $lowerCorner[1];// bottom
$points[] = $lowerCorner[0];// left
$isAllNumeric = true;
foreach ($points as $point) {
if (!is_numeric($point)) $isAllNumeric = false;
}
if ($isAllNumeric) {
$data['BBOX'] = $points;
}
}
} else {
// inna struktura xml'a
}
$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