Возможно ли создать компонент для статистики использую геопозиционирование?

Тема в разделе "Программирование", создана пользователем nikolai_v, 23.10.2011.

  1. Offline

    nikolai_v Недавно здесь

    Регистрация:
    23.10.2011
    Сообщения:
    4
    Симпатии:
    0
    Пол:
    Мужской
    Здравствуйте!
    Интересует следующий вопрос: возможно ли создать компонент для Joomla, который бы вел статистику посещения сайта пользователями, определяя их местоположение и формируя базу данных (дополняя сведения, например JoomlaStats), использую сервисы геопозиционирования:

    Яндекс.Локатор
    http://api.yandex.ru/locator/doc/dg/concepts/about.xml
    Google Location Services
    http://code.google.com/intl/ru-RU/apis/gears/api_geolocation.html
    Wi2Geo Javascript API
    http://b2b.wi2geo.ru/geolocator/docs/#API

    Существует модуль "Visitors Google Map lite" показывает местоположение по IP посетителя, если я не ошибаюсь, т.е. просто город. Таким же образом работает http://www.ip2location.com. Интересуют более точные данные.

    На сайте http://samy.pl/mapxss есть ссылка "test the Location Services by clicking here", при нажатии на которую в FireFox появляется сообщение: "samy.pl хочет знать ваше местоположение" с предложением выбрать: "Сообщить местоположение" и "Не сообщать", после чего на ноутбуке (модуль WiFi установлен в ноутбуке, но подключение к интернету через GSM модем, не через WiFi) показывает на карте местоположение, в моем случае с погрешностью метров 50.
    Также можно посмотреть на сайте: http://grigorkin.ru/2010/03/opredelenie-mestopolozheniya-s-pomoshhyu-brauzera

    Может ли компонент самостоятельно собирать MAC адреса точек WiFi для дальнейшей обработки через Яндекс.Локатор? Или для этого необходимо устанавливать программы на компьютер (так работают "Агент@mail.ru", "Geosense", "Badoo Desktop")?

    Заранее благодарю за ответы.

    Информация:

    "Сегодня мы запускаем для публичного тестирования новый API-сервис – Яндекс.Локатор. C помощью этого программного интерфейса можно определить координаты мобильного устройства или ноутбука по идентификаторам WiFi и GSM сетей, в зоне действия которых он находится..."
    http://clubs.ya.ru/company/replies.xml?item_no=34348

    "Если вы согласитесь, Firefox соберёт информацию о ближайших точках беспроводного доступа и IP-адресе вашего компьютера. Затем Firefox отправит эту информацию провайдеру сервиса определения местоположения по умолчанию, а именно Google Location Services, чтобы определить ваше приблизительное местоположение. Эта информация о приблизительном местоположении отправляется
    на веб-сайт, пославший запрос..."

    http://www.mozilla.org/ru/firefox/geolocation/

    "Если устройство является настольным компьютером, без использования беспроводных соединений, то для определения местоположения компьютера используется его IP адрес, но в этом случае данные будут неточные. Для определения местоположения ноутбука или другого устройства беспроводной связи, Opera может дополнительно отправить следующие данные из ближайшей точки доступа:
    * MAC-address (уникальный идентификатор оборудования)
    * уровень сигнала (показывает как далеко вы находитесь)
    База данных известных Wi-fi точек доступа в совместно с уровнем сигнала может дать достаточно точную информацию о вашем местоположении. Точность данного метода в значительной мере зависит от концентрации известных точек доступа. Если устройство подключено к сети мобильного оператора, то данные о местоположении могут включать себя ячейки IDS близлежащей к вам базовой станции и уровень сигнала. Если ваше устройство поддерживает GPS, то местоположение может быть опеределено при помощи GPS..."

    http://help.opera.com/Mac/11.01/ru/geolocation.html

    "Safari позволяет вам контролировать, как и кому отправляется информация о вашем местонахождении. При посещении сайта, который может использовать данные о вашем местонахождении, Safari спрашивает вас, хотите ли вы ими поделиться. Вы можете выбрать вариант, при котором настройки для этого веб-сайта сохранятся в Safari на один день, а теперь вы можете также разрешать веб-сайтам получать доступ к информации о вашем местонахождении без предварительного запроса. Кроме того, вы можете запретить право доступа, не получая запроса. На панели «Конфиденциальность» в настройках Safari
    вы можете выбрать способ доступа веб-сайтов к службам определения местоположения..."

    http://www.apple.com/ru/safari/features.html

    "И еще одно нововведение стало доступно в Internet Explorer 9, это определение местоположения пользователя. Уж не знаю, почему разработчики хотели эту возможность (я регулярно получал вопрос о данной фиче во время наших событий), но теперь Internet Explorer 9, используя ваше IP (и, возможно, информацию из сети WiFi), сможет определить Ваше местоположение, используя специальную службу от Microsoft..."
    http://baydachnyy.com/2011/02/13/internet-explorer-9-geolocation/

    "Функция "Мое местоположение" повышает точность результатов поиска по адресам в Google , если такие сведения доступны. В браузере Internet Explorer 8 или более ранних версий функция "Мое местоположение" может отправлять сведения о вашем местоположении сторонним веб-сайтам при помощи API геопозиционирования W3C..."
    http://www.google.com/support/toolbar/bin/answer.py?hl=ru&answer=166104
     
  2.  
  3. Offline

    nikolai_v Недавно здесь

    Регистрация:
    23.10.2011
    Сообщения:
    4
    Симпатии:
    0
    Пол:
    Мужской
    Вот что на сегодняшний день мне удалось найти по данному вопросу.
    1. Метод геолокации работает при условии наличия и включенном состоянии устройства WiFi, соединение с сетью (кабель, USB модем, WiFi и др.) роли не играет. Точность определения очень высокая.
    2. Функцию navigator.geolocation поддерживают следующие браузеры: Firefox, Google Chrome, Opera, Safari, IE 9. Встроенная функция позволяет мониторить MAC адреса WiFi роутеров, окружающих пользователя. У браузеров наблюдается небольшое расхождение в определении координат.
    3. При установленной надстройке AlterGeoBHO Class будет работать во всех версиях IE (проверял на IE 6).
    Что интересно при установке «Mail.ru Агента» данная надстройка устанавливается автоматически, а узел «mail.ru» попадает в список узлов, имеющих права узнавать местонахождение пользователя.
    mail_ru.jpg
    При его удалении, через некоторое время он опять оказывается в этом списке.
    Имя: AlterGeoBHO Class
    Издатель: Wi2geo Ltd
    Файл: AlterGeo.BrowserPlugin.dll

    4. Описание использования функции navigator.geolocation можно найти на странице http://www.webatron.ru/node/55. Также на этом сайте, внизу страницы, есть пример работы.
    5. Здесь приведу 2 примера, которые удалось найти:
    5.1. С использованием карты Yandex
    5.2. С использованием карты Google


    5.1. Карта Yandex (иконки во вложенных файлах: loader.gif man.png wifi_icon.png )
    Код (html):
    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    2. <html xmlns="http://www.w3.org/1999/xhtml">
    3. <head>
    4.     <title>Пример использования Geolocation API.</title>
    5.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    6.     <script src="http://api-maps.yandex.ru/1.1/index.xml?key=AEMny0oBAAAAeeGxdAIApTBC9_reFDuwOxQpW1QbchZVuHIAAAAAAAAAAAD-0tGSj63Z9DN8IB4s37CTKsmiWQ==" type="text/javascript"></script>
    7.     <script type="text/javascript">
    8.         // Создание обработчика для события window.onLoad
    9.         YMaps.jQuery(function () {
    10.             // Создание экземпляра карты и его привязка к созданному контейнеру
    11.             var map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0]);
    12.  
    13.             // Установка для карты ее центра и масштаба
    14.             map.setCenter(new YMaps.GeoPoint(37.64, 55.76), 1);
    15.  
    16.             var toolBar = new YMaps.ToolBar();
    17.  
    18.             toolBar.add(new GeolocatorButton());
    19.             map.addControl(toolBar);
    20.         })
    21.  
    22.         // Реализует наследование прототипа без исполнения конструктора родителя
    23.         // Подробнее о наследовании: http://javascript.ru/tutorial/object/inheritance
    24.         function extend (child, parent) {
    25.             var c = function () {};
    26.             c.prototype = parent.prototype;
    27.             c.prototype.constructor = parent;
    28.             return child.prototype = new c();
    29.         };
    30.  
    31.         // Кнопка "Геолокатор"
    32.         function GeolocatorButton (content, options) {
    33.             // Переданный контент и параметры дополняем значениями по умолчанию
    34.             this.content = YMaps.jQuery.extend({}, this.defaultContent, content);
    35.             this.options = YMaps.jQuery.extend({}, this.defaultOptions, options);
    36.  
    37.             // Вызов родительского конструктора
    38.             YMaps.ToolBarButton.call(this, this.content.normal);
    39.         }
    40.  
    41.         var ptp = extend(GeolocatorButton, YMaps.ToolBarButton);
    42.  
    43.         // Содержимое кнопки по умолчанию
    44.         ptp.defaultContent = {
    45.             normal : {
    46.                 icon : 'wifi_icon.png',
    47.                 width : 20,
    48.                 hint : 'Определение координат с помощью Geolocation API'
    49.             },
    50.             active : {
    51.                 icon : 'loader.gif',
    52.                 width : 20,
    53.                 hint : 'Идет обработка запроса...'
    54.             }
    55.         };
    56.  
    57.         // Параметры кнопки по умолчанию
    58.         ptp.defaultOptions = {
    59.             notCentering : false,           // Не центрировать карту
    60.             noPlacemark : false,            // Не ставить метку
    61.             enableHighAccuracy : false,     // Режим получения наиболее точных данных
    62.             timeout : 10000,                // Максиальное время ожидания ответа (в милисекундах)
    63.             maximumAge : 1000,              // Максимальное время жизни полученных данных
    64.             style : {                       // Стиль для метки по умолчанию
    65.                 iconStyle : {
    66.                     href : "man.png",
    67.                     size : new YMaps.Point(27, 26),
    68.                     offset: new YMaps.Point(-10, -24)
    69.                 }
    70.             }
    71.         };
    72.  
    73.         // Ошибки
    74.         ptp.Errors = [
    75.             "permission denied",
    76.             "position unavailable",
    77.             "timeout"
    78.         ];
    79.  
    80.         // Вызывается при добавлении кнопки на карту
    81.         ptp.onAddToToolBar = function (toolBar, parentContainer, group) {
    82.             YMaps.ToolBarButton.prototype.onAddToToolBar.call(this, toolBar, parentContainer, group);
    83.  
    84.             // Указатель на карту
    85.             this.map = toolBar.getMap();
    86.  
    87.             // Проверка поддерживает ли браузер Geolocation API
    88.             if (navigator.geolocation) {
    89.                 this.geolocation = navigator.geolocation;
    90.  
    91.                 this.listener = YMaps.Events.observe(this, this.Events.Click, this.getPosition, this);
    92.             } else {
    93.                 this.hide();
    94.             }
    95.         };
    96.  
    97.         // Вызывается при удалении кнопки с карты
    98.         ptp.onRemoveFromToolBar = function () {
    99.             YMaps.ToolBarButton.prototype.onRemoveFromToolBar.call(this);
    100.  
    101.             this.listener.cleanup();
    102.  
    103.             if (this.placemark) {
    104.                 this.map.removeOverlay(this.placemark());
    105.                 this.placemark = null;
    106.             }
    107.  
    108.             this.listener = this.geolocation = this.content = this.options = this.map = null;
    109.         };
    110.  
    111.         // Получает местоположение пользователя
    112.         ptp.getPosition = function () {
    113.             var _this = this;
    114.  
    115.             // Смена внешнего вида кнопки
    116.             this.setContent(this.content.active);
    117.  
    118.             // Запрашиваем текущие координаты местоположения
    119.             this.geolocation.getCurrentPosition(
    120.  
    121.                 // Успешное завершение определения координат
    122.                 function (position) {
    123.  
    124.                     var coords = position.coords,
    125.                         point = new YMaps.GeoPoint(coords.longitude, coords.latitude);
    126.  
    127.                     _this.setContent(_this.content.normal);
    128.  
    129.                     // Смена центра карты
    130.                     if (!_this.options.notCentering) {
    131.                         _this.map.setCenter(point, 15);
    132.                     }
    133.  
    134.                     // Установка метки
    135.                     if (!_this.options.noPlacemark) {
    136.                         if (!_this.placemark) {
    137.                             _this.placemark = new YMaps.Placemark(point, {style : _this.options.style} );
    138.                             _this.map.addOverlay(_this.placemark);
    139.                         } else {
    140.                             _this.placemark.setGeoPoint(point);
    141.                         }
    142.  
    143.                         _this.placemark.setBalloonContent(point.toString());
    144.                     }
    145.  
    146.                     // Событие успешнего завершения
    147.                     YMaps.Events.notify(_this, "GeolocationLoad", point);
    148.                 },
    149.  
    150.                 // Вызывается, если во время определения координат произошли ошибки
    151.                 function (error) {
    152.                     _this.setContent(_this.content.normal);
    153.                     alert("Во время выполнения произошла ошибка: " + _this.Errors[error.code - 1]);
    154.                 },
    155.  
    156.                 this.options
    157.             );
    158.         };
    159.     </script>
    160. </head>
    161.  
    162. <body>
    163.     <div id="YMapsID" style="width:600px;height:400px"></div>
    164. </body>
    165.  
    166. </html>


    5.2. Карта Google
    Код (html):
    1. <html><head><title>Геолокация</title>
    2.     <script src="http://www.google.com/jsapi?key=ABQIAAAAE832vXBnYzPJQygTlSp3lRT1HRZhlcqU_c8GpWgFFmzOYQpfPBQpN_lj_MffQ2zwIrSjyHYTFGq1NQ" type="text/javascript"></script>
    3.     <script type="text/javascript">
    4.       google.load("jquery", "1.3.2");
    5.       google.load("maps", "2.x");
    6.     </script>
    7.     <script type="text/javascript">
    8.     // <![CDATA[
    9.    var map = null;
    10.    var overlay = null;
    11.     var geo = null;
    12.  
    13. function st()
    14. {
    15.    var g = {
    16.        initialize: function() {
    17.            map = new GMap2(document.getElementById("map"));
    18.            map.setCenter(new GLatLng(34.1072998047,-118.371902466), 10);
    19.            map.addControl(new GSmallMapControl());
    20.            map.addControl(new GMapTypeControl());
    21.        },
    22.        getCircleOverlay: function(lat, lon, err) {
    23.            with (Math) {
    24.                var points = Array();
    25.                var d = err/6378800;// accuracy / meters of Earth radius = radians  
    26.                var lat1 = (PI/180)* lat; // radians
    27.                var lng1 = (PI/180)* lon; // radians
    28.                for (var a = 0 ; a < 361 ; a+=10 ) {
    29.                    var tc = (PI/180)*a;
    30.                    var y = asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc));
    31.                    var dlng = atan2(sin(tc)*sin(d)*cos(lat1),cos(d)-sin(lat1)*sin(y));
    32.                    var x = ((lng1-dlng+PI) % (2*PI)) - PI ; // MOD function
    33.                    var point = new GLatLng(parseFloat(y*(180/PI)),parseFloat(x*(180/PI)));
    34.                    points.push(point);
    35.                }
    36.            }
    37.            return new GPolygon(points,'#0000ff',1,1,'#0000ff',0.2)
    38.        },
    39.        zoomLevel: function(a, step) {
    40.            step++;
    41.            map.setCenter(new GLatLng(a.coords.latitude, a.coords.longitude), step);
    42.            if (step > 14) return;
    43.            window.setTimeout(function() { geo.zoomLevel(a, step) }, 250);
    44.        },
    45.        setMap: function(a) {
    46.            var zoomLevel = 14;
    47.            if (a.coords.accuracy > 500)
    48.                zoomLevel = 10;
    49.            map.setCenter(new GLatLng(a.coords.latitude, a.coords.longitude), zoomLevel);
    50.        //    if (overlay) map.removerOverlay(overlay);
    51.            overlay = geo.getCircleOverlay(a.coords.latitude, a.coords.longitude, a.coords.accuracy);
    52.            map.addOverlay(overlay);
    53.             $('#js-return').innerHTML = '';
    54.            $('#js-return').html('<h2>'+map.getCenter()+'</h2>');
    55.        },
    56.        setMap2: function(lat, lon, acc) {
    57.            var zoomLevel = 15;
    58.            if (acc> 500)
    59.                zoomLevel = 10;
    60.             map.setCenter(new GLatLng(lat, lon), zoomLevel);
    61.            //if (overlay) map.removerOverlay(overlay);
    62.            overlay = geo.getCircleOverlay(lat, lon, acc);
    63.            map.addOverlay(overlay);
    64.             $('#js-return').innerHTML = '';
    65.            $('#js-return').html('<h2>'+map.getCenter()+'</h2>');
    66.        },
    67.        handleError: function(a) {
    68.        },
    69.        locateMeOnMap: function() {
    70.            navigator.geolocation.getCurrentPosition(this.setMap, this.handleError);
    71.        }
    72.    }
    73.     return g;
    74. }
    75.  
    76.     geo = st();
    77.    $(document).ready(function() {
    78.         geo.initialize();
    79.         geo.setMap2(0, 0, 0);
    80.    });
    81.    // ]]>
    82.     </script>
    83. </head>
    84. <body>
    85. <a href="#" onclick="geo=st();geo.locateMeOnMap();return false;">Определить местоположение</a>.
    86.     <div id="js-return"></div>
    87.     <div id="js">
    88.       <div id="geo">
    89.         <div id="map" style="position:absolute;width:500px;height:400px;"></div>
    90.       </div>
    91.     </div>
    92. <script type="text/javascript">
    93. var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
    94. document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
    95. </script>
    96. <script type="text/javascript">
    97. try {
    98. var pageTracker = _gat._getTracker("UA-6127617-2");
    99. pageTracker._trackPageview();
    100. } catch(err) {}</script>
    101.  
    102. </body>
    103. </html>
     
  4. Offline

    nikolai_v Недавно здесь

    Регистрация:
    23.10.2011
    Сообщения:
    4
    Симпатии:
    0
    Пол:
    Мужской
    При доработке, следующий пример, возможно, пригодится для автоматического заполнения формы адреса доставки для интернет магазинов.
    http://davidwalsh.name/dw-content/geolocation.php
     

Поделиться этой страницей

Загрузка...