Script för nedladdning av stort flygfoto över stockholm
Hej! Jag undrar om nån skulle vilja hjälpa mig med att ladda hem två väldigt högupplösta flygfoton över Stockholm, ett från 1958 och ett från 2011, samma vy. Dessa två flygfoton är uppdelade i 23409 olika bilder vardera, men URLerna följer ett simpelt mönster:
url/x/y.jpg
där x och y har värdet 0-152
url är alltså två olika urler, men det kan man ju ändra manuellt och köra scriptet en andra gång:
http://www.lantmateriet.se/Global/Kartor%20och%20geografisk%2...
http://www.lantmateriet.se/Global/Kartor%20och%20geografisk%2...
här kan ni se flygfotona sida vid sida:
http://www.lantmateriet.se/Global/Kartor%20och%20geografisk%2...
Här är källkoden för javascriptet som sköter allt:
<script src="OpenLayers-2.12/OpenLayers.js" type="text/javascript"></script>
<script type="text/javascript">
var map,map2;
var isok=false, inresize1=false, inresize2=false;
var mapDisplayLayout=true;
var mapBounds = new OpenLayers.Bounds( 656500.0, 6575500.0, 676500.0, 6595500.0);
var mapBounds2 =new OpenLayers.Bounds( 656500.0, 6575500.0, 676500.0, 6595500.0);
// avoid pink tiles
OpenLayers.IMAGE_RELOAD_ATTEMPTS = 2;
OpenLayers.Util.onImageLoadErrorColor = "transparent";
function init(){
var options = {
controls: [],
maxExtent: new OpenLayers.Bounds( 656500.0, 6575500.0, 676500.0, 6595500.0),
restricted:true, maxResolution: 128.000000,
numZoomLevels: 9,
eventListeners: {"move": myFunction, "zoomend": myFunctionEnd}
};
var options2 = {
controls: [],
maxExtent: new OpenLayers.Bounds( 656500.0, 6575500.0, 676500.0, 6595500.0),
maxResolution: 128.000000,
numZoomLevels: 9,
eventListeners: {"move": myFunction2, "zoomend": myFunction2}
};
map = new OpenLayers.Map('maptd2', options);
map2 = new OpenLayers.Map('maptd1', options2);
var layer = new OpenLayers.Layer.TMS( "2011","",
{ url: '', serviceVersion: '.', layername: '.', alpha: false,buffer: 4,
type: 'jpg', getURL: overlay_getTile1URL});
var layer2 = new OpenLayers.Layer.TMS( "1958","",
{ url: '', serviceVersion: '.', layername: '.', alpha: false, buffer: 4,
type: 'jpg', getURL: overlay_getTile2URL});
map.addLayers([layer]);
map2.addLayers([layer2]);
//map.addControl(new OpenLayers.Control.LayerSwitcher());
//map.addControl(new OpenLayers.Control.CacheRead());
var nav= new OpenLayers.Control.Navigation({autoActivate: true, documentDrag: true});
map.addControl(nav);
//map2.addControl(new OpenLayers.Control.LayerSwitcher());
//map2.addControl(new OpenLayers.Control.CacheRead());
var nav2= new OpenLayers.Control.Navigation({zoomBoxEnabled: true, autoActivate: true, documentDrag: true});
map2.addControl(nav2);
map2.addControl(new OpenLayers.Control.PanZoomBar());
isok=true;
map.setCenter(new OpenLayers.LonLat(668639,6584922), 8, false,true);
}
function changeDisplay() {
var b= map.getExtent();
if (mapDisplayLayout == true) {
mapDisplayLayout= false;
map2.zoomToExtent( b, true);
} else {
mapDisplayLayout= true;
map2.zoomToExtent( b.add(-b.getWidth(),0), true);
}
}
function myFunction() {
if (isok && !inresize2) {
inresize1=true;
var b=map.getExtent();
if (mapDisplayLayout) {
map2.zoomToExtent( map.getExtent().add(-b.getWidth(),0), true);
} else {
map2.zoomToExtent( map.getExtent(), true);
}
inresize1=false;
}
}
function myFunctionEnd() {
if (isok && !inresize2) {
inresize1=true;
var b=map.getExtent();
if (mapDisplayLayout) {
map2.zoomToExtent( map.getExtent().add(-b.getWidth(),0), true);
if(map.getZoom() != map2.getZoom()) {map2.zoomTo( map.getZoom()); }
} else {
map2.zoomToExtent( map.getExtent(), true);
}
inresize1=false;
}
}
function myFunction2() {
if (isok && !inresize1) {
inresize2=true;
var b=map2.getExtent();
if (mapDisplayLayout) {
map.zoomToExtent( map2.getExtent().add(b.getWidth(),0), true);
} else {
map.zoomToExtent( map2.getExtent(),true);
}
inresize2=false;
}
}
function overlay_getTile1URL(bounds) {
var res = this.map.getResolution();
var x = Math.round((bounds.left - this.maxExtent.left) / (res * this.tileSize.w));
var y = Math.round((bounds.bottom - this.maxExtent.bottom) / (res * this.tileSize.h));
var z = this.map.getZoom();
if (x >= 0 && y >= 0) {
return this.url + "sthlm2011/" + z + "/" + x + "/" + y + "." + this.type;
} else {
return "none.png";
}
}
function overlay_getTile2URL(bounds) {
var res = this.map.getResolution();
var x = Math.round((bounds.left - this.maxExtent.left) / (res * this.tileSize.w));
var y = Math.round((bounds.bottom - this.maxExtent.bottom) / (res * this.tileSize.h));
var z = this.map.getZoom();
if (x >= 0 && y >= 0) {
return this.url + "sthlm1958/"+z + "/" + x + "/" + y + "." + this.type;
} else {
return "none.png";
}
}
onresize=function(){ };
</script>
<td id="maptd1"></td><td id="maptd2"></td>
Som ni ser är även z en variabel (0-8), men jag vill endast ha nivå 8, vilket jag fyllde i för URL:erna ovan. Om detta görs i windows, linux eller freebsd spelar mig ingen roll, jag har alla tre. Dock vore det najs om bilderna sparades i samma mappstruktur som de ligger i på servern, dvs någon_path/x/y.jpg
Det känns som om detta borde vara jättelätt att scripta, men jag kan tyvärr inget. Sidan och bilderna är publika så det borde inte heller vara något olagligt. Det som kvarstår sen är att sammanfoga alla bilderna till två jättestora högupplösta bilder, en från 1958 och en från 2011.
Som belöning får ni min eviga tacksamhet samt två väldigt högupplösta bilder över nordvästra stockholm
Kan någon vänlig själ hjälpa mig?