2013-05-07 96 views
-2

我有一个PHP函数可以创建一个kml文件。 (我验证了输出,它是一个有效的KML文件)。谷歌地图不链接kml文件

然后,我用谷歌地图与这些文件,但我不知道为什么,在地图上显示无数据...

在PHP中,我有这样的:

//some stuff here 
return 'iniMap("", "", "http://my.web.com/Class/API/GMaps/Rep/'.$g->make($l, $a, $user).'.kml")'; 

这函数通过AJAX调用,所以返回的字符串将使用JS“eval()”进行评估。我的谷歌地图功能:

/*GOOGLE MAPS FUNCTIONS*/ 
function iniMap(x,y,url){ 
    n=document.createElement('DIV'); 
    n.id='map_canvas'; 
    ge('con').appendChild(n); 
    var latlng=new google.maps.LatLng(x,y); 
    var map=new google.maps.Map(ge("map_canvas"),{zoom:6,center:latlng,mapTypeId:google.maps.MapTypeId.ROADMAP}); 
    var div1=document.createElement('DIV'); 
    var homeControl1=new makeControl(div1,'t1'); 
    var div2=document.createElement('DIV'); 
    var homeControl2=new makeControl(div2,'t2'); 
    var div3=document.createElement('DIV'); 
    var homeControl3=new makeControl(div3,'t3'); 
    var div4=document.createElement('DIV'); 
    var homeControl4=new makeControl(div4,'t4'); 
    var ctaLayer=new google.maps.KmlLayer(url); 
    div1.index = 1; 
    map.controls[google.maps.ControlPosition.TOP_RIGHT].push(div1); 
    div2.index = 2; 
    map.controls[google.maps.ControlPosition.TOP_RIGHT].push(div2); 
    div3.index = 3; 
    map.controls[google.maps.ControlPosition.TOP_RIGHT].push(div3); 
    div4.index = 4; 
    map.controls[google.maps.ControlPosition.TOP_RIGHT].push(div4); 
    ctaLayer.setMap(map); 
} 

function makeControl(d,t){ 
    d.style.padding='5px'; 
    var controlUI=document.createElement('DIV'); 
    controlUI.style.backgroundColor='#FEFEFE'; 
    controlUI.style.borderStyle='solid'; 
    controlUI.style.borderWidth='1px'; 
    controlUI.style.cursor='pointer'; 
    controlUI.style.textAlign='center'; 
    controlUI.style.width='60px'; 
    controlUI.style.height='17px'; 
    d.appendChild(controlUI); 
    var controlText=document.createElement('DIV'); 
    controlText.style.fontFamily='Arial,sans-serif'; 
    controlText.style.fontSize='12px'; 
    controlText.style.paddingLeft='4px'; 
    controlText.style.paddingRight='4px'; 
    controlText.innerHTML=t; 
    controlUI.appendChild(controlText); 
    google.maps.event.addDomListener(controlUI,'click',function(){doAction(t);}); 
} 

function doAction(t){ 
    if(t=='t1'){document.location.href='http://my.web.com?t=sy0'} 
    else if(t=='t2'){document.location.href='http://my.web.com?t=sm0'} 
    else if(t=='t3'){document.location.href='http://my.web.com?t=sw0'} 
    else if(t=='t4'){document.location.href='http://my.web.comt=sd0'} 
} 

我做错了吗? 谢谢!

+0

是您的KML文件[托管在一个公开的Web服务器(https://developers.google.com/maps/documentation/javascript/reference #KmlLayer)? – geocodezip 2013-05-07 12:36:02

+0

是的。我的意思是,我可以把“my.web.com/Class/API/GMaps/Rep/name_of_file.kml”和谷歌Chrome下载它... – David 2013-05-07 13:11:28

+0

my.web.com看起来并不像一个公开的网络服务器。问题是谷歌可以将它下载到他们的服务器来渲染图块,而不是在浏览器中下载它。如果您将网址传递到[Google地图](http://maps.google.com),会发生什么情况,例如[this](https://maps.google.com/maps?q=http:%2F%2Fwww。 geocodezip.com%2Fgeoxml3_test%2Fso_kml.kml&HL = EN&SLL = 32.824552,-117.108978&SSPN = 0.691256,0.883026&T = H&Z = 16)? – geocodezip 2013-05-07 13:38:11

回答

0

我修复了这个问题...

这是一个缓存问题。也许一些带有不良数据文件被缓存,因此,我的功能总是越来越坏文件...

今天我改变生成的文件名的方式,并在地图开始工作......

感谢@geocodezip所有的答案,并在浪费时间对不起...