Данные Google Fusion Tables и изменение изображения на маркеры - PullRequest
0 голосов
/ 23 мая 2011

Вот моя проблема.Я хочу установить другое изображение для стандартных маркеров, заданных таблицами слияния.Я извлекаю данные из столбца, который содержит мои точки "(координаты, координаты)", НО, когда я связываю эти координаты с маркером, эта не отображается!Я думаю, что решение очень простое, но я не могу его получить :(. Пожалуйста, прочитайте раздел «ЗДЕСЬ ПРОБЛЕМА» в середине этого кода, чтобы иметь четкое представление. Спасибо !!!!

 function initialize() {
  geocoder = new google.maps.Geocoder();
  map = new google.maps.Map(document.getElementById('map_canvas'), {
    center: new google.maps.LatLng(46.06454, 13.23561), //the center lat and long
    zoom: 9, //zoom

    mapTypeId: google.maps.MapTypeId.ROADMAP //the map style
  });


  //make gviz request
  setData();

}

/* GVIZ - get data from Fusion Tables */

function setData() {
  //create a viz query to send to Fusion Tables
  var query = new google.visualization.Query('http://www.google.com/fusiontables/gvizdata?tq=' + encodeURIComponent("SELECT dove FROM 781907"));

  //set the callback function that will be called when the query returns
  query.send(getData);

}

function getData(response) {

  numRows = response.getDataTable().getNumberOfRows();


  for (i = 0; i < numRows; i++) {

      var row = response.getDataTable().getValue(i,0);


    codeAddress(row);
  }
}


var geocoder;


function codeAddress(latlng) {

// HERE IS THE PROBLEM!!!!
// Test show correctly "(lat,lng)" BUT no marker showed on the map!
            document.getElementById("test").innerHTML = latlng; 
      geocoder.geocode( { 'latLng': latlng}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {

        var marker = new google.maps.Marker({
          map: map, 
          position: latlng
//icon: new google.maps.MarkerImage("http://www.google.com/images/icons/product/fusion_tables-32.png")

      });

    } 
  });
}

ОБНОВЛЕНИЕ : Судя по ответу @ Тротта, может быть что-то вроде этого? Но все еще не работает. Любой совет?

function getData(response) {

  numRows = response.getDataTable().getNumberOfRows();

  //create an array of row values
  for (i = 0; i < numRows; i++) {
    rowtext = response.getDataTable().getValue(i,0);
    var strArr[] = rowtext.split(",");
    document.getElementById("via").innerHTML = rowtext;
    row = new google.maps.LatLng(strArr[0],strArr[1]);
    codeAddress(row);
  }
}

1 Ответ

0 голосов
/ 23 мая 2011

geocoder.geocode() требуется объект LatLng.Ваша переменная latlng это просто текст.Вам нужно будет найти способ преобразовать его в LatLng объект.Наиболее очевидный способ, вероятно, состоит в том, чтобы проанализировать его с помощью регулярного выражения или каким-либо другим способом и передать значения lat и lng в new google.maps.LatLng().Возможно, есть более элегантное решение, но оно будет работать.

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

function codeAddress(latlng) {
//Whoops, latlng is a string.  We need it to be an object.  Let's just hardcode one for demo purposes.
latlng=new google.maps.LatLng(46.0724339, 13.249490000000037);
geocoder.geocode( { 'latLng': latlng}, function(results, status) {

        if (status == google.maps.GeocoderStatus.OK) {

        var marker = new google.maps.Marker({
          map: map,
          position: latlng,
          icon: new google.maps.MarkerImage("http://www.google.com/images/icons/product/fusion_tables-32.png")

      });

    }
  });
}

ОБНОВЛЕНИЕ: Если вы (@Massimo) хотите сделать это так, как вы это делаете в своем обновлении, тогдавам нужно убрать скобки и, возможно, пробел.Попробуйте что-то вроде этого:

function getData(response) {

  numRows = response.getDataTable().getNumberOfRows();

  //create an array of row values
  for (i = 0; i < numRows; i++) {
    var rowtext = response.getDataTable().getValue(i,0);
    var sanitizedText = rowtext.replace(/[\(\)\s]/g, "");
    var strArr = sanitizedText.split(",");
    document.getElementById("via").innerHTML = rowtext;
    row = new google.maps.LatLng(strArr[0],strArr[1]);
    codeAddress(row);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...