Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Вывести JSON массив

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Google Map API - Polygon
pantela
Отправлено: 01 Октября, 2015 - 15:00:27
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010  


Помог: 1 раз(а)




Имееться JSON массив:
CODE (javascript):
скопировать код в буфер обмена
  1. [
  2.     {
  3.         "id":101,
  4.         "areaCoordinates":"(59.818935, 30.381947)(59.875672, 30.353451)(59.883597, 30.346928)(59.89152, 30.346098)"
  5.     },
  6.     {
  7.         "id":102,
  8.         "areaCoordinates":"(59.913644, 30.334597)(59.916139, 30.345411);(59.883597, 30.346928)(59.89152, 30.346098)"
  9.     },
  10. ]



Для id:101 надо вывести виде:
CODE (javascript):
скопировать код в буфер обмена
  1. var paths_101 = [
  2.     new google.maps.LatLng(59.818935, 30.381947),
  3.     new google.maps.LatLng(59.875672, 30.353451),
  4.     new google.maps.LatLng(59.883597, 30.346928),
  5.     new google.maps.LatLng(59.89152, 30.346098)
  6. ]
  7.  
  8. var shape = new google.maps.Polygon({
  9.     paths: paths_101,
  10.     strokeColor: '#ff0000',
  11.     strokeOpacity: 0.8,
  12.     strokeWeight: 1,
  13.     fillColor: '#ff0000',
  14.     fillOpacity: 0.25
  15. });



Для id:102 надо вывести виде (Внимание тут я в значение areaCoordinates разделил на 2 части через ";"):
CODE (javascript):
скопировать код в буфер обмена
  1. var paths_102_1 = [
  2.     new google.maps.LatLng(59.913644, 30.334597),
  3.     new google.maps.LatLng(59.916139, 30.345411)
  4. ]
  5.  
  6. var shape = new google.maps.Polygon({
  7.     paths: paths_102_1,
  8.     strokeColor: '#ff0000',
  9.     strokeOpacity: 0.8,
  10.     strokeWeight: 1,
  11.     fillColor: '#ff0000',
  12.     fillOpacity: 0.25
  13. });
  14.  
  15.  
  16. var paths_102_2 = [
  17.     new google.maps.LatLng(59.883597, 30.346928),
  18.     new google.maps.LatLng(59.89152, 30.346098)
  19. ]
  20.  
  21. var shape = new google.maps.Polygon({
  22.     paths: paths_102_2,
  23.     strokeColor: '#ff0000',
  24.     strokeOpacity: 0.8,
  25.     strokeWeight: 1,
  26.     fillColor: '#ff0000',
  27.     fillOpacity: 0.25
  28. });



Начал так, но повис...
CODE (javascript):
скопировать код в буфер обмена
  1. var json = (function () {
  2.     var json = null;
  3.     $.ajax({
  4.         'async': false,
  5.         'global': false,
  6.         'url': country_json.json,
  7.         'dataType': "json",
  8.         'success': function (data) {
  9.              json = data;
  10.          }
  11.     });
  12.     return json;
  13. })();
  14.  
  15. for (var i = 0, length = json.length; i < length; i++) {
  16.     ...
  17. }
 
 Top
Panoptik
Отправлено: 02 Октября, 2015 - 11:52:21
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




так а чего данные не однородные в массивах? почему в ид101 имеется 4 значения в скобках просто сконкатенированные, а в ид102 еще и точка с запятой встречается?
да и хранить набор координат в виде строки - извращение еще то

решить то такое можно с помощью костылей, но что-то не так с данными изначально


CODE (javascript):
скопировать код в буфер обмена
  1. var data = [
  2.     {
  3.         "id":101,
  4.         "areaCoordinates":"(59.818935, 30.381947)(59.875672, 30.353451)(59.883597, 30.346928)(59.89152, 30.346098)"
  5.     },
  6.     {
  7.         "id":102,
  8.         "areaCoordinates":"(59.913644, 30.334597)(59.916139, 30.345411);(59.883597, 30.346928)(59.89152, 30.346098)"
  9.     },
  10. ];
  11.  
  12. var i, j, k, paths, coords, item, coordsBatch, pairs;
  13.  
  14. for(i = 0; i < data.length; i++) {
  15.     item = data[i];
  16.     coordsBatch = item.areaCoordinates.split(';');
  17.     for(j = 0; j < coordsBatch.length; j++) {
  18.         pairs = coordsBatch[j].match(/([\d\.]+), ([\d\.]+)/g);
  19.         paths = [];
  20.         for(k = 0; k < pairs.length; k++) {
  21.              coords = pairs[k].split(', ');
  22.              paths.push(new google.maps.LatLng(coords[0], coords[1]);
  23.         }
  24.         var shape = new google.maps.Polygon({
  25.             paths: paths,
  26.             strokeColor: '#ff0000',
  27.             strokeOpacity: 0.8,
  28.             strokeWeight: 1,
  29.             fillColor: '#ff0000',
  30.             fillOpacity: 0.25
  31.         });
  32.     }
  33. }
  34.  


-----
Just do it
 
 Top
pantela
Отправлено: 05 Октября, 2015 - 20:44:55
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010  


Помог: 1 раз(а)




Это координаты полигона для Google Map API, их надо в таком виде хранить по координатам... (ну есть ещё вроде KML что ли... хз).

В ID 101, я для прим. указал один полигон с 4 точками координат, а в ID 102 я указал 2 полигона которые через точка с запятой... Не всегда может быть точка с запятой... (т.е. два полигона у одной записи...)

(Отредактировано автором: 05 Октября, 2015 - 22:20:24)

 
 Top
Viper
Отправлено: 05 Октября, 2015 - 21:01:06
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




pantela глядя на безобразие творящееся, а бы рекомендовал KML. По сути xml. Ибо что-то мне подсказывает, что если вы будете реализовывать разбор json на клиенте, то клиент будет негодовать ;)


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
pantela
Отправлено: 05 Октября, 2015 - 21:26:01
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010  


Помог: 1 раз(а)




негодовать - т.е. ?

И можно привести прим. KML просто данные у меня в БД храняться, т.е. от туда делать вывод в XML и так потом выводить всё...?

P.S. Кто подскажет откуда можно вытащить координаты? напр. помню давно когда вытаскивал из wikimap приходилось менять местами Lat Lng как бы наоборот там было...

(Отредактировано автором: 05 Октября, 2015 - 22:24:21)

 
 Top
Viper
Отправлено: 05 Октября, 2015 - 22:25:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




pantela пишет:
негодовать - т.е. ?
pantela пишет:
Не всегда может быть точка с запятой... (т.е. два полигона у одной записи...)
соответственно для гугла нужно приводить к одному формату. А делать на клиенте разбор JSON массивов чревато.
Кстати в каком виде у вас данные хранятся было бы неплохо увидеть.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
pantela
Отправлено: 05 Октября, 2015 - 22:41:38
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010  


Помог: 1 раз(а)




Данные в БД хряню так-же как и гуглу надо... Недовольство, огорчение
CODE (javascript):
скопировать код в буфер обмена
  1. (59.818935, 30.381947)(59.875672, 30.353451)(59.883597, 30.346928)(59.89152, 30.346098)
А чем плохо? нагрузка или...? Но я понимаю что очень много координат получаеться для точного покрития полигона...

(Отредактировано автором: 05 Октября, 2015 - 22:42:14)

 
 Top
pantela
Отправлено: 26 Октября, 2015 - 17:11:18
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010  


Помог: 1 раз(а)




спс.Ув.

(Отредактировано автором: 26 Октября, 2015 - 17:22:15)

 
 Top
pantela
Отправлено: 28 Октября, 2015 - 01:47:16
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010  


Помог: 1 раз(а)




Стоит проблема... Если в координатах есть минус, тогда появляеться ошибка... Огорчение
http://jsfiddle[dot]net/r080boft/2 - console.log можно увидеть...

Как я понял косяк тут pairs = coordsBatch[j].match(/"[\d\.]+","[\d\.]+"/g);
Зачем мне match() тут вобще не ясно, думаю можно через split разбить... Или наверное и $.each использовать Растерялся

(Отредактировано автором: 28 Октября, 2015 - 14:28:21)

 
 Top
Panoptik
Отправлено: 29 Октября, 2015 - 17:59:22
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




CODE (javascript):
скопировать код в буфер обмена
  1. var data = [
  2.     {
  3.         "id":101,
  4.         "areaCoordinates":"(59.818935, 30.381947)(59.875672, 30.353451)(59.883597, 30.346928)(59.89152, 30.346098)"
  5.     },
  6.     {
  7.         "id":102,
  8.         "areaCoordinates":"(59.913644, 30.334597)(59.916139, 30.345411);(59.883597, 30.346928)(59.89152, 30.346098)"
  9.     },
  10. ];
  11.  
  12. var i, j, k, paths, coords, item, coordsBatch, pairs;
  13.  
  14. for(i = 0; i < data.length; i++) {
  15.     item = data[i];
  16.     coordsBatch = item.areaCoordinates.split(';');
  17.     for(j = 0; j < coordsBatch.length; j++) {
  18.         pairs = coordsBatch[j].match(/([\-\d\.]+), ([\-\d\.]+)/g);
  19.         paths = [];
  20.         for(k = 0; k < pairs.length; k++) {
  21.              coords = pairs[k].split(', ');
  22.              paths.push(new google.maps.LatLng(coords[0], coords[1]));
  23.         }
  24.         var shape = new google.maps.Polygon({
  25.             paths: paths,
  26.             strokeColor: '#ff0000',
  27.             strokeOpacity: 0.8,
  28.             strokeWeight: 1,
  29.             fillColor: '#ff0000',
  30.             fillOpacity: 0.25
  31.         });
  32.     }
  33. }

(Добавление)
pantela пишет:
Как я понял косяк тут pairs = coordsBatch[j].match(/"[\d\.]+","[\d\.]+"/g);
если понял - почему не исправил?
pantela пишет:
Зачем мне match() тут вобще не ясно, думаю можно через split разбить... Или наверное и $.each использовать
можешь хоть посимвольным перебором разбирать свои данные, это твои проблемы
матч - максимально быстрый способ с точки зрения написал и забыл


-----
Just do it
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB