Статьи
18.08.2014
PHP:
function inPolygon(array $point, array $polygon) {
/** функция определения вхождения гео точки в гео полигон с помощью функционала mysql */
/** @var array $point = array(0 => float latitude, 1 => float longitude) */
/** @var array $polygon = array(array(0 => float latitude, 1 => float longitude), array(0 => float latitude, 1 => float longitude), ....) */
/** @global CDatabase $DB */
global $DB;
if(count($polygon) < 3 || empty($DB) || !is_float($point[0]) || !is_float($point[1])) return false; /** валидация параметров */
$return = false;
/** преобразование массива полигона в формат строки понятный для mysql */
foreach($polygon as &$poly) {
if(!is_float($poly[0]) || !is_float($poly[1])) return false; /** валидация параметров */
$poly = implode(" ", $poly);
}
$polygon = implode(",", $polygon);
/** преобразование массива точки в формат строки понятный для mysql */
$point = implode(" ", $point);
/** задаем @g1 геометрический объект полигона mysql из строки */
$DB->Query("SET @g1 = PolygonFromText('Polygon((" . $polygon . "))')");
/** задаем @g1 геометрический объект точки mysql из строки */
$DB->Query("SET @g2 = PointFromText('Point(" . $point . ")')");
/** MBRIntersects возвращает 1 или 0 в зависимости от того пересекаются ли геом объекты @g1 и @g2 */
$query = $DB->Query("SELECT MBRIntersects(@g1,@g2)");
if($result = $query->Fetch()) {
$return = (bool) $result;
}
return $return;
}
Output:
function inPolygon(array $point, array $polygon) {
/** функция определения вхождения гео точки в гео полигон с помощью функционала mysql */
/** @var array $point = array(0 => float latitude, 1 => float longitude) */
/** @var array $polygon = array(array(0 => float latitude, 1 => float longitude), array(0 => float latitude, 1 => float longitude), ....) */
/** @global CDatabase $DB */
global $DB;
if(count($polygon) < 3 || empty($DB) || !is_float($point[0]) || !is_float($point[1])) return false; /** валидация параметров */
$return = false;
/** преобразование массива полигона в формат строки понятный для mysql */
foreach($polygon as &$poly) {
if(!is_float($poly[0]) || !is_float($poly[1])) return false; /** валидация параметров */
$poly = implode(" ", $poly);
}
$polygon = implode(",", $polygon);
/** преобразование массива точки в формат строки понятный для mysql */
$point = implode(" ", $point);
/** задаем @g1 геометрический объект полигона mysql из строки */
$DB->Query("SET @g1 = PolygonFromText('Polygon((" . $polygon . "))')");
/** задаем @g1 геометрический объект точки mysql из строки */
$DB->Query("SET @g2 = PointFromText('Point(" . $point . ")')");
/** MBRIntersects возвращает 1 или 0 в зависимости от того пересекаются ли геом объекты @g1 и @g2 */
$query = $DB->Query("SELECT MBRIntersects(@g1,@g2)");
if($result = $query->Fetch()) {
$return = (bool) $result;
}
return $return;
}
function inPolygon(array $point, array $polygon) {
/** функция определения вхождения гео точки в гео полигон с помощью функционала mysql */
/** @var array $point = array(0 => float latitude, 1 => float longitude) */
/** @var array $polygon = array(array(0 => float latitude, 1 => float longitude), array(0 => float latitude, 1 => float longitude), ....) */
/** @global CDatabase $DB */
global $DB;
if(count($polygon) < 3 || empty($DB) || !is_float($point[0]) || !is_float($point[1])) return false; /** валидация параметров */
$return = false;
/** преобразование массива полигона в формат строки понятный для mysql */
foreach($polygon as &$poly) {
if(!is_float($poly[0]) || !is_float($poly[1])) return false; /** валидация параметров */
$poly = implode(" ", $poly);
}
$polygon = implode(",", $polygon);
/** преобразование массива точки в формат строки понятный для mysql */
$point = implode(" ", $point);
/** задаем @g1 геометрический объект полигона mysql из строки */
$DB->Query("SET @g1 = PolygonFromText('Polygon((" . $polygon . "))')");
/** задаем @g1 геометрический объект точки mysql из строки */
$DB->Query("SET @g2 = PointFromText('Point(" . $point . ")')");
/** MBRIntersects возвращает 1 или 0 в зависимости от того пересекаются ли геом объекты @g1 и @g2 */
$query = $DB->Query("SELECT MBRIntersects(@g1,@g2)");
if($result = $query->Fetch()) {
$return = (bool) $result;
}
return $return;
}
Output:
function inPolygon(array $point, array $polygon) {
/** функция определения вхождения гео точки в гео полигон с помощью функционала mysql */
/** @var array $point = array(0 => float latitude, 1 => float longitude) */
/** @var array $polygon = array(array(0 => float latitude, 1 => float longitude), array(0 => float latitude, 1 => float longitude), ....) */
/** @global CDatabase $DB */
global $DB;
if(count($polygon) < 3 || empty($DB) || !is_float($point[0]) || !is_float($point[1])) return false; /** валидация параметров */
$return = false;
/** преобразование массива полигона в формат строки понятный для mysql */
foreach($polygon as &$poly) {
if(!is_float($poly[0]) || !is_float($poly[1])) return false; /** валидация параметров */
$poly = implode(" ", $poly);
}
$polygon = implode(",", $polygon);
/** преобразование массива точки в формат строки понятный для mysql */
$point = implode(" ", $point);
/** задаем @g1 геометрический объект полигона mysql из строки */
$DB->Query("SET @g1 = PolygonFromText('Polygon((" . $polygon . "))')");
/** задаем @g1 геометрический объект точки mysql из строки */
$DB->Query("SET @g2 = PointFromText('Point(" . $point . ")')");
/** MBRIntersects возвращает 1 или 0 в зависимости от того пересекаются ли геом объекты @g1 и @g2 */
$query = $DB->Query("SELECT MBRIntersects(@g1,@g2)");
if($result = $query->Fetch()) {
$return = (bool) $result;
}
return $return;
}
Облако тегов
Последние комментарии
Наши клиенты
Контакты
ООО "Парнас"
420111
г. Казань, ул. Пушкина 18
Телефон :
8-843-236-6001
8-499-550-6001
Почта :
mail@parnas-it.com