0

Google Fusion Tables API v1 を使用して、JSON 形式のフュージョン テーブルにロードされたポイント kml をリクエストしています。私はこのリクエストを使用します:

<script src="https://www.googleapis.com/fusiontables/v1/query?sql=SELECT * FROM 1CNJWjLDYgBkJGZVslJ67Fak4DyqadEFIabzQ60&callback=dataHandler&key=AIzaSyKBzv-rs32Zat-8fDZuWwOXo7hCtpBR78"></script>

リクエスト データを表示する

コールバック関数は、GeoJSON to Google Maps Utilityを使用して、リクエストからマーカーを解析します。ジオメトリ データは、「geometry」という名前の列 idx 2 にあります。

    function dataHandler(results) {
        var rows = results['rows'];
        for (var i in rows){
            var geometries = rows[i][2]['geometry'];
            //alert(geometries.coordinates)
            if (geometries) {
              var options = {
                "icon": "http://labs.google.com/ridefinder/images/mm_20_red.png"
              };
              var overlay = new GeoJSON(geometries, options);
              if (overlay.error){
                alert("error in GeoJSON")
              }else{
                alert(map) // return undefined
                overlay.setMap(map); //not working
              } 
            }else {
              alert('No geometry column')
            }
          }
        }

GeoJSON ユーティリティで作成した JSON やオーバーレイにエラーはありませんが、グローバルに定義されている場合でも、Google マップの var "map" は関数内で未定義です。そのため、overlay.setMap(map) が機能していません。var マップが定義される前に、コールバック関数が呼び出されると思います。この問題を解決するにはどうすればよいですか?

4

1 に答える 1

0
<script src="https://www.googleapis.com/fusiontables/v1/query?sql=SELECT * FROM
 TABLE_ID&callback=dataHandler&key=API_KEY"></script>

    var map;
    var overlays = [];


    function initialize(){
      map = new google.maps.Map(document.getElementById('map'), {
            center: new google.maps.LatLng(49.75, -71.25),
            zoom: 5,
            mapTypeId: 'roadmap'
      });

      for (var i = 0; i < overlays.length; i++){
          overlays[i].setMap(map);
      }
    }


    function dataHandler(results) {
        var rows = results['rows'];
        var cols = results['columns'];
        for (var i = 0; i < cols.length; i++){
          if (cols[i] == 'geometry') {
            var ColIndex = i;
          }
        }
        if (!ColIndex){
          alert('Geometry column "geometry" not found.')
        }
        for (var i in rows){
          var geometries = rows[i][ColIndex]['geometry'];
          if (geometries) {
            var options = {
              "icon": "http://labs.google.com/ridefinder/images/mm_20_red.png"
            };
            var overlay = new GeoJSON(geometries,options);
            if (overlay.error){
              alert("error in overlay")
            }else{
              overlays.push(overlay);
            } 
          }else {
            alert("error in geoJSON response")
          }
        }
于 2013-03-13T20:42:14.253 に答える