Вы здесь

Отображение всех пользователей на карте

0

Как проще создать карту на которой будут маркерами расположены пользователи, чтобы при нажатии на маркер переходить на профиль пользователя. Расположение должно определяться по ip без ручного введения адреса.

Пытался smartip + IP Geolocation Views & Maps + openlayers, но не получается добавить поле от smartip, не нахожу во вьюхе (relations пробывал )

Версия Drupal: 
7.x
Категория: 
Mapping
Вопрос задан 09.02.2015 - 12:33

ip должно определяться когда? в момент регистрации или в момент посещения?

Комментарий оставлен 10.02.2015 - 02:13

Ответы

2

Ну я вижу лёгкий кодинг. Только сразу оговорюсь. Определять местоположение пользователя и показывать его на карте, даже как город, это не совсем законно. Так что лучше стоит добавить галочку "Можно\нельзя" как на орге.

Суть такая. Вы либо добавляете поле выбора их местоположения в профиль при редактировании, либо вы его же добавляете но скрываете и автоматизируете заполнение.

Значит тут пригодится Geofield + Geofield Yandex.Maps (его можно по сути заменить чем угодно + небольшой модуль с геолокацией.

Тут ещё вот какой вариант, либо юзать HTML5 вариант, тогда место будет определятся проще, но будет клянчить у пользователя разрешение (но тут по сути сразу решается проблема с можно\нельзя показывать, ибо раз дал согласие, значит можно), либо по ip определять спец. сервисами через API. Дальше пишем координаты в geofield привязанный к профилю (и скрыть чтобы не мусолил глаза), затем создаем вьюху и выводим по полю. Вот только тут все они в одном месте будут, т.е. в одной точке, ведь будет выбран центр города, а как это решать не ясно.

Подведя итоги:
1. Делаем поле у юзера где будет храниться что-то, адрес или координаты.
2. Определяем координаты любым способом, если будем хранить адрес. Если сразу координаты в поле, пункт ненужен.
3. Выводим во Views.

Ответ дан 09.02.2015 - 12:52
Аватар пользователя Niklan
Niklan
445

smart ip клянчит в браузере, сайт международный, достаточно просто города (без детализации адреса).

Осталось понять как данные smartip внести в скрытое geofield?

Комментарий оставлен 09.02.2015 - 12:58

Например, альтерим форму изменения профиля, добааляем свою функцию к субммту. При субмите берём ip пользователя и получаем его координаты, записываем в наше поле geofield. Например можно использовать ipgeobase.ru он по ip возвращает город и, если не ошибюсь, его координаты. По крайней мере по адресу можно получить координаты у google api

/**
 * Get user location with service http://ipgeobase.ru/.
 *
 * @param string $ip
 * IP to locate.
 */
function MYMODULE_get_user_city_ipgeobase($ip = '127.0.0.1') {
  $request = drupal_http_request("http://ipgeobase.ru:7020/geo?ip={$ip}");
  $location = (array) simplexml_load_string($request->data);
  $user_city = $location['ip']->city;

  return $user_city;
}

В $location там должны быть и координаты.

Комментарий оставлен 09.02.2015 - 13:06