谷歌地图,基于缩放比例圈

Posted

技术标签:

【中文标题】谷歌地图,基于缩放比例圈【英文标题】:Google Maps, scale circle based on Zoom 【发布时间】:2013-02-26 15:52:14 【问题描述】:

我有一个显示圆圈的 Google 地图,其半径使用数据集的索引(1、2、3、4..)按比例缩小:

 var radiusTest = 1 - (mapDataTrending[i].index) * .1;

 var populationOptions = 
  strokeColor: "#fdb913",
  strokeOpacity: 0.35,
  strokeWeight: 1,
  fillColor: "#fdb913",
  fillOpacity: 0.35,
  map: map,
  center: new google.maps.LatLng(mapDataTrending[i].lat, mapDataTrending[i].lng),
  radius: radiusTest * 800
;

cityCircle = new google.maps.Circle(populationOptions);

我希望圆圈在用户放大时没有变大。圆圈随着用户放大而缩放,如果用户放大到像 20 这样的整数,我希望它们不会变大。

这是我制作地图的方法:

var mapOptions = 
    center: new google.maps.LatLng(30.26826, -97.743044),
    zoom: 14,
    panControl: false,
    zoomControl: false,
    scaleControl: false,
    disableDefaultUI: true,
    mapTypeControlOptions: 
        mapTypeIds: [google.maps.MapTypeId.ROADMAP, 'map_style']
    
;

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

有没有办法可以根据地图缩放来控制圆的半径?

【问题讨论】:

【参考方案1】:

Google 地图有一个zoom_changed event,您可以订阅它并在您的Circle 上调用setRadius 方法。当然你必须根据圆圈的大小自己定义函数getCustomRadiusForZoom

  google.maps.event.addListener(map, 'zoom_changed', function() 
    var zoomLevel = map.getZoom();
    cityCircle.setRadius(getCustomRadiusForZoom(zoomLevel));
  );

【讨论】:

【参考方案2】:

如果您想要一个在不同缩放级别下保持相同大小的圆圈,最好使用symbols。

如example 所示,默认情况下,它们会随缩放级别缩放其大小。您还可以选择设置普通圆所具有的properties,例如fillColorstrokeOpacity

从我链接的例子中:

var marker = new google.maps.Marker(
  position: map.getCenter(),
  icon: 
    path: google.maps.SymbolPath.CIRCLE,
    scale: 10
  ,
  draggable: true,
  map: map
);

【讨论】:

以上是关于谷歌地图,基于缩放比例圈的主要内容,如果未能解决你的问题,请参考以下文章

谷歌地图文字很小

如何在不更改用户设置的缩放比例的情况下更新地图标记?

谷歌地图多个标记映射到一个没有坐标的区域

如何设置谷歌地图缩放级别以显示所有标记?

如何在谷歌地图中设置缩放级别

如何在android中根据谷歌地图不同的缩放级别调整谷歌地图标记的大小