0

これが私の問題です。フュージョンテーブルで指定された標準マーカーに別の画像を設定したい。ポイント"(coord、coord)"を含む列からデータを抽出しますが、この座標をマーカーに関連付けると、これは表示されません。解決策はとても簡単だと思いますが、理解できません:(。このコードの真ん中にある「問題はここにあります」のセクションを読んで、明確なアイデアを見つけてください。ありがとう!!!!

 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")

      });

    } 
  });
}

更新:@Trottの答えに基づいて、多分このようなものですか?しかし、まだ実行されていません。何かアドバイス?

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);
  }
}
4

1 に答える 1

0

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);
  }
}
于 2011-05-23T16:24:41.073 に答える