放大时增加自定义标记的大小?使用 Google 地图和 GeoJSON

Increase size of custom markers while zooming in? Using Google Maps and GeoJSON

我有一张地图,其中我通过 GeoJSON 文件调用了 150 个位置,每个位置都由自定义图像 (22px,17px) 表示。问题出现在放大(缩放 17 之后)时,这些标记看起来相对较小。我想知道有没有一种方法可以确保每次放大时图标的大小都相同。

代码如下:

<!DOCTYPE html>
<html>

<head>
  <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
  <meta charset="utf-8">
  <style>
    html,
    body,
    #map-canvas {
      height: 100%;
      margin: 0px;
      padding: 0px
    }
  </style>
  <script src="https://maps.googleapis.com/maps/api/js?v=3&amp;sensor=false &libraries=visualization"></script>

  <script>
    var map;

    function initialize() {


      var mapOptions = {
        zoom: 13,
        scrollwheel: true,
        panControl: true,
        zoomControl: true,
        scaleControl: false,
        disableDefaultUI: false,
        center: new google.maps.LatLng(19.043516, -98.198232),
        mapTypeControlOptions: {
          mapTypeIds: [google.maps.MapTypeId.ROADMAP, 'map_style']
        }
      };

      map = new google.maps.Map(document.getElementById('map-canvas'),
        mapOptions);



      var script = document.createElement('script');
      script.src = 'https://storage.googleapis.com/operations_poligone/datos/Test_JSON11.geojson';
      document.getElementsByTagName('head')[0].appendChild(script);


      map.data.setStyle(function(feature) {
        var mag = 3;
        var grd = feature.getProperty('Grd');
        var ctgData = feature.getProperty('Ctg');
        var ctgColor = {
          "Seguridad": "https://storage.googleapis.com/operations_poligone/iconos/Safety_T02.png",
          "Espacio": "https://storage.googleapis.com/operations_poligone/iconos/Neat_T02.png",
          "Iluminacion": "https://storage.googleapis.com/operations_poligone/iconos/Lightning_T03.png"
        };
        return ({
          icon: ctgColor[ctgData]
        });
      });

    }

    function eqfeed_callback(results) {
      map.data.addGeoJson(results);
    }

    google.maps.event.addDomListener(window, 'load', initialize);
  </script>
</head>

<body>
  <div id="map-canvas"></div>
</body>

</html>

我在这里看到了一些解决方案,但我不知道如何在从外部调用 GeoJSON 文件时应用它。 ()

您可以像

中那样放大现有标记
google.maps.event.addListener(map, 'zoom_changed', function() {
  map.data.setStyle(function(feature) {
    var mag = 3;
    var grd = feature.getProperty('Grd');
    var ctgData = feature.getProperty('Ctg');
    var ctgColor = {
      "Seguridad": "https://storage.googleapis.com/operations_poligone/iconos/Safety_T02.png",
      "Espacio": "https://storage.googleapis.com/operations_poligone/iconos/Neat_T02.png",
      "Iluminacion": "https://storage.googleapis.com/operations_poligone/iconos/Lightning_T03.png"
    };
    var size;
    var zoom = map.getZoom(); 
    if (zoom > 13) {
      size = new google.maps.Size(44,34);
    } else {
    size = new google.maps.Size(22,17);
    }
    return ({
      icon: {url: ctgColor[ctgData],
      size: size,
      scaledSize: size}
    });
  });
})

它们会变得模糊,您最好为更高的缩放级别创建单独的标记。

代码片段:

var map;

function initialize() {
  var mapOptions = {
    zoom: 13,
    scrollwheel: true,
    panControl: true,
    zoomControl: true,
    scaleControl: false,
    disableDefaultUI: false,
    center: new google.maps.LatLng(19.043516, -98.198232),
    mapTypeControlOptions: {
      mapTypeIds: [google.maps.MapTypeId.ROADMAP, 'map_style']
    }
  };

  map = new google.maps.Map(document.getElementById('map-canvas'),
    mapOptions);

  var script = document.createElement('script');
  script.src = 'https://storage.googleapis.com/operations_poligone/datos/Test_JSON11.geojson';
  document.getElementsByTagName('head')[0].appendChild(script);


  map.data.setStyle(function(feature) {
    var mag = 3;
    var grd = feature.getProperty('Grd');
    var ctgData = feature.getProperty('Ctg');
    var ctgColor = {
      "Seguridad": "https://storage.googleapis.com/operations_poligone/iconos/Safety_T02.png",
      "Espacio": "https://storage.googleapis.com/operations_poligone/iconos/Neat_T02.png",
      "Iluminacion": "https://storage.googleapis.com/operations_poligone/iconos/Lightning_T03.png"
    };
    return ({
      icon: ctgColor[ctgData]
    });
  });
  google.maps.event.addListener(map, 'zoom_changed', function() {
    map.data.setStyle(function(feature) {
      var mag = 3;
      var grd = feature.getProperty('Grd');
      var ctgData = feature.getProperty('Ctg');
      var ctgColor = {
        "Seguridad": "https://storage.googleapis.com/operations_poligone/iconos/Safety_T02.png",
        "Espacio": "https://storage.googleapis.com/operations_poligone/iconos/Neat_T02.png",
        "Iluminacion": "https://storage.googleapis.com/operations_poligone/iconos/Lightning_T03.png"
      };
      var size;
      var zoom = map.getZoom();
      document.getElementById("zoom").innerHTML = zoom;
      if (zoom > 13) {
        size = new google.maps.Size(44, 34);
      } else {
        size = new google.maps.Size(22, 17);
      }
      return ({
        icon: {
          url: ctgColor[ctgData],
          size: size,
          scaledSize: size
        }
      });
    });
  })
}

function eqfeed_callback(results) {
  map.data.addGeoJson(results);
}

google.maps.event.addDomListener(window, 'load', initialize);
html,
body,
#map-canvas {
  height: 100%;
  margin: 0px;
  padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk"></script>
<div id="zoom"></div>
<div id="map-canvas"></div>