关于openlayers 今天刚接触到openlayers这个东西,感觉挺好的,我从google的地图上抓了四张256*256的图片,放在自己的工程中,用OpenLayers.Layer.Image只能用一张图片作为地图,现在想把四张都用上弄成一张地图,该怎么弄呢??望大侠们给个帮助。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title>无标题页</title> <link rel="stylesheet" href="res/default/style.css" type="text/css" /> <link rel="stylesheet" href="res/style.css" type="text/css" /> <script type="text/javascript" src="res/OpenLayers.js"></script> <script type="text/javascript">var MinX = 22;var MinY = 10;var MaxX = 28;var MaxY = 14;var lat,lon;if (location.search == "") {//全国// lon=120.363808;// lat=36.088506; lat=36.738403; lon=119.161835; zoom=6; } else { //http://ditu.google.cn/?ie=UTF8&ll=31.230344,121.472569&spn=0.015633,0.026436&z=15 //http://ditu.google.cn/maps?f=q&hl=zh-CN&geocode=&q=%E9%9D%92%E5%B2%9B&ie=UTF8&ll=36.088506,120.363808&spn=0.118745,0.211487&z=12&iwloc=addrvar PI = 3.14159265358979323846;lon = lon * 20037508.34 / 180;lat = Math.log (Math.tan ((90 + lat) * PI / 360)) / (PI / 180);lat = lat * 20037508.34 / 180;}var map;function get_imap_url (bounds) {// var res = this.map.getResolution();// var x = Math.round ((bounds.left - this.maxExtent.left) / (res * this.tileSize.w)); //this 是指图层// var y = Math.round ((this.maxExtent.top - bounds.top) / (res * this.tileSize.h));// var z = 17 - this.map.getZoom();// // //----------------------------------// //shanghai 109760 53556 qingdao 109344 51424 from coords.txt // //naming rule://map/1x/000/1x000000.png// var myBounds={left:109344,top:51424};//109344 51424// var myDir0=Math.pow(2,z); // x = Math.round (x - myBounds.left/myDir0 );// var myTileNum="000";// if(x>=0)// {// myTileNum=x.toString();// if(myTileNum.length==1)myTileNum="00"+myTileNum;// if(myTileNum.length==2)myTileNum="0"+myTileNum;// // } // y =Math.round (y - myBounds.top/myDir0 );// var myTileDir="000";// // if(y>=0)// {// myTileDir=y.toString();// if(myTileDir.length==1)myTileDir="00"+myTileDir;// if(myTileDir.length==2)myTileDir="0"+myTileDir;// // } // // var path = myDir0+"x/"// + myTileDir + "/" // + myDir0+"x" + myTileDir + myTileNum + "." + this.type;// if(x<0 || y<0)path="blank.png"; // var url = this.url;// if (url instanceof Array)// {// url = this.selectUrl(path, url);// } // //alert(url + path);// return url + path; var res = this.map.getResolution(); var bbox = this.map.getMaxExtent(); var size = this.tileSize; var x = Math.round ((bounds.left - bbox.left) / (res * size.w)); var y = Math.round ((bbox.top - bounds.top) / (res * size.h)); var z = this.map.getZoom()+3; var path ="gm_" + x + "_" + y + "_" + z + "." + this.type; var url = this.url; if (url instanceof Array) { url = this.selectUrl(path, url); } return url + path; } function init() { map = new OpenLayers.Map ("map", { controls: [ new OpenLayers.Control.Permalink(), new OpenLayers.Control.MouseDefaults(), new OpenLayers.Control.LayerSwitcher(), new OpenLayers.Control.MousePosition(), new OpenLayers.Control.PanZoomBar() ], maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34), //Resolution=20037508*2/256*2^(zoom+1),zoom取值0~15 // numZoomLevels:19, // maxResolution:156543.0339, numZoomLevels:16, maxResolution:156543.0339/8, units:'m',//, //projection: "EPSG:41001" projection: "EPSG:900913", displayProjection: new OpenLayers.Projection("EPSG:4326") } ); myHome = new OpenLayers.Layer.TMS( "测试", "map/", {type:'png', getURL: get_imap_url} ); map.addLayers([myHome]); var lonLat = new OpenLayers.LonLat(lon,lat); //map.setCenter (lonLat, 12); //map.zoomToExtent(new OpenLayers.Bounds(119.194965, 36.746243, 119.130549, 36.729873 )); map.setCenter (lonLat, zoom); }; </script></head><body onload="init()"> <form id="form1" runat="server"> <h1 id="title"> Zoomify Layer Example</h1> <div id="tags"> </div> <p id="shortdesc"> Demo of a layer with Zoomify tiles. </p> <div id="map" class="smallmap"> </div> </form></body></html> 可以直接用缓存里的图片,不过要改一下文件名本例:是gm_x_y_z.png这个例子坐标映射可能还有点问题 谢谢naitboy的回答,我现在已经用您的代码实现了本地tiles显示!您说坐标映射有问题,其实没有问题,只是您的代码写错了而已,只需要将您的代码中if语句下的“{ else .......}”删除掉就没事了。(把错误找出,让更多人不走弯路!) 初学jquery,求教下一步的学习方向 js中的prototype 招聘:HTML页面工程师 怎么在javascript中获取<input type="img">信息 iframe选中区域问题 JS使用正则的小问题,请高人指点 请问如何实现 将整个 页面的所有 控件 的 enabled 属性 设为 false ?????? 急!!! 求jquery代码! 如何得到图片大小 循环嵌套的问题 求js区正则高手给一个正则表达式 firefox下实现用js选择文本框中的一段文本的问题
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无标题页</title>
<link rel="stylesheet" href="res/default/style.css" type="text/css" />
<link rel="stylesheet" href="res/style.css" type="text/css" /> <script type="text/javascript" src="res/OpenLayers.js"></script> <script type="text/javascript">var MinX = 22;
var MinY = 10;
var MaxX = 28;
var MaxY = 14;var lat,lon;if (location.search == "")
{
//全国
// lon=120.363808;
// lat=36.088506;
lat=36.738403;
lon=119.161835;
zoom=6;
}
else
{
//http://ditu.google.cn/?ie=UTF8&ll=31.230344,121.472569&spn=0.015633,0.026436&z=15
//http://ditu.google.cn/maps?f=q&hl=zh-CN&geocode=&q=%E9%9D%92%E5%B2%9B&ie=UTF8&ll=36.088506,120.363808&spn=0.118745,0.211487&z=12&iwloc=addr
var PI = 3.14159265358979323846;
lon = lon * 20037508.34 / 180;
lat = Math.log (Math.tan ((90 + lat) * PI / 360)) / (PI / 180);
lat = lat * 20037508.34 / 180;
}
var map;
function get_imap_url (bounds)
{
// var res = this.map.getResolution();
// var x = Math.round ((bounds.left - this.maxExtent.left) / (res * this.tileSize.w)); //this 是指图层
// var y = Math.round ((this.maxExtent.top - bounds.top) / (res * this.tileSize.h));
// var z = 17 - this.map.getZoom();
//
// //----------------------------------
// //shanghai 109760 53556 qingdao 109344 51424 from coords.txt
// //naming rule://map/1x/000/1x000000.png
// var myBounds={left:109344,top:51424};//109344 51424
// var myDir0=Math.pow(2,z);
// x = Math.round (x - myBounds.left/myDir0 );
// var myTileNum="000";
// if(x>=0)
// {
// myTileNum=x.toString();
// if(myTileNum.length==1)myTileNum="00"+myTileNum;
// if(myTileNum.length==2)myTileNum="0"+myTileNum;
//
// }
// y =Math.round (y - myBounds.top/myDir0 );
// var myTileDir="000";
//
// if(y>=0)
// {
// myTileDir=y.toString();
// if(myTileDir.length==1)myTileDir="00"+myTileDir;
// if(myTileDir.length==2)myTileDir="0"+myTileDir;
//
// }
//
// var path = myDir0+"x/"
// + myTileDir + "/"
// + myDir0+"x" + myTileDir + myTileNum + "." + this.type;
// if(x<0 || y<0)path="blank.png";
// var url = this.url;
// if (url instanceof Array)
// {
// url = this.selectUrl(path, url);
// }
// //alert(url + path);
// return url + path;
var res = this.map.getResolution();
var bbox = this.map.getMaxExtent();
var size = this.tileSize; var x = Math.round ((bounds.left - bbox.left) / (res * size.w));
var y = Math.round ((bbox.top - bounds.top) / (res * size.h));
var z = this.map.getZoom()+3; var path ="gm_" + x + "_" + y + "_" + z + "." + this.type;
var url = this.url;
if (url instanceof Array) {
url = this.selectUrl(path, url);
}
return url + path;
} function init()
{
map = new OpenLayers.Map ("map",
{
controls:
[
new OpenLayers.Control.Permalink(),
new OpenLayers.Control.MouseDefaults(),
new OpenLayers.Control.LayerSwitcher(),
new OpenLayers.Control.MousePosition(),
new OpenLayers.Control.PanZoomBar()
],
maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
//Resolution=20037508*2/256*2^(zoom+1),zoom取值0~15
// numZoomLevels:19,
// maxResolution:156543.0339,
numZoomLevels:16,
maxResolution:156543.0339/8,
units:'m',//,
//projection: "EPSG:41001"
projection: "EPSG:900913",
displayProjection: new OpenLayers.Projection("EPSG:4326")
}
); myHome = new OpenLayers.Layer.TMS(
"测试",
"map/",
{type:'png', getURL: get_imap_url} );
map.addLayers([myHome]);
var lonLat = new OpenLayers.LonLat(lon,lat);
//map.setCenter (lonLat, 12);
//map.zoomToExtent(new OpenLayers.Bounds(119.194965, 36.746243, 119.130549, 36.729873 )); map.setCenter (lonLat, zoom);
};
</script></head>
<body onload="init()">
<form id="form1" runat="server">
<h1 id="title">
Zoomify Layer Example</h1>
<div id="tags">
</div>
<p id="shortdesc">
Demo of a layer with Zoomify tiles.
</p>
<div id="map" class="smallmap">
</div>
</form>
</body>
</html>
这个例子坐标映射可能还有点问题
(把错误找出,让更多人不走弯路!)