Статьи

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

Возврат к списку


Текст сообщения*
Защита от автоматических сообщений
Облако тегов
API array CSS facebook IT-биографии JavaScript jQuery Microsoft microsoft MySQL PC php seo SQL ssl twitter апокалипсис баг база данных бизнес битрикс Битрикс браузер веб-ресурс векторная графика графика дизайн единорог жены программистов звук ЗОЖ инстаграмм интернет-магазин инфографика искусство истории ит картинки клиент компьютер конец света конференция кроссбраузерность лень массивы метод Верле музыка мысли мышь объявления ОС отдых отцы и дети парнас ай ти парнас айти передача данных подростки посмеяться правописание причины лени программирование программист продвижение проект размер страницы разметка разработка разработка интернет-магазина разработчик веб-систем распознавание звука реклама русский язык сайт семантическая разметка семинар сертификат сисадмин скорость загрузки сайта слушать создание сортировка социальные сети творчество тестирование умные мысли цитаты яндекс
Последние комментарии

Наши клиенты

Контакты

ООО "Парнас"

420111
г. Казань, ул. Пушкина 18

Телефон :
8-843-236-6001
8-499-550-6001

Почта :
mail@parnas-it.com


скачать реквизиты

Политика в отношении обработки персональных данных 0+ © 2012-2021 "Парнас-АйТи"