Найдите исполнителя для вашего проекта прямо сейчас!
Разместите заказ на фриланс-бирже и предложения поступят уже через несколько минут.

На сайте Достопримечательности мира http://wikisight.com/ (Самое интересное в мире) выводятся маркеры на карте. Их очень много, поэтому браузер тормозит, поскольку пытается их объединить в группы (желтые и синие кружочки на стороне браузера). Нужно сделать то же самое на стороне сервера. Код кластеризации PHP уже есть и вроде работает правильно, но нужно с ним разобраться и внедрить на сервер. 1/3 часть кода привожу ниже, чтобы программисту было видно, что код достаточно простой. Осталось его внедрить на сервер.

function.php 08.09.2014

1

2 $file = file_get_contents('json.txt');

3

4 $r = gps_arr_clusterization($file);

5

6 var_dump($r);

7

8 function gps_arr_clusterization($data, $radius = 20)

9 {

10 // Переводим в массив

11 $data = json_decode($data, true);

12

13 // Если json неверен либо нет данных - прекращаем работу функции

14 if(empty($data)) return false;

15

16 $newArray = array(); // Новый массив для отсортированного результата

17 $itemId = array(); // Идентификатор блоков

18

19 // Обходим массив с блоками данных(точки)

20

21 foreach($data['Item'] as $item)

22 {

23 /*

24 1. Обходим уже отсортированные данные и сравниваем, подходят ли

данные точки к существующей группе точек(какой либо).

25 2. Сравниваются градусы, а не киллометры. Нужен преобразователь.

26 3. Алгоритм такой:

27 если высота данной точки отличается от минимально существующей в

группе высоты не больше чем переменная $radius(в обе стороны. Меньше и

больше),

28 И ширина(так же), то добавляем в группу. Иначе создается новая

группа.

29

30 В результате этой обработки мы получаем квадрат(вместо радиуса,

т.е. круга. Так же нужно подправить).

31 Визуально понятно если на зошите поставить точку и от нее в каждый

угол отсчитать например 2 клетки.

32

33 А теперь описание переменных в цикле:

34

35 $item - координаты блока который мы сортируем. Т.е. это те данные

которые надо обработать

36 $claster - содержиться вся информация о группе точек которые уже

отформатированы. Включительно координаты minE и minN

37 которые значат наименьшие координаты в группе точек. Т.е. чтобы в

эту группу добавился новый блок, его точни должны быть в границе

38 с этими координатами. Детали как сравнивается описаны выше.

39 */

40

41 foreach($newArray as $key => $claster)

42 {

43 if(($item['E'] =

$claster['minE'] - $radius) and ($item['N']

$radius and $item['N'] >= $claster['minN'] - $radius))

44 {

45 // Ура, проверка прошла. Заполняем переменную ключем найденой

группы блоков(координат) для добавления в эту группу

46

47 $clasterKey = $key;

48 }

49 }

50

51 // Если группа найдена, то добавляем в нее

10 лет назад
andrush
39 летУкраина
16 лет в сервисе
Был
год назад
Заявки фрилансеров
Нет заявок фрилансеров