ก่อนหน้านี้ฉันเคยถามคำถามนี้เพื่อประโยชน์ไม่ดังนั้นฉันคิดว่าการวางที่นี่จะเป็นความคิดที่ดี
นี่คือตัวอย่างเมื่อ:
วิธีรีเฟรช / โหลดเลเยอร์ KML ใน OpenLayers เลเยอร์ KML แบบไดนามิก ดูคำตอบของฉันด้านล่าง
TLDR:ดูคำตอบของฉันด้านล่าง
ก่อนหน้านี้ฉันเคยถามคำถามนี้เพื่อประโยชน์ไม่ดังนั้นฉันคิดว่าการวางที่นี่จะเป็นความคิดที่ดี
นี่คือตัวอย่างเมื่อ:
วิธีรีเฟรช / โหลดเลเยอร์ KML ใน OpenLayers เลเยอร์ KML แบบไดนามิก ดูคำตอบของฉันด้านล่าง
TLDR:ดูคำตอบของฉันด้านล่าง
คำตอบ:
คิดว่ามันยากสำหรับฉันที่จะหาข้อมูลเกี่ยวกับสิ่งนี้ฉันจะเพิ่มสิ่งนี้:
1)
สร้างเลเยอร์ KML:
//Define your KML layer
var MyKmlLayer= new OpenLayers.Layer.Vector("This Is My KML Layer", {
//Set your projection and strategies//
projection: new OpenLayers.Projection("EPSG:4326"),
strategies: [new OpenLayers.Strategy.Fixed()],
//set the protocol with a url//
protocol: new OpenLayers.Protocol.HTTP({
//set the url to your variable//
url: mykmlurl,
//format this layer as KML//
format: new OpenLayers.Format.KML({
//maxDepth is how deep it will follow network links//
maxDepth: 1,
//extract styles from the KML Layer//
extractStyles: true,
//extract attributes from the KML Layer//
extractAttributes: true
})
})
});
2)
ตั้งค่า URL สำหรับเลเยอร์ KML:
//note that I have host equal to location// //Math.Random will stop caching//
var mykmlurl= 'http://' + host + '/KML?key=' + Math.random();
3)
กำหนดช่วงเวลาที่จะรีเฟรชเลเยอร์ของคุณ:
//function called// //timer// //layer to refresh//
window.setInterval(UpdateKmlLayer, 5000, MyKmlLayer);
4)
ฟังก์ชั่นเพื่ออัปเดตเลเยอร์:
function UpdateKmlLayer(layer) {
//setting loaded to false unloads the layer//
layer.loaded = false;
//setting visibility to true forces a reload of the layer//
layer.setVisibility(true);
//the refresh will force it to get the new KML data//
layer.refresh({ force: true, params: { 'key': Math.random()} });
//- <3 from Thqr -//
}
ความหวังทำให้สิ่งนี้ง่ายขึ้นสำหรับบางคนที่อยู่ที่นั่น โชคดี.
ฉันได้รับการวางกับสิ่งนี้เพื่อประโยชน์ บางคนจะดูรหัสของฉันแล้วบอกฉันว่าฉันทำอะไรผิดหรือเปล่า? ขอบคุณ!
<html>
<head>
<title>Test</title>
<link rel="stylesheet" href="http://openlayers.org/api/theme/default/style.css" type="text/css" />
<link rel="stylesheet" href="http://openlayers.org/dev/examples/style.css" type="text/css" />
<script src='http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAl9RMqSzhPUXAfeBCXOussRTQDbvAygy0cfGJr8dEMAYKf3RWNBQqP9mjKIsqTfmAlz5LOJ3Xpy5s4w'></script>
<script src="http://openlayers.org/api/OpenLayers.js"></script>
<script type="text/javascript">
var map;
function init() {
// Create the map object
map = new OpenLayers.Map('map');
// Create a Google layer
var gmap = new OpenLayers.Layer.Google(
"Google Streets", // the default
{numZoomLevels: 20}
);
// Add layer to map
map.addLayer(gmap);
map.setCenter(new OpenLayers.LonLat(-112.1161, 33.6636), 13);
}
var MyKmlLayer= new OpenLayers.Layer.Vector("This Is My KML Layer", {
//Set your projection and strategies//
projection: new OpenLayers.Projection("EPSG:4326"),
strategies: [new OpenLayers.Strategy.Fixed()],
//set the protocol with a url//
protocol: new OpenLayers.Protocol.HTTP({
//set the url to your variable//
url: C:/Users/person/desktop/test.kml,
//format this layer as KML//
format: new OpenLayers.Format.KML({
//maxDepth is how deep it will follow network links//
maxDepth: 1,
//extract styles from the KML Layer//
extractStyles: true,
//extract attributes from the KML Layer//
extractAttributes: true
})
})
});
var proposedanchorpositionurl = 'http://' + host + '/KML?key=' + Math.random();
window.setInterval(UpdateKmlLayer, 5000, MyKmlLayer);
function UpdateKmlLayer(layer) {
//setting loaded to false unloads the layer//
layer.loaded = false;
//setting visibility to true forces a reload of the layer//
layer.setVisibility(true);
//the refresh will force it to get the new KML data//
layer.refresh({ force: true, params: { 'key': Math.random()} });
//- <3 from Thqr -//
}
</script>
</head>
<body onload="init()">
<h1 id="title">test</h1>
<div id="map" class=""></div>
</body>
</html>
ขออภัยฉันต้องแก้ไขรหัสที่ไม่สมบูรณ์ของคุณ ควรรันในเวลานี้
คุณอาจต้องการดูกลยุทธ์รีเฟรช http://dev.openlayers.org/releases/OpenLayers-2.11/doc/apidocs/files/OpenLayers/Strategy/Refresh-js.html
ยังไม่ทดลองอะไรอย่างนี้?
<script src="http://openlayers.org/api/OpenLayers.js"></script>
<script type="text/javascript">
var map;
function init() {
// Create the map object
map = new OpenLayers.Map('map');
// Create a Google layer
var gmap = new OpenLayers.Layer.Google(
"Google Streets", // the default
{numZoomLevels: 20}
);
// Add layer to map
map.addLayer(gmap);
map.setCenter(new OpenLayers.LonLat(-112.1161, 33.6636), 13);
var KMLURL = 'C:/Users/person/desktop/test.kml?' + Math.random();
var MyKmlLayer= new OpenLayers.Layer.Vector("This Is My KML Layer", {
//Set your projection and strategies//
projection: new OpenLayers.Projection("EPSG:4326"),
strategies: [new OpenLayers.Strategy.Fixed()],
//set the protocol with a url//
protocol: new OpenLayers.Protocol.HTTP({
//set the url to your variable//
url: KMLURL,
//format this layer as KML//
format: new OpenLayers.Format.KML({
//maxDepth is how deep it will follow network links//
maxDepth: 1,
//extract styles from the KML Layer//
extractStyles: true,
//extract attributes from the KML Layer//
extractAttributes: true
})
})
});
window.setInterval(UpdateKmlLayer, 5000, MyKmlLayer);
function UpdateKmlLayer(layer) {
//setting loaded to false unloads the layer//
layer.loaded = false;
//setting visibility to true forces a reload of the layer//
layer.setVisibility(true);
//the refresh will force it to get the new KML data//
layer.refresh({ force: true, params: { 'key': Math.random()} });
//- <3 from Thqr -//
}
}
</script>