用openlayer显示google地图
2011-06-22 15:51
323 查看
花了一天的时间,从google.ditu下载了地图数据,让后用在openlayer做前台进行显示,完美完成。除了数据不合法一切都好用,有空可以研究一下怎么生成数据。
<script type="text/javascript">
if (location.search == "") {
lon=120.363808;
lat=36.088506;
zoom=17;}
//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;
</script>
<script type="text/javascript" src="OpenLayers.js">
</script>
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));
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.gif";
var url = this.url;
if (url instanceof Array) {
url = this.selectUrl(path, url);
}
//alert(url + path);
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),
numZoomLevels:19, maxResolution:156543, units:'meters', projection: "EPSG:41001"} );
googleAtHome = new OpenLayers.Layer.TMS(
"google@home",
"http://dev.openstreetmap.org/~ojw/Tiles/cycle.php/",
{type:'png', getURL: get_goo_url} );
myHome = new OpenLayers.Layer.TMS(
"My@home",
"http://localhost:8080/map/",
{type:'png', getURL: get_imap_url} );
//map.addLayers([layerThis, layerMultihost, layerTilesAtHome, layerFirefishy, layerSebastian, layerMaplint, layerCycleAtHome, layerMapnik, googleAtHome,myHome]);
map.addLayers([googleAtHome,myHome]);
map.setCenter (new OpenLayers.LonLat(lon, lat), zoom);
}
<script type="text/javascript">
if (location.search == "") {
lon=120.363808;
lat=36.088506;
zoom=17;}
//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;
</script>
<script type="text/javascript" src="OpenLayers.js">
</script>
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));
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.gif";
var url = this.url;
if (url instanceof Array) {
url = this.selectUrl(path, url);
}
//alert(url + path);
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),
numZoomLevels:19, maxResolution:156543, units:'meters', projection: "EPSG:41001"} );
googleAtHome = new OpenLayers.Layer.TMS(
"google@home",
"http://dev.openstreetmap.org/~ojw/Tiles/cycle.php/",
{type:'png', getURL: get_goo_url} );
myHome = new OpenLayers.Layer.TMS(
"My@home",
"http://localhost:8080/map/",
{type:'png', getURL: get_imap_url} );
//map.addLayers([layerThis, layerMultihost, layerTilesAtHome, layerFirefishy, layerSebastian, layerMaplint, layerCycleAtHome, layerMapnik, googleAtHome,myHome]);
map.addLayers([googleAtHome,myHome]);
map.setCenter (new OpenLayers.LonLat(lon, lat), zoom);
}
相关文章推荐
- AngularJs 中使用OpenLayer例子,手机端地图加载不显示问题
- OpenLayer + Ags 综合应用(一)--OpenLayer 地图展现
- 根据经纬度调用Google地图显示对应位置
- openlayers google v3只显示一个marker故障
- (转)PostGIS+QGIS+GeoServer+OpenLayers实现数据的存储、服务的发布以及地图的显示
- 路径正确openLayer也无法获得发布地图
- Google Maps API 2.0解析(10-GMapType GTileLayer _GoogleMapMercSpec _KeyholeMapMercSpec地图类型)
- OpenStreetMap/Google/百度/Bing瓦片地图服务(TMS)
- Google Map开发(一) ASP.NET中调用Google Map API实现简单的地图显示
- OpenStreetMap/Google/百度/Bing瓦片地图服务(TMS)
- OpenStreetMap/Google/百度/Bing瓦片地图服务(TMS)
- Google静态地图-如何显示两点之间路线1(简单路线)
- 用google maps api在网站上显示指定坐标的地图
- OpenLayers 3 之 地图矢量图层(ol.layer.Vector)详解,openlayersvector
- 根据经纬度调用Google地图显示对应位置
- iphone web显示google地图
- openlayer实现仿各大地图的标注点触碰样式变换
- 谷歌(Google)被墙,解决地图和字体无法显示的问题
- openlayer 控制图层显示
- openlayer 高亮显示样式