0

我正在尝试使用从 iframe 获得的地图对象绘制一个圆圈,如下所示。

function modificaradio(){

var mapaZonas = geContentWindow(validateParentParentFrame('ifrmMapaZonasSeguras')).mapZone;
    geContentWindow(validateParentParentFrame('ifrmMapaZonasSeguras')).geoDragzs.setMap(null);
    var centroZonas = geContentWindow(validateParentParentFrame('ifrmMapaZonasSeguras')).newCenter;


    geContentWindow(validateParentParentFrame('ifrmMapaZonasSeguras')).geoDragzs = drawCircle(centroZonas,radio, colorContorno, anchoContorno, opacidadContorno, colorRelleno, opacidadRelleno);

    geContentWindow(validateParentParentFrame('ifrmMapaZonasSeguras')).geoDragzs.setMap(mapaZonas);
}

下面是画圆的函数

function drawCircle(center, radioCirculo,colorContorno,anchoContorno,opacidadContorno,colorRelleno,opacidadRelleno) {
nodes=40;
//se agrega un porcentaje al radio del circulo para su equivalencia en tamaño con mapInfo
var radioExtra = parseInt(radioCirculo * 0.10);
//el radio de la geocerca (dado en metros), se pasa a kilometros
var radioCirculoTot = (parseInt(radioCirculo) + radioExtra) / 1000;

var bounds = new google.maps.LatLngBounds();


var lat1 = new google.maps.LatLng(center.lat() + 0.1, center.lng());
var latConv = google.maps.geometry.spherical.computeDistanceBetween(center, lat1) / 100;
var lng2 = new google.maps.LatLng(center.lat(), center.lng() + 0.1);
var lngConv = google.maps.geometry.spherical.computeDistanceBetween(center, lng2) / 100;
//Loop
var points = [];
var step = parseInt(360 / nodes) || 10;
for (var i = 0; i <= 360; i += step) {
    var pint = new google.maps.LatLng(center.lat() + (radioCirculoTot / latConv * Math.cos(i * Math.PI / 180)), center.lng() +
        (radioCirculoTot / lngConv * Math.sin(i * Math.PI / 180)));
    points.push(pint);
}
points.push(points[0]);
geocercaRadio = new google.maps.Polygon({
        paths: points,
        strokeColor: colorContorno,
        strokeOpacity: opacidadContorno,
        strokeWeight: 2,
        fillColor: colorRelleno,
        fillOpacity: opacidadRelleno
    });

return geocercaRadio;

}

用于创建地图的函数如下。

function cargaMapaZonas(mapa,longitud, latitud, radio, idRadio){
        zoomRadio = validaZoomRadio(idRadio);
        var mapProp = {
            center:new google.maps.LatLng(latitud,longitud),
            zoom:zoomRadio,
            mapTypeId:google.maps.MapTypeId.ROADMAP,
            zoomControl: true,
            zoomControlOptions: {
                style: google.maps.ZoomControlStyle.LARGE
             },
            streetViewControl:false};
            mapZone=new google.maps.Map(document.getElementById(mapa),mapProp);
            radioGeo = radio;

        newCenter = new google.maps.LatLng(latitud, longitud);
        centroDragzs = agregaMarcadorGeo(imgCenterGeo, 10, 10, newCenter);
        centroDragzs.setMap(mapZone);
//      geoDragzs=drawCircle(radioGeo,newCenter,mapZone);
        geoDragzs=drawCircle(newCenter,radioGeo, colorContorno, anchoContorno, opacidadContorno, colorRelleno, opacidadRelleno);
        geoDragzs.setMap(mapZone);
        //geoDragzs.bindTo('center', centroDragzs , 'position');
        geoDragzs.clickable = false;        
        google.maps.event.addListener(centroDragzs, "click", function(){
        var shape = {
                coord: [1, 1, 1, 20, 18, 20, 18 , 1],
                type: 'poly'
            };            
            var bbMarker = new google.maps.Marker({
                    icon: 'img/visor/mm_20_red.png',
                    shadow: 'img/visor/mm_20_shadow.png',
                    shape: shape,
                    position: newCenter,
                    draggable:true,                 
                    map: map
                });
            bbMarker.setMap(mapZone);
            geocoder = new google.maps.Geocoder();

        google.maps.event.addListener(bbMarker, "dragend", function(){
                geoDragzs.setMap(null);
                newCenter = bbMarker.getPosition();
                centroDragzs.setPosition(newCenter);
                geoDragzs=drawCircle(newCenter,radioGeo, colorContorno, anchoContorno, opacidadContorno, colorRelleno, opacidadRelleno);
                geoDragzs.setMap(mapZone);
                bbMarker.setMap(null);
                mapZone.panTo(newCenter);
                parent.document.getElementById("longitud").value = newCenter.lng();
                parent.document.getElementById("latitud").value = newCenter.lat();
                showLocationfp(newCenter);
            });
        });

}

这里的问题是我可以在调用 cargaMapaZonas() 时创建圆圈。但是当我从 modificaradio() 调用时,我收到"invalid value for property <map> <object,object>"错误有人可以指导我吗?

4

2 回答 2

1

draw_circleis not 已经定义时, draw_circleis not null, it'sundefined和比较将以错误结束。改为检查类型:

 if (typeof draw_circle !='undefined')
  {draw_circle.setMap(null);}  

相反,typeof与未定义的对象一起使用不会引发错误。

于 2013-07-08T13:13:42.920 回答
0

一些想法:

  • 如果draw_circle在外部范围内定义,则可能不需要draw_circle从函数返回。
  • 要确定 var 是否已设置,您可以简单地测试if(draw_circle).
  • 如果center已经是一个google.maps.LatLng对象,则无需构造另一个相同的对象。
  • position选项不存在(它不会造成任何伤害,但也没有什么好处)。
  • rad *= 1600 / 1000看起来不对。1600 是(大约)从英里到米的转换,1000 是从公里到米的转换。1600 / 1000 将是一些相当奇怪的转换(千分之一英里到米?)。

iFrame 的提及尚不清楚。我无法评论这方面。

function DrawCircleGeo(rad,center,map) {
    rad *= 1600 / 1000;
    if (draw_circle) {
        draw_circle.setMap(null);
    }
    draw_circle = new google.maps.Circle({
        center: center,
        radius: rad,
        strokeColor: "#FF0000",
        strokeOpacity: 0.8,
        strokeWeight: 2,
        fillColor: "#FF0000",
        fillOpacity: 0.35,
        map: map
    });
}
于 2013-07-08T20:45:07.577 回答