pnd8_rasp/app/engine/www/modules/site_index.php

106 lines
2.9 KiB
PHP

<?php
class site_index extends module {
public $apiKey = '660e8ed3-a21d-4a59-9403-f315dc8aa211';
public $suggestKey = '1749711d-e092-4206-ae0a-a332c44d8cb0';
public $templBlade = 'site_index';
public $_get_vars = ['act', 'doc_id'];
public $_post_vars = ['act', 'coords', 'polygon_id'];
function _on_() {
global $blade;
$data = [];
$data['apikey'] = $this->apiKey;
$data['suggest_apikey'] = $this->suggestKey;
$obj = new cobject('pnd_zone_geometry');
// полигоны
$db2 = $obj->getDB()->q($obj->getSelectEx('id, zone_id, ASTEXT(`geom`) as `geom`, color '));
while($db2->nr()) {
$coords = $this->mysql2json($db2->f('geom'));
$row = [];
$row['coords'] = $coords;
$row['id'] = $db2->f('id');
$row['zone_id'] = $db2->f('zone_id');
$row['color'] = $db2->f('color');
$data['rows'][] = $row;
}
return $blade->run($this->getBladeTempl('main'), $data);
}
function _on_getInfo()
{
global $blade;
$data = [];
$polyObj = new cobject('pnd_zone_geometry');
$polygon_id = intval($this->polygon_id);
if ($polygon_id == 0) {
$coords = $this->coords;
if (!empty($this->coords)) {
// Ищем полигон по координатам
$lat = floatval($coords[0]);
$lon = floatval($coords[1]);
$db2 = $polyObj->getDB()->q($polyObj->getSelectEx('id', " AND ST_WITHIN(GeomFromText('POINT( " . $lat . " " . $lon . ")'), `geom`) "));
if ($db2->nr()) {
$polygon_id = $db2->f('id');
}
}
}
$polyObj->byId($polygon_id);
$zone_id = $polyObj->get('zone_id');
$zoneObj = new cobject('pnd_zones');
$zoneObj->byId($zone_id);
if (!$zoneObj->id) {
return $blade->run($this->getBladeTempl('zone_not_found'));
}
$data['zone_name'] = $zoneObj->get('title');
$doctorObj = new cobject('pnd_doctors');
$db2 = $doctorObj->getDB()->q($doctorObj->getSelect(' AND `zone_id` = ' . intval($zone_id)));
while($db2->nr()) {
$data['doctors'][] = $db2->getRow();
}
return $blade->run($this->getBladeTempl('data'), $data);
}
public function mysql2json($str) {
// POLYGON((59.94778267548529 30.047386140625,60.12503918773836 30.468986482421876,59.92986664045532 30.963371248046883,59.84083181279909 30.456626863281247,59.960180395813275 30.38933560351563,59.94778267548529 30.047386140625))
preg_match_all('/POLYGON\(\((.*?)\)\)/', $str, $arr);
$points = explode(',', $arr[1][0]);
foreach($points as $point) {
$ret[0][] = explode(' ', $point);
}
return json_encode($ret);
}
}
?>