0

我需要将此函数转换为 v3 API。此功能用于在选中时在标记下创建一个椭圆。我尝试过投影和叠加,但没有成功。

  function makePolyPoints(_marker)
  {
    var polyPoints = Array();
    var markerPoint=  _marker.getLatLng();
    var projection = G_NORMAL_MAP.getProjection();
    var mapZoom = map.getZoom();
    var clickedPixel = projection.fromLatLngToPixel(markerPoint, mapZoom);
    var  ellipseRadA = 20;
    var ellipseRadB = 10;

    var polyNumSides = 20;
    var polySideLength = 18;

    for (var a = 0; a<(polyNumSides+1); a++) {
        var aRad = polySideLength*a*(Math.PI/180);
        var pixelX =  clickedPixel.x + ellipseRadA * Math.cos(aRad);
        var pixelY = -3 + clickedPixel.y + ellipseRadB * Math.sin(aRad);
        var polyPixel = new GPoint(pixelX,pixelY);
        var polyPoint = projection.fromPixelToLatLng(polyPixel,mapZoom);
        polyPoints.push(polyPoint);
    }
    return polyPoints;
}

这里 v3 的功能不起作用,我认为是缩放级别的问题,但我找不到如何替换 projection.fromLatLngToPixel(markerPoint, mapZoom);

function makePolyPoints(_marker)
{
    var polyPoints = Array();
    var markerPoint=  _marker.getPosition();
    var projection = map.getProjection();
    var mapZoom = map.getZoom();
    var clickedPixel = projection.fromLatLngToPoint(markerPoint);

    var  ellipseRadA = 20;
    var ellipseRadB = 10;

    var polyNumSides = 20;
    var polySideLength = 18;

    for (var a = 0; a<(polyNumSides+1); a++) {
        var aRad = polySideLength*a*(Math.PI/180);
        var pixelX =  clickedPixel.x + ellipseRadA * Math.cos(aRad);
        var pixelY = -3 + clickedPixel.y + ellipseRadB * Math.sin(aRad);
        var polyPixel = new google.maps.Point(pixelX,pixelY);
        var polyPoint = projection.fromPointToLatLng(polyPixel);
        polyPoints.push(polyPoint);
    }
    return polyPoints;
}
4

1 回答 1

3

嗯.. 我将使用我最喜欢的 gmap 示例之一来帮助您。

使用var clickedPixel = projection.fromLatLngToPoint(markerPoint);不给你还 clickedPixel 坐标,它们仍然是世界坐标。请参阅投影规格

在计算那种东西时指定自己的墨卡托投影很有用。仔细查看以下几行:(在此代码示例中

var worldCoordinate = projection.fromLatLngToPoint(chicago);
    var pixelCoordinate = new google.maps.Point(
    worldCoordinate.x * numTiles,
    worldCoordinate.y * numTiles);

(您可以使用 firebug 或类似工具查看源代码)。

如果你没有它(在 mozilla 中:工具 -> Web 开发人员 -> 页面源)

希望这将帮助您解决问题:)

于 2013-01-31T16:05:37.587 回答