私はこの奇妙な問題があります。別々のKMLファイルから1つのマップウィンドウに多くのKMLレイヤーを生成する必要があります。金額はカップルのようなものから50ドル未満のものまでさまざまです。現時点では、私のコードは、1,4、または15のKMLファイル(URIとして)を配列として与えているときに正しい動作を生成しています。さて、基本的に私のコードは機能的で、KMLファイルは十分に有効であることが分かります。ここで Google Maps APIベースのページで15以上のKMLレイヤーが表示されない
は、私が23 KML URIの配列で、私のマップの初期化を呼び出す方法の例です:私は16を持っている配列私のコードを与えているときしかし、問題は、発生する<body id="body" onload="initmap(new Array('https://CENCORED/kml/project64.kml', 'https://CENCORED/kml/project65.kml', 'https://CENCORED/kml/project66.kml', 'https://CENCORED/kml/project67.kml', 'https://CENCORED/kml/project69.kml', 'https://CENCORED/kml/project70.kml', 'https://CENCORED/kml/project71.kml', 'https://CENCORED/kml/project72.kml', 'https://CENCORED/kml/project75.kml', 'https://CENCORED/kml/project76.kml', 'https://CENCORED/kml/project80.kml', 'https://CENCORED/kml/project81.kml', 'https://CENCORED/kml/project82.kml', 'https://CENCORED/kml/project83.kml', 'https://CENCORED/kml/project84.kml', 'https://CENCORED/kml/project85.kml', 'https://CENCORED/kml/project86.kml', 'https://CENCORED/kml/project87.kml', 'https://CENCORED/kml/project88.kml', 'https://CENCORED/kml/project89.kml', 'https://CENCORED/kml/project90.kml', 'https://CENCORED/kml/project91.kml', 'https://CENCORED/kml/project92.kml'))">
(16 )以上のKML URI。これらのKMLファイルはマップキャンバスにレンダリングされません。しかし、どこにでもエラーは出現せず、また、私はKMLファイルがマップ上にあることを知っています。これをどうやって知るのですか?私のコードではKMLファイルごとにInfoWindowが生成されていますが、一部のKMLファイルがどこにあるのか知っているので、クリックしても表示されません。レンダリングされず、InfoWindowが表示されます。ちょうど意図通り。
ここに、私のmap_display.jsの完全な内容があります。そこには、呼び出された関数initmap()が含まれています。
function initmap(urls){
// Creating an option object for the map
var myLatlng = new google.maps.LatLng(63.349501, 26.817627);
var options = {
zoom: 6,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
// Initializing the map
var map = new google.maps.Map(document.getElementById('map_canvas'), options);
if(urls != null) {
for(var i=0;i<urls.length;i++) {
var url = urls[i];
url = url+"?dummy="+(new Date()).getTime();
var ctaLayer = createKML(url);
ctaLayer.setMap(map);
}
}
function createKML(url){
var ctaLayer = new google.maps.KmlLayer(url, {suppressInfoWindows: true, preserveViewport: true});
// Creating a correct reference for project edit URL
var editUrl = urls[i];
var s1 = editUrl.indexOf("project");
s1 = s1+7;
var s2 = editUrl.indexOf(".kml");
editUrl = editUrl.substring(s1, s2);
var baseUrl = getbaseUrl();
var infoItems = new Array();
infoItems = getInfo(editUrl);
editUrl = '<b>' + infoItems[1] + '</b><br />' + infoItems[0] + '<br /><br /><a href="' + baseUrl + '/frontend/viewproject/' + editUrl + '">Katso projektin tiedot</a>';
// Creating an InfoWindow object
var infowindow = new google.maps.InfoWindow({ content: editUrl });
google.maps.event.addListener(ctaLayer, 'click', function(kmlEvent) {
var clickPos = kmlEvent.latLng;
var posX = new google.maps.LatLng(clickPos.lat(), clickPos.lng());
infowindow.close();
infowindow.setPosition(posX);
infowindow.open(map);
});
return ctaLayer;
}
function getbaseUrl(){
var baseUrl = "https://" + window.location.hostname;
var firstpath = window.location.pathname;
var first_slash = firstpath.indexOf("/", 1);
firstpath = firstpath.substring(0, first_slash);
baseUrl = baseUrl + firstpath;
return baseUrl;
}
function getInfo(pid){
var jsoninfo = new Array();
var xmlhttp;
if (window.XMLHttpRequest)
{
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
var json_location = getbaseUrl() + '/frontend/project_json/' + pid;
xmlhttp.open("GET",json_location,false);
xmlhttp.send();
var json_answer = eval('(' + xmlhttp.responseText + ')');
jsoninfo[0] = json_answer["projectName"];
jsoninfo[1] = json_answer["builder"];
return jsoninfo;
}
}
誰か助けてもらえますか?申し訳ありませんが、パスワードで保護されている大きなページの一部であるため、ライブシステムを参照することはできません。
GeoXML3は、少なくとも今のところ私の問題を解決しました。 :) –