2014-10-21 2 views
10

Возможно ли использовать данные базовой карты Google Maps API в качестве наложения, расположенного выше пользовательского слоя карты?Может ли базовая карта API Карт Google использоваться в качестве наложения над пользовательским слоем карты?

Я хотел бы создать карту, которая использует базовую воду Google и землю/ландшафт в качестве нижнего слоя, а затем поместить над ними пользовательский слой данных (красные многоугольные области, представляющие мои данные), а затем, наконец, позиционировать улицу Google Map/border/city labels поверх всего.

enter image description here

Возможно ли это? Я попытался нажать слой Google Maps (с включенными только улицами/границами/городами) в массив overlayMapTypes, но он, похоже, заставляет все слои Google Maps превышать все, а мои данные пользовательского уровня (второй слой) больше не видно.

ответ

6

Вот пример с пользовательского слоя тайлов в качестве среднего слоя:

<script type="text/javascript"> 
function initMap() { 
    // Map with everything off but boundaries 
    var myOptions = { 
     zoom: 2, 
     center: new google.maps.LatLng(0, 0), 
     styles: [ 
      { 
       featureType: 'poi', 
       stylers: [ 
        { visibility: 'off' } 
       ] 
      }, 
      { 
       featureType: 'road', 
       stylers: [ 
        { visibility: 'off' } 
       ] 
      }, 
      { 
       featureType: 'transit', 
       stylers: [ 
        { visibility: 'off' } 
       ] 
      }, 
      { 
       featureType: 'landscape', 
       stylers: [ 
        { visibility: 'off' } 
       ] 
      }, 
      { 
       elementType: 'labels', 
       stylers: [ 
        { visibility: 'off' } 
       ] 
      } 
     ] 
    }; 

    var map = new google.maps.Map(document.getElementById("map"), myOptions); 

    // Middle layer 
    var tileLayer = new google.maps.ImageMapType({ 
     getTileUrl: "tiles URL here", 
     tileSize: new google.maps.Size(256, 256), 
     isPng: true 
    }); 

    map.overlayMapTypes.push(tileLayer); 

    // Top layer with everything off but roads 
    var roadsLayer = [ 
     { 
      featureType: 'all', 
      stylers: [ 
       { visibility: 'off' } 
      ] 
     }, 
     { 
      featureType: 'road', 
      stylers: [ 
       { visibility: 'on' } 
      ] 
     } 
    ]; 

    var roadsType = new google.maps.StyledMapType(roadsLayer, { name: 'roads' }); 
    map.overlayMapTypes.push(roadsType); 
} 

+0

Ваше решение работает, но вы также должны включить на * административный * и * вода * 'featureType' s. Знаете ли вы, как заставить это решение выглядеть так же, как встроенный слой * labels *? Даже после этого добавленный слой намного более загроможден, чем встроенный слой * labels *. Мое решение состоит в том, чтобы создать один «StyledMapType» за уровень масштабирования и поменять их в обработчике 'zoom_changed'. У вас есть лучшее решение? –

+0

Это был интересный пример, но в моем конкретном случае пока не помогло. В частности, я пытаюсь сделать многоугольник, а затем наклеить метки базовой карты Google поверх многоугольника. Я достиг этого с помощью специального класса LabelsOverlay http://codepen.io/adg29/pen/VaMLrv –

+0

Для слоя поверх вашего * настраиваемого слоя *, возможно, потребуется установить стили стилей стилей: [{visibility: 'off'}] ', чтобы не перекрывать пользовательский слой. Может быть особенно важно отключить видимость функции ** geometry ** –

Смежные вопросы