Google maps api 3 在谷歌地图api v3中绘制(反转)几何圆

Google maps api 3 在谷歌地图api v3中绘制(反转)几何圆,google-maps-api-3,latitude-longitude,geometry,Google Maps Api 3,Latitude Longitude,Geometry,我正在寻找一种在谷歌地图api v3中绘制倒几何(而非地理)圆的方法 本质上,其目标是使地图变暗(地图对象周围除外),以使地图对象突出。为了做到这一点,我使用了一个反向叠加,并有一种方法在我的“阴影叠加”中创建圆形“洞” 然而,我用来获得生成此圆的lat/lng坐标的方法调整为墨卡托投影,其大小或形状不一致,因为它相对于赤道的位置。该方法需要创建一个圆(不使用谷歌的circle对象,也不使用提取其路径的方法),该圆将根据不考虑墨卡托投影的半径场从中心计算lat/lng点,这样它将在地图上绘制的任

我正在寻找一种在谷歌地图api v3中绘制倒几何(而非地理)圆的方法

本质上,其目标是使地图变暗(地图对象周围除外),以使地图对象突出。为了做到这一点,我使用了一个反向叠加,并有一种方法在我的“阴影叠加”中创建圆形“洞”

然而,我用来获得生成此圆的lat/lng坐标的方法调整为墨卡托投影,其大小或形状不一致,因为它相对于赤道的位置。该方法需要创建一个圆(不使用谷歌的circle对象,也不使用提取其路径的方法),该圆将根据不考虑墨卡托投影的半径场从中心计算lat/lng点,这样它将在地图上绘制的任何位置显示一个完美的圆

这应该不难,但我正在努力将此函数转换为不将墨卡托投影应用到结果中:

function getCircleCoords(point, radius) {
  var d2r = Math.PI / 180;   // degrees to radians
  var points = 90;
  var circleLatLngs = new Array();
  var circleLat = radius * 0.621371192 * 0.014483;
  var circleLng = circleLat / Math.cos( point.lat() * d2r);
  for (var i = 0; i < points+1; i++) { 
    var theta = Math.PI * (i / (points / 2)); 
    var vertexLat =  point.lat() + (circleLat * Math.sin(theta)); 
    var vertexLng =  point.lng() + (circleLng * Math.cos(theta));

    var vertexLat =  point.lat() + (circleLat * (theta)); 
    var vertexLng =  point.lng() + (circleLng * (theta));

    var vertextLatLng = new google.maps.LatLng(vertexLat, vertexLng);
    circleLatLngs.push( vertextLatLng );
  }
  return circleLatLngs;
}

想法?

要使用多边形,您需要计算像素(世界)坐标中的圆坐标,将它们转换为地理坐标,以获得圆的适当坐标。或者使用正确大小的覆盖,自己处理缩放更改。

您可以尝试此库。它在谷歌地图V3上工作。参见下面的代码块示例

var iCircle;
var map;
function initialize() {
    var mapDiv = document.getElementById('gMap');
    map = new google.maps.Map(mapDiv, {
        center: new google.maps.LatLng(37.4419, -122.1419),
        zoom: 13,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    });

    iCircle = new InvertedCircle({
        center: map.getCenter(),
        map: map,
        radius: 5000, // 5 km
        editable: true,
        stroke_weight: 5,
        fill_opacity: 0.5,
        fill_color: "#ff0000"
    });
}
google.maps.event.addDomListener(window, 'load', initialize);

好的,你知道如何计算像素格式的圆坐标吗?这只是一个。我不能使用法线圆,因为我需要将圆的路径添加到多边形中,以便可以反转其中的圆。你需要计算像素坐标中的“法线圆”。将这些坐标转换为lat/lng坐标,然后将其添加到多边形中。当缩放级别改变时重新计算。我不知道如何在像素坐标中创建“法线圆”。你有这样的例子吗?
var iCircle;
var map;
function initialize() {
    var mapDiv = document.getElementById('gMap');
    map = new google.maps.Map(mapDiv, {
        center: new google.maps.LatLng(37.4419, -122.1419),
        zoom: 13,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    });

    iCircle = new InvertedCircle({
        center: map.getCenter(),
        map: map,
        radius: 5000, // 5 km
        editable: true,
        stroke_weight: 5,
        fill_opacity: 0.5,
        fill_color: "#ff0000"
    });
}
google.maps.event.addDomListener(window, 'load', initialize);