2013-03-12 77 views
0

我正在使用Google Fusion Tables API v1請求以JSON格式加載到融合表中的點kml。我用這個請求:Google Fusion Tables API v1和GeoJSON到Google Maps Utility

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

View the request data

回調函數使用GeoJSON to Google Maps Utility解析從請求標記。幾何數據是在列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') 
      } 
      } 
     } 

沒有在JSON或GeoJSON的工具創建的覆蓋沒有錯誤,但在谷歌地圖VAR「地圖」的功能是不明確的,甚至如果它的全球定義。那就是爲什麼overlay.setMap(地圖)不起作用。我想這個回調函數在var map被定義之前被調用。我該如何解決這個問題?

+0

你有一個jsfiddle或鏈接出現問題嗎? – geocodezip 2013-03-13 02:23:29

+0

我創建了一個jsfiddle,但我不知道如何使用此工具顯示地圖。 http://jsfiddle.net/4u2yu/1/ – 2013-03-13 13:17:51

+0

我設法通過在覆蓋數組中推送覆蓋而不是在回調函數中執行overlay.setMap(map)來實現它。然後,我在initialize()函數中的每個疊加覆蓋圖上做了setMap(map) – 2013-03-13 18:36:10

回答

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