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); } } ?>