2013-07-08 5 views
0

iframe에서 얻은지도 개체를 사용하여 원을 그리려는 시도는 다음과 같습니다. 이하 Google지도를 사용하여 원 그리기 V3

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>" 오류 을 받고 있어요이다? draw_circle가 이미 정의되어 있지 않은 경우

답변

1

draw_circlenull되지는 undefined이고 비교가 오류로 종료됩니다. 에러를 발생하지 않을 것이다 정의 개체 typeof를 사용하는 대신

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

: 대신 종류를 확인한다.

+0

var draw_circle = null을 추가했습니다. 코드에서 편집하고 질문을 편집했습니다. iframe에서지도 객체를 가져 오는 중에 오류가 있는지 궁금합니다. – user2473430

+0

거기에 사용하는 기능을 모른 채 대답 할 수 없습니다. –

+0

내 질문을 편집했습니다. 제발 좀 봐 주실 수 있습니까? – user2473430

0

몇 가지 아이디어 :

  • draw_circle 경우는 외부 범위에 정의는 다음 아마도 함수에서 draw_circle을 반환 할 필요가 없습니다.
  • var가 설정되었는지 여부를 확인하려면 간단히 if(draw_circle)을 테스트하면됩니다.
  • center이 이미 google.maps.LatLng 개체 인 경우 다른 하나의 동일한 개체를 만들 필요가 없습니다.
  • position 옵션이 존재하지 않습니다 (아무런 해를 끼치 지 않지만 별다른 효과가 없습니다).
  • rad *= 1600/1000가 잘못되었습니다. 1600은 마일에서 미터로의 변환이며, 1000은 킬로미터에서 미터로의 변환입니다. 1600/1000은 다소 이상한 변환 (1000 분의 1 마일에서 미터까지)이 될 것입니다.

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 
    }); 
} 
+0

질문을 편집했습니다. 제발 안내해 주시겠습니까? – user2473430

+0

아마, 약 4 시간 동안은 아니 겠지요. 어쩌면 좋은 여사님 M이 더 많은 시간을 가질 수 있습니다. –

+0

적어도 하나의 매개 변수가 존재하지 않거나 범위를 벗어났기 때문에'modificaradio()'의 호출이 실패한 것처럼 보입니다. 가장 확실한 후보자는'라디오'이다. –