Доброе время суток.
Подскажите пожалуйста алгоритм для построения условия нахождения всех точек внутри выбранной области.
Я только смог до думаться до следующей мысли.
1. Находим центр фигуры по координатам.
lat_center = сумма всех lat поделенная на количество lng_center = сумма всех lng поделенная на количество
2. В цикле строю условие для координат
-
- $x_query = array();
- // строим условия для x
- foreach($x as $value){
- if (max($value,$x_center)==$value) {
- $x_query[] = "`t3`.`lat_ya` <= ".$value;
- } else {
- $x_query[] = "`t3`.`lat_ya` >= ".$value;
- }
- }
-
- $y_query = array();
- // строим условия для y
- foreach($y as $value){
- if (max($value,$y_center)==$value) {
- $y_query[] = "`t3`.`lng_ya` <= ".$value;
- } else {
- $y_query[] = "`t3`.`lng_ya` >= ".$value;
- }
- }
-
-
3. Далее строю запрос и получаю его
-
- SELECT *
- FROM `_perm_houses` as `t3`
- WHERE
- (
- `t3`.`lat_ya` >= 56.234189 AND
- `t3`.`lat_ya` >= 56.235627 AND
- `t3`.`lat_ya` <= 56.236925 AND
- `t3`.`lat_ya` <= 56.240583 AND
- `t3`.`lat_ya` <= 56.238459 AND
- `t3`.`lat_ya` >= 56.235348
- ) AND (
- `t3`.`lng_ya` <= 58.010264 AND
- `t3`.`lng_ya` >= 58.007918 AND
- `t3`.`lng_ya` >= 58.008186 AND
- `t3`.`lng_ya` >= 58.009228 AND
- `t3`.`lng_ya` <= 58.011346 AND
- `t3`.`lng_ya` <= 58.010509
- ) ;
-
-
Когда выделенная область прямоугольная и ее стороны параллельны осям координат, скажем так, он находит без проблем, а когда область более точно выделенная возникают проблемы.
Может есть какой алгоритм? Искал ни чего подобного не нашел.
За ранее благодарен.
______________________
Текст подготовлен в Редакторе Блогов от © SoftCoder.ru