2016-12-28 11 views
-2

Google지도의 FusionTablesLayer 및 다각형을 사용하여 미국 국가의 레이어를 설정하고 있습니다. 다음 두 가지를 통합하는 데 문제가 있습니다.다각형의 영역에 따라 화면 및 위치 정보창 레이블에 맞게 Google지도 줌을 설정하는 방법

a)지도가 화면에 맞도록 줌 속성을 설정합니다. 지도가 십진수로 줌 값을 허용하지 않는다는 것을 알고 있습니다. 이것을 할 수있는 다른 방법이 있습니까?

b) 상태 영역에 따라 라벨의 위치를 ​​지정합니다 (예 : 상태 이름). 예를 들면. 뉴저지주의 레이블은 다각형 영역 아래에 있어야하는 반면 캘리포니아 주 레이블은 다각형에 있어야합니다.

예상 출력 :

enter image description here

현재 상태 :

enter image description here

내 코드 :

var map; 
var clientId = '{CLIENT_ID}'; 
var apiKey = '{API_KEY}'; 
var scopes = 'https://www.googleapis.com/auth/fusiontables'; 
var zoom = 4; 
var labels = []; 
var USAStates = ''; 
var infobox = {}; 
jQuery.get("http://recruiters.wpsitesbuilder.com/wp-json/myplugin/v1/firms_data", function(data) { 
    USAStates = jQuery.parseJSON(data); 
}).done(function(data) { 
    function initMap() { 
     var latlng = new google.maps.LatLng(37.09024, -95.712891); 
     var myOptions = { 
      zoom: zoom, 
      center: latlng, 
      mapTypeId: google.maps.MapTypeId.ROADMAP, 
      disableDefaultUI: true, 
      disableDoubleClickZoom: false, 
      draggable: true, 
      keyboardShortcuts: true, 
      panControl:true, 
      zoomControl:false, 
      zoomControlOptions: { 
       style: google.maps.ZoomControlStyle.SMALL 
      }, 
      mapTypeControl:false, 
      scaleControl:false, 
      scrollwheel: false, 
      streetViewControl:false, 
      overviewMapControl:true, 
      rotateControl:false, 
      mapTypeControlOptions: { 
       mapTypeIds: [google.maps.MapTypeId.ROADMAP, 'map_style'] 
      } 
     }; 
     var styles=[{featureType:"administrative",elementType:"all",stylers:[{hue:"#000000"},{lightness:-100},{visibility:"off"}]},{featureType:"landscape",elementType:"all",stylers:[{color:"#2c8ecd"},{visibility:"on"}]},{featureType:"landscape",elementType:"geometry",stylers:[{saturation:-100},{lightness:-3},{visibility:"on"},{color:"#2c8ecd"}]},{featureType:"landscape",elementType:"labels",stylers:[{hue:"#000000"},{saturation:-100},{lightness:-100},{visibility:"off"}]},{featureType:"poi",elementType:"all",stylers:[{hue:"#ff0000"},{saturation:-100},{lightness:-100},{visibility:"off"}]},{featureType:"road",elementType:"all",stylers:[{visibility:"off"}]},{featureType:"road",elementType:"geometry",stylers:[{hue:"#ff0000"},{saturation:-100},{lightness:26},{visibility:"off"}]},{featureType:"road",elementType:"labels",stylers:[{hue:"#ffffff"},{saturation:-100},{lightness:100},{visibility:"off"}]},{featureType:"road.highway",elementType:"all",stylers:[{visibility:"off"}]},{featureType:"road.highway.controlled_access",elementType:"all",stylers:[{visibility:"off"}]},{featureType:"road.local",elementType:"all",stylers:[{hue:"#ffffff"},{saturation:-100},{lightness:100},{visibility:"on"}]},{featureType:"transit",elementType:"all",stylers:[{visibility:"off"}]},{featureType:"transit",elementType:"geometry",stylers:[{visibility:"off"}]},{featureType:"transit",elementType:"labels",stylers:[{hue:"#ff0000"},{lightness:-100},{visibility:"off"}]},{featureType:"water",elementType:"geometry",stylers:[{saturation:-100},{lightness:100},{visibility:"on"},{color:"#2c8ecd"}]},{featureType:"water",elementType:"labels",stylers:[{hue:"#000000"},{saturation:-100},{lightness:-100},{visibility:"off"}]}]; 
     var styledMap = new google.maps.StyledMapType(styles, {name: "Styled Map"}); 
     var styledMap = new google.maps.StyledMapType(styles, {name: "Styled Map"}); 
     var map = new google.maps.Map(document.getElementById("map"), myOptions); 
     map.mapTypes.set('map_style', styledMap); 
     map.setMapTypeId('map_style'); 
     var tableId = '17aT9Ud-YnGiXdXEJUyycH2ocUqreOeKGbzCkUw'; 
     var USAStateslayer = new google.maps.FusionTablesLayer({ 
      query: { 
       select: 'geometry', 
       from: tableId 
      }, 
      options: { 
       suppressInfoWindows: true 
      }, 
      styles: [{ 
       polygonOptions: { 
        fillColor: '#ffffff', 
        fillOpacity: 1, 
        strokeColor: '#2c8ecd' 
       } 
      }], 
      clickable: true 
     }); 
     filterMap(USAStateslayer, tableId, map, USAStates); 

     USAStateslayer.setMap(map); 
     map.setCenter(latlng); 

     jQuery.each(USAStates, function(key, value){ 
      var content = '<div class="infobox-content-container"><span class="state-name">'+value.state+'</span></div>'; 
      if(value.firms !== undefined) { 
       content = '<div class="infobox-content-container"><span class="total-firms">'+value.firms+'</span><br /> Firms <br /> <span class="state-name">'+value.state+'</span></div>'; 
      } 
      infobox = new InfoBox({ 
       content: content, 
       boxStyle: { 
        border: "none", 
        textAlign: "center", 
        backgroundColor:"none", 
        fontSize: "8pt", 
        width: "50px", 
        color: '#000000', 
        'margin-top': "-25px" 
       }, 
       disableAutoPan: true, 
       pane: "floatPane", 
       pixelOffset: new google.maps.Size(-25, 0), 
       position: new google.maps.LatLng(value.latitude,value.longitude), 
       closeBoxURL: "", 
       isHidden: false, 
       enableEventPropagation: true 
      }); 
      labels.push(infobox); 
      labels[labels.length-1].open(map); 
     }); 
    } 

    // Filter the map based on checkbox selection. 
     function filterMap(layer, tableId, map, USAStates) { 

     layer.setOptions({styles:generateStyle(USAStates, map)}); 

     } 

     // Generate a where clause from the checkboxes. If no boxes 
     // are checked, return an empty string. 
     function generateStyle(USAStates, map) { 
     //default-style,gray 
     var style=[{ 
      polygonOptions: { 
       fillColor: '#ffffff', 
       strokeWeight: 1, 
       fillOpacity: 1, 
       strokeColor: '#2c8ecd' 
      } 
     }]; 

     var styles={ 
     //open stores 
     open:{polygonOptions: { 
      fillColor: "#be2026" 
      }}, 
     //closed stores 
     closed:{polygonOptions: { 
      fillColor: "#fff" 
      }} 
     }; 

     var selected={open:[],closed:[]}; 
     var stores = []; 

     if(jQuery('#find-firms-container .selected-firms-list>span').length > 0) { 
      jQuery('#find-firms-container .selected-firms-list>span').each(function(){ 
       var stateName = jQuery(this).text(); 
       stores.push(stateName); 
      }); 
     } 

     //populate the selected-object with the names of the stores 
     jQuery.each(stores,function(i,o){ 
      var storeName = o.replace(/'/g, '\\\''); 
      selected['open'].push(storeName); 
     }); 
     //add a style for non-empty properties of the selected-object 
     jQuery.each(selected,function(i,o){ 
      if(o.length){ 
      style.push(jQuery.extend(styles[i],{where:"'name' IN ('" + o.join("','") + "')"})); 
      } 
     }); 
     var i = 0; 
     jQuery.each(USAStates, function(key, value){ 
      var color = '#000000'; 
      if(jQuery.inArray(value.state, selected.open) !== -1) { 
       color = '#ffffff'; 
      } 
      if(labels[i] !== undefined) { 
       labels[i].boxStyle_.color= color; 
       labels[i].open(map); 
      } 
      i++; 
     }); 

     return style; 
    } 

    initMap(); 
}); 

답변

0

도움이 될지 모르겠지만 문서에서 #map 스타일에 대한 div 요소의 크기를 명시 적으로 설정해야한다고 명시되어 있습니다.

메타 이름 = "뷰포트"내용 = "초기 규모 = 1.0, 사용자 확장 성이 = 더"

또한 사용자가 설정할 수있는 내용으로 뷰포트 메타 태그가 없습니다 초기 규모. 초기 배율로 노는 것이 줌과 상호 작용할 수 있습니까?

<meta name="viewport" content="initial-scale=1.0, user-scalable=no"> 
<meta charset="utf-8"> 
<style> 
    /* Always set the map height explicitly to define the size of the div 
    * element that contains the map. */ 
    #map { 
    height: 100%; 
    } 
    /* Optional: Makes the sample page fill the window. */ 
    html, body { 
    height: 100%; 
    margin: 0; 
    padding: 0; 
    } 
</style> 
+0

메타 태그를 추가하려고 시도했지만 작동하지 않았습니다. –