Nano Hash - криптовалюты, майнинг, программирование

Нужна помощь по Google Maps API 3

Я использую Google Maps API 3 для своего приложения.

Итак, что я хочу сделать, это следующее. При загрузке страницы я получу массив позиций в таком формате:

var locations = [
  ['Bondi Beach', -33.890542, 151.274856, 4],
  ['Coogee Beach', -33.923036, 151.259052, 5],
  ['Cronulla Beach', -34.028249, 151.157507, 3],
  ['Manly Beach', -33.80010128657071, 151.28747820854187, 2],
  ['Maroubra Beach', -33.950198, 151.259302, 1]
];

Сначала я хочу добавить маркер к каждой из этих позиций.

var marker, i;

    for (i = 0; i < locations.length; i++) {  
      marker = new google.maps.Marker({
        position: new google.maps.LatLng(locations[i][1], locations[i][2]),
        map: map
      });

Изображение, которое идет на маркер:

var image = new google.maps.MarkerImage("images/truck3.png",
        new google.maps.Size(32.0, 37.0),
        new google.maps.Point(0, 0),
        new google.maps.Point(16.0, 18.0)
    );
  var shadow = new google.maps.MarkerImage("images/shadow-truck3.png",
        new google.maps.Size(51.0, 37.0),
        new google.maps.Point(0, 0),
        new google.maps.Point(16.0, 18.0)
    );

  var marker = new google.maps.Marker({
    position: map.getCenter(),
    map: map,
    icon: image,
    shadow: shadow,
    title: 'Click to zoom'
  });

И это должно увеличить все маркеры, которые инициализированы в центре экрана, но только один раз в начале, позже центр не используется, так как пользователь может ловить рыбу, чтобы посмотреть что-то еще на карте.

Я хочу, чтобы маркеры все время двигались, поэтому, может быть, мне нужно добавить какой-нибудь обработчик событий, чтобы все время получать новую позицию?

Затем наступает часть, когда вы нажимаете на маркер, вы увеличиваете масштаб, а маркер все еще движется (получая новую позицию), но теперь мне нужно использовать этот идентификатор, который я отправлю в массив php, чтобы я мог вызвать некоторую функцию php с этим параметром .

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

Часть с щелчком:

 google.maps.event.addListener(marker, 'click', function() {
    map.setZoom(13);
    map.setCenter(marker.getPosition());
    google.maps.event.addListener(map, 'center_changed', function() {
    // 1 seconds after the center of the map has changed, pan back to the
    // marker.
    window.setTimeout(function() {
      map.panTo(marker.getPosition());
    }, 1000);
  });
  });
}

В общем, я рассказал вам все, чего хочу добиться. Я уверен, что многие из вас сделали то же самое. Это часть кода из многих источников, которые мне нужны, чтобы заставить их работать вместе и добавить несколько небольших новых функций, как я писал выше.

Спасибо


  • Может быть, там много текста, но я думаю, что запрос довольно маленький, если вы знаете, что делаете :) 08.06.2012
  • Дублирование вашего вопроса: stackoverflow.com/q/10931109/1314132. Пожалуйста, взгляните на новое редактирование, которое я добавил к последним изменениям в вашем исходном вопросе, и посмотрите, поможет ли это. Не усложняю вам задачу, но имеет больше смысла внести ясность в исходный вопрос, а не создавать дубликат вопроса с дополнительной ясностью. 08.06.2012
  • Я думаю, что здесь слишком много бесплатной помощи (не считая дублирования другого вопроса вместо его уточнения). 1: Приблизьтесь к маркерам. 2: периодически обновлять. 3: Щелчок маркером или кнопкой, или и то, и другое [недостаточно данных, чтобы понять, что вы хотите здесь]. Каждый из них следует задавать последовательно в отдельных вопросах, основываясь на том, что было сделано ранее, и показывая, какой код вы пробовали для достижения цели. 11.06.2012
  • Может ли кто-нибудь дать мне представление о том, как заставить приведенный ниже код работать при получении массива (широта, долгота, серийный_номер), поскольку этот код работает для некоторых других значений. У меня будет php, который вернет мне формат json, как в этом коде. но только мне нужно и id маркера иметь серийный номер. Любой ответ - хороший ответ! пожалуйста, помогите, и вы можете получить 100 баллов 14.06.2012

Ответы:


1

Таким образом, похоже, что вы извлекаете переменную locations с запросом к базе данных, повторяющимся каждые несколько секунд. В этой демонстрации я использую JSON для получения данных и обновления местоположения или создания маркера, если он еще не существует.

http://freezoo.alwaysdata.net/truck2.html

    function updateTrucks() {
      $.ajax({
        url: "gettruck.php",
        cache: false,
        dataType: 'json',
        data: {},
        error: function(jqxhr, textStatus, errorThrown) {
          alert("Error: " + textStatus + " " + errorThrown);
        },
        success: function(data) {
        for(var i = 0; i < data.results.length; i++) {
          if(trucks.hasOwnProperty(data.results[i].id)) {
            // update position
            trucks[data.results[i].id].setPosition(new google.maps.LatLng(
              parseFloat(data.results[i].lat),
              parseFloat(data.results[i].lng)));
            trucks[data.results[i].id].speed = data.results[i].speed;
          }
          else {
            // create new marker
            trucks[data.results[i].id] = new google.maps.Marker({
              map: map,
              position: new google.maps.LatLng(
                parseFloat(data.results[i].lat),
                parseFloat(data.results[i].lng)),
              title: data.results[i].name,
              id: data.results[i].id
            });

В вашем приложении база данных будет каким-то образом обновляться, здесь база данных статична, а движение (для демонстрации) искусственно создано с помощью PHP rand, поэтому каждые несколько секунд маркеры появляются в разных местах.

header("Content-type: application/json");
echo '{ "results" : [ ';

$gettruck_result = $dbh->query("SELECT * FROM `truck`");
$result_array = array();

foreach($gettruck_result as $row) {
  $newlat = $row['lat'] + (0.0025 * rand(-3,3));
  $newlng = $row['lng'] + (0.0025 * rand(-3,3));

  $speed = $row['speed'] + rand(1,8);

  $row_object = '{';
  $row_object .= '"id": "' . $row['id'] . '", ';
  $row_object .= '"speed": "' . $speed . '", ';
  $row_object .= '"name": "' . $row['name'] . '", ';
  $row_object .= '"lat": "' . $newlat . '", ';
  $row_object .= '"lng": "' . $newlng . '"';
  $row_object .= '}';    
  $result_array[] = $row_object;
}

$result_str = implode(", ", $result_array);
echo $result_str;
echo " ] }";

Отслеживание маркера выполняется с двумя слушателями:

        google.maps.event.addListener(trucks[data.results[i].id], 'position_changed', function() {
          if(typeof tracked !== "undefined") {
            if(this.id == tracked.id) {
              map.panTo(this.getPosition());
              $("#speed").val(this.speed);
            } 
          } 
        });         

        google.maps.event.addListener(trucks[data.results[i].id], 'click', function() {
          $("#trackedId").val(this.id);
          map.setZoom(13);
          map.setCenter(this.getPosition());
          tracked = this;
        });
11.06.2012
  • привет, это действительно хороший код. Вроде то, что мне нужно. Поэтому я хотел бы получать данные из базы данных mysql примерно каждые 10 секунд. Единственные данные, которые я получаю из базы данных, - это широта и долгота, но я думаю, что направление можно определить, начинается ли координата с минуса или плюса. В любом случае, большой палец вверх за ваши усилия. Нужно ли мне иметь направление? или маркер все равно будет перемещен в эту позицию? 11.06.2012
  • Здравствуйте, не могли бы вы отправить мне электронное письмо на адрес [email protected]. У меня есть к вам несколько вопросов. 11.06.2012
  • Давайте сохраним его в Stack Overflow, чтобы другие тоже могли помочь. Видишь ли, я совсем не разбираюсь в PHP, а в твоем проекте это кажется важным. 12.06.2012
  • Нужно ли мне иметь эту сторону света? Или я могу просто дать новую координату, и она будет двигаться. Кстати, код останавливается, когда вы нажимаете сброс, должен ли он продолжать показывать все маркеры и то, как они перемещаются? Мне нужно получить Lat, Lng и serial_number из базы данных mysql. 12.06.2012
  • Север, юг, восток и запад были просто примерами. Написанный мной PHP-файл получает параметр 'dir' и отвечает определенным движением на выбор. Сброс возвращает все на прежнее место, и я намеренно остановил все. Когда вы обращаетесь к базе данных, разве вам не нужно для начала передавать идентификатор? 12.06.2012
  • Нет, я всегда извлекаю последние данные из базы данных. Это был пример с вводом идентификатора, но я буду использовать серийный номер для извлечения некоторых значений из определенного маркера, когда вы нажимаете на него. Например, вы нажимаете на маркер, и я ввожу номер серийного номера, получаю скорость и записываю ее, чтобы пользователь мог ее увидеть. 12.06.2012
  • В своем ответе я использую .id для каждого маркера, вы можете использовать это значение при щелчке маркера для перехода к запросу базы данных. 12.06.2012
  • Можете ли вы помочь мне со следующим. Я хочу, чтобы идентификатор был отправлен из базы данных. Итак, как бы выглядел ваш код, если бы я только отправлял данные из php-скрипта в файл javascript. Здесь вы что-то отправляете и что-то получаете. Не могли бы вы сделать мне пример, где я могу получить lat, lng и серийный номер из базы данных (вам не нужно делать часть json), а затем сделать этот полученный серийный номер идентификатором для каждого грузовика. 13.06.2012
  • Я не знаю, как ваше приложение должно работать, поэтому я не могу дать хороший ответ. Предназначен ли запрос к базе данных для одновременного обновления позиций всех грузовиков? А как насчет переменной locations? Является ли последний индекс серийным номером (1-5)? Вы продолжаете отправлять один и тот же запрос в базу данных? Как обновляется сама база данных, чтобы произошло движение? 14.06.2012
  • Итак, ваш код делает то, что у меня будет в моем приложении. Я буду получать данные так же, как и вы, за исключением того, что у меня будет переменная серийного номера. Да, последним индексом в запросе будет серийный номер. Запрос будет сделан в php, поэтому я буду вызывать только php-функцию или php-скрипт, чтобы вернуть результаты. Я буду получать последние результаты для всех автомобилей одновременно с вашим var locations Я буду заполнять его последними позициями часто каждые 10 секунд. База данных постоянно заполняется новыми данными каждые 5-7 секунд, поэтому нам не нужно беспокоиться о базе данных. Это то, что вам нужно, чтобы помочь мне в этом? 14.06.2012
  • Я переписал большую часть кода, я думаю, будет проще, если запрос к базе данных будет возвращать местонахождение всех грузовиков сразу. Ответ обновлен новой демонстрационной ссылкой. 15.06.2012
  • Привет, да, база данных возвращает местоположение всех грузовиков одновременно. Я попробую ваш код, чтобы увидеть, смогу ли я заставить его работать на моем собственном 15.06.2012
  • Привет, это отличный пример, у меня есть только один вопрос. Где я могу сохранить значение скорости, когда я получаю его из JSON. Поэтому я могу использовать это определенное значение скорости, когда нажимаю на определенный маркер. Пожалуйста помоги 16.06.2012
  • Скорости грузовиков можно сохранить в свойстве trucks[data.results[i].id].speed точно так же, как идентификатор сохраняется при создании маркера. Разница в том, что когда вы повторно запрашиваете базу данных для обновления позиций маркеров, вы также добавляете trucks[data.results[i].id].speed = data.results[i].speed, которое является значением из базы данных/JSON. 16.06.2012
  • Пожалуйста, посмотрите на вопрос, я поставил код, который я пробовал 16.06.2012
  • @denonth Я обновил демо и ответил: сначала в базе данных появился новый столбец статической скорости со случайными приращениями, добавленными с помощью PHP. Затем при вызове AJAX эта скорость сохраняется для каждого грузовика. При обновлении положения грузовика новейшая скорость отображается на боковой панели. 16.06.2012
  • Хм, у меня такая проблема. Я успешно загружаю однократную скорость, тогда она всегда остается одной и той же и не меняется. Есть идеи? 17.06.2012
  • Разве он не получает значение из вашей базы данных? Я не уверен, как это должно работать, вы также используете JSON? Если позиция обновляется, обязательно обновите скорость и обновите текстовое поле (или элемент HTML). 17.06.2012
  • Да, я использую JSON, код такой же, как у вас. Я имею в виду, что у меня есть эта строка в маркере обновления. И позиция меняется, и json в проверенном формате. Маркер движется, но значения принимаются один раз и в дальнейшем не меняются. Я просто поместил печать в текстовое поле html trackerid, которое использовалось для отображения идентификатора. 17.06.2012
  • Вы поставили эту строку trucks[data.results[i].id].speed = data.results[i].speed; рядом с setPosition? (где маркер обновляется, а не создается)? База корректно обновляет скорость? 17.06.2012
  • давайте ПРОДОЛЖИТЬ В ЧАТЕ 17.06.2012

  • 2

    Этот файл Geocoder.htm содержит весь код, необходимый для достижения того, что вы пытаетесь сделать (список интерактивных значков с прикрепленными идентификаторами и действиями и т. д.).

    Просто раскомментируйте строки 449-460, и вы увидите, как это работает.

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

    14.06.2012
  • Хорошо, я посмотрю, что у тебя есть. Спасибо 14.06.2012
  • Это ваш сценарий? Как же я не нашел, если он с открытым исходным кодом :) а я много искал 14.06.2012
  • хм, я проверил код. Вау, это много кода. В принципе это не то, что мне нужно. Я имею в виду, может быть, это так, но я не знаю, с чего начать. Итак, что мне нужно, сэр, следующее: в начале страницы мне нужно собрать данные, как в этих прокомментированных строках, но с разными значениями. Затем мне нужно, чтобы они начали двигаться, когда я получаю последние значения каждые X секунд из базы данных. И когда я нажимаю на определенный маркер, он увеличивается, мне нужно иметь возможность читать другие значения, которые я передал этому маркеру, для чтения и представления. Любая идея хороша, спасибо 14.06.2012
  • Есть ли электронная почта, чтобы связаться с вами в частном порядке? Я действительно нуждаюсь в помощи 14.06.2012
  • Да, я написал это. 90% Javascript, который вам нужен для решения вашей проблемы, находится в коде, который я предоставил. Боюсь, я не смогу сделать за вас последние 10% › ;-) 15.06.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..