Форум русской поддержки Joomla!® CMS
04.12.2016, 18:24:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Карта Googlе Map в сообщениях форума Kunena 3.0.5

 (Прочитано 1036 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Lesha_K
Осваиваюсь на форуме
***

Репутация: +8/-0
Offline Offline

Сообщений: 134


« : 16.06.2014, 13:26:55 »

Была вот такая тема: http://joomlaforum.ru/index.php?topic=184803.0

Я не стал ее продолжать, так как она была озаглавлена "...Kunena 1.6"
По вставке карты в сообщение вопросов нет, как и нет вопросов, что прописывать между терами [map].
Но вот даже в свежей версии 3.0.5, вставляемая в сообщение карта носит жуткую ущербность. Во первых - это древняя версия Google мап, где в большей части городов России, не хватает улиц, по сравнению с новыми версиями Гугл-карт. Соответственно, не возможно проставить реальную "адресную" точку на карте.
Но это пол беды.
Основная беда в том, что подгружаемая Куненой карта, патологически криво работает с координатами, вписанными между терами. (Карта понимает координаты формата 44.ххххх 39.ххххх). Точка то ставится, но отображается она не реально, а привязывается к наиболее близкому, "известному" этой карте пункту - городу, селу, трассе. То есть - пшик полный.
Существует масса форумов на базе Kunena, туристических, для путешественников, велосипедистов, джиперов и т.п, где данный вопрос с точностью отображения (и нормальной картой!) очень актуален. Не говоря уже о возможности вставки в сообщения  Гугл-треков.
В сети болтается много аналогичных вопросов, но нет ни одного ответа.
Возможно ли заменить существующую карту, на актуальные, "правильные" версии, прописав ее вместо дефолтной?
« Последнее редактирование: 16.06.2014, 13:49:04 от Lesha_K » Записан
Lesha_K
Осваиваюсь на форуме
***

Репутация: +8/-0
Offline Offline

Сообщений: 134


« Ответ #1 : 16.06.2014, 14:15:32 »

Нашёл в libraries/ kunena/ bbcode  начиная со стороки 1058 "прописку" дефолтной карты:
Цитировать
   // Display only link in activity streams etc..
      if (!empty($bbcode->parent->forceMinimal) || !($document instanceof JDocumentHTML)) {
         $url = 'https://maps.google.com/?q='.urlencode($bbcode->UnHTMLEncode($content));
         return '<a href="'.$url.'" rel="nofollow" target="_blank">'.$content.'</a>';
      }

      if ($id === false) {
         $document->addScript('http://maps.google.com/maps/api/js?sensor='.($sensor == true ? 'true' : 'false'));
         $id = 0;
      }

      $id ++;
      $mapid = 'kgooglemap'.$id;

      $map_type = isset($params ['type'])? strtoupper($params ["type"]): 'ROADMAP';
      $map_typeId = array('HYBRID','ROADMAP','SATELLITE','TERRAIN');
      if ( !in_array($map_type, $map_typeId) ) $map_type = 'ROADMAP';
      $map_zoom = isset($params ['zoom'])? (int) $params ['zoom']: 10;
      $map_control = $params ['control'] ? (int) $params ['control'] : 0;

      $document->addScriptDeclaration("
      // <![CDATA[
         var geocoder;
         var $mapid;

         window.addEvent('domready', function() {
            geocoder = new Google.maps.Geocoder();
         var latlng = new Google.maps.LatLng(37.333586,-121.894684);
         var myOptions = {
            zoom: $map_zoom,
            disableDefaultUI: $map_control,
            center: latlng,
            mapTypeId: Google.maps.MapTypeId.$map_type
         };
         $mapid = new Google.maps.Map(document.id('".$mapid."'), myOptions);

         var address = ".json_encode($content).";
         if (geocoder) {
            geocoder.geocode( { 'address': address}, function(results, status) {
            if (status == Google.maps.GeocoderStatus.OK) {
               $mapid.setCenter(results[0].geometry.location);
               var marker = new Google.maps.Marker({
                  position: results[0].geometry.location,
                   map: $mapid
               });
            } else {
               var contentString = '<p><strong>".JText::_('COM_KUNENA_GOOGLE_MAP_NO_GEOCODE', true)." <i>".json_encode(addslashes($content))."</i></strong></p>';
               var infowindow$mapid = new Google.maps.InfoWindow({ content: contentString });
                  infowindow$mapid.open($mapid);
            }
            });
         }
         });

      // ]]>"
      );

Какие сделать изменения, чтобы загружалась актуальная версия?
Записан
Lesha_K
Осваиваюсь на форуме
***

Репутация: +8/-0
Offline Offline

Сообщений: 134


« Ответ #2 : 16.06.2014, 16:45:09 »

Продолжаю борьбу с кривой картой. Пришёл к выводу, что собака покопалась вот именно в этой строчке:

maps.google.com/maps/api/js?sensor='.($sensor == true ? 'true' : 'false'));

Kunena использует безключевую, версию гугл-мап, от сего и ущербность.
Вот как выглядит эта строка в рекомендациях от картографического сервиса Гугл:
maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&sensor=SET_TO_TRUE_OR_FALSE">

Как я понимаю, для использования нормальной карты, надо использовать бесплатный API-ключ от Google.
Подробнее тут: ссылка
Причём, что интересно, при использовании соответствующего ключа, можно вставлять весь спектр приложений Google этого направления - Google энджен, Гугл-трек, и т.п. (см. список ключей на их страничке).
Остается как-то нормально вписать это в файл bbcode.php, где все танцы вокруг карты начинаются с 1058 строчки.
Я совершенно беспомощен в PHP, но буду пробовать. Буду признателен за помощь.

Записан
Lesha_K
Осваиваюсь на форуме
***

Репутация: +8/-0
Offline Offline

Сообщений: 134


« Ответ #3 : 16.06.2014, 20:08:06 »

Нет, проблема не в этом. Оперируя различными ссылками с API Google, я научился привязывать к  кнопке "Карта" в редакторе, другие карты.
Но проблема осталась. Маркер не точно отображается по заданным координатам, убегая к населенным пунктам или трассам.
Почитав сеть, просмотрев код, обнаружил, что в нём вообще не прописано отображение такой точки. А прописана библиотека геокодера, которая преобразует адрес вписанный между терами map в точку на подгружаемой карте. Но геокодер и играет обратную, злую шутку. При внесении между терами именно координат, он в конечном итоге отображает на карте не реальную метку, а привязывает ее к наиболее близкому, известному библиотеке геокодера объекту.
Так же, в той части кода, которая отвечает за нанесение маркера на подгружаемую в сообщение карту, нет ни строчки об отображении точки с заданными пользователем между терами координатами. Вывод - код надо править и дописывать.
Вообще - не солидно. При всём функционале Kunena, иметь такую карту, на которой можно ставить маркеры только в населенных пунктах.  Да и функционал кнопки "карта" - плачевен. Зачем мучать пользователя вписанием (читай - экспериментами) между терами map? Не ужели нельзя было сделать вполне удобные окошки, как по кнопке "ссылка"?! В одном ввод координат/адреса, во втором - название метки, к примеру.
Записан
ChaosHead
Moderator
*****

Репутация: +381/-10
Offline Offline

Пол: Мужской
Сообщений: 4385



« Ответ #4 : 18.06.2014, 14:51:55 »

Немного поясню. Функционал карт таков, что написав [map]moscow[/map] пользователь получает карту Москвы. Без всяких ключей и лишних действий. Вот и весь функционал.
Записан
Lesha_K
Осваиваюсь на форуме
***

Репутация: +8/-0
Offline Offline

Сообщений: 134


« Ответ #5 : 19.06.2014, 00:29:58 »

Ну что вы, не соглашусь. На карте можно ставить адресные точки. К примеру, написав [map] Краснодар ул. Северная 210[/map] Мы получим карту Краснодара, с маркером на доме №210 по ул. Северной. Причем не важно, на каком языке. Хоть арабской вязью.
Тоже самое произойдет, если мы введем координаты этого дома, например, из навигатора [map]44.ххххх 39.ххххх[/map].



Для этого в файле bbcode и прописано обращение к библиотеке Google Геокодер.
« Последнее редактирование: 19.06.2014, 00:39:42 от Lesha_K » Записан
ChaosHead
Moderator
*****

Репутация: +381/-10
Offline Offline

Пол: Мужской
Сообщений: 4385



« Ответ #6 : 19.06.2014, 09:53:54 »

Нужен конкретный пример координат где карта уезжает.
Я не знаком с этим API, но меня смущает.
center: latlng
скорее всего там возможно указывать центр карты.
Записан
Lesha_K
Осваиваюсь на форуме
***

Репутация: +8/-0
Offline Offline

Сообщений: 134


« Ответ #7 : 19.06.2014, 14:13:31 »

center: latlng
Это строчка определяет центр отображаемой в сообщении карты, его координаты по умолчанию:
var latlng = new Google.maps.LatLng(37.333586,-121.894684); (Команда открыть новую карту Google с координатами центра ....)
Latitude Longitude (latlng) это принятое обозначение широты/долготы, выражаемое в цифровых значениях разных форматов.
В данном случае это Сан-Хосе. Такая карта в сообщении отображается, если между терами [map] ничего не вписано (нужно же задать понятие, что отображать в данном случае).
Теперь о примерах.
Вот фрагмент интерактивной карты мест падений самолётов ВОВ в Краснодарском крае,  на базе модуля Phoca Maps, который загружает стандартную карту Google, и позволяет размещать на ней маркеры с описанием.



Пардон, под руку попался немецкий самолёт, ну да бог с ним.



В окошке, вверху, есть выделенные зеленым координаты. Именно и они введены в характеристики точки для этой карты и модуля.
Как видим в двух скринах выше, точка находится на крутом склоне горы, выше села Красное, в абсолютно реальном месте.

Теперь вводим эти же координаты в сообщение форума Kunena, кнопкой "Карта", в том же формате [map]44.14772 39.15444[/map]
И вот что получаем в отправленном сообщении:



Как видно, точка убежала прямо на трассу, к окраине села. И так происходит с любыми координатами, если они не относятся к дороге, трассе, населенному пункту. Любая точка в лесу, поле, горах, сразу убегает к населенному пункту или трассе.

Для сравнения, открываем разобычный Google мапс, вводим в поиске те же координаты: 44.14772 39.15444



Получаем точку и маркер, совершенно на правильном месте.

Вывод однозначен. В Куненовской карте, что-то не дописано. Об этом я писал выше.



« Последнее редактирование: 19.06.2014, 14:43:44 от Lesha_K » Записан
Lesha_K
Осваиваюсь на форуме
***

Репутация: +8/-0
Offline Offline

Сообщений: 134


« Ответ #8 : 19.06.2014, 14:35:44 »

О! Мысль. Сейчас я просмотрю php модуля Phoca Maps.  Допустим, даже по последнему скрину-примеру видно, что на стандартной Google мапс, идет преобразование вводимых координат формата DDD (49.хххххх) в формат DMS (ddd°mm'ss.ss"), что отображается рядом с маркером. Но никак не в адрес. (Что делает вписанная в кунена-карту библиотека Геокодера).
Записан
ChaosHead
Moderator
*****

Репутация: +381/-10
Offline Offline

Пол: Мужской
Сообщений: 4385



« Ответ #9 : 19.06.2014, 22:51:37 »

Я создал тему на офф форуме www.kunena.org/forum/kunena-3-0-support/131003-maps-problem
Записан
Lesha_K
Осваиваюсь на форуме
***

Репутация: +8/-0
Offline Offline

Сообщений: 134


« Ответ #10 : 20.06.2014, 00:35:25 »

Спасибо, мысли читаете. Я и хотел вас об этом попросить, зная, что вы там работаете.
Со своей стороны, продолжаю борьбу именно с php. Потому что совершенно ясно, что в таком отображении точки "виноваты" именно несколько строк прописки и обращению к библиотеке гугл-геокодера.
К примеру, вставьте координаты из постов выше (44.14772 39.15444) в "идеальный" геокодер от Гугла:
http://gmaps-samples.googlecode.com/svn/trunk/geocoder/singlegeocode.html
И получим ту же самую точку на трассе, вместо точки на горе.
Записан
XaNoy
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 1


« Ответ #11 : 09.06.2015, 21:03:32 »

Решение проблемы нашлось?
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet