将图片地图附加到Google Map中

        Google的没有中国的地理信息数据,这是我们使用Google Maps API遇到的最大的问题,如果能够将已有的图片地图附加到Google Maps里面,那将可以达成图片地图站Google Map的互补——将Google地图的整体性和图片地图的数据结合起来。

        怎么实现呢?首先是怎么显示图片,要将一张图片进行拉伸、旋转之后显示在地图上(这是必要的,因为地图所使用的坐标系统和Google Maps很可能不同),Google Maps API并没有提供相关的功能,我们可以通过自定义Overlay来实现这个功能,下面是我实现的一个自定义Overlay的代码:

 

 1None.gif     function K_ImageControl(imageUrl,bounds,rotation,opacity)
 2
None.gif    {
 3
None.gif        this.imageUrl=imageUrl;
 4
None.gif        this.bounds=bounds;
 5
None.gif        this.rotation=-rotation;
 6
None.gif        this.opacity=opacity||0.45;
 7
None.gif    }
 8
None.gif    K_ImageControl.prototype.initialize=function(a)
 9
None.gif    {
10
None.gif        this.map=a;
11
None.gif        this.drawElement=a.ownerDocument.createElement("v:Image");
12
None.gif        this.drawElement.style.position="absolute";
13
None.gif        this.drawElement.style.filter="progid:DXImageTransform.Microsoft.Alpha(opacity="+(this.opacity*100)+");";
14
None.gif        this.drawElement.style.rotation=this.rotation;
15
None.gif    this.drawElement.src=this.imageUrl;
16
None.gif        if(browser.type==1)
17
None.gif        {
18
None.gif            this.drawElement.unselectable="on";
19
None.gif            this.drawElement.onselectstart=function(){return false};
20
None.gif        }
21
None.gif        else
22
None.gif        {
23
None.gif            this.drawElement.style.MozUserSelect="none"
24
None.gif        }
25
None.gif        if(browser.type==1)
26
None.gif        {
27
None.gif            this.drawElement.galleryImg="no"
28
None.gif        }
29
None.gif        this.drawElement.style.border="0";
30
None.gif        this.drawElement.style.padding="0";
31
None.gif        this.drawElement.style.margin="0";
32
None.gif        this.drawElement.οncοntextmenu=function(){return false};
33
None.gif        this.drawElement.appendChild(this.drawElement);
34
None.gif        a.markerPane.appendChild(this.drawElement);
35
None.gif    };
36
None.gif    K_ImageControl.prototype.redraw=function(a)
37
None.gif    {
38
None.gif        if(!a)return;
39
None.gif        var b=this.map.spec.getBitmapCoordinate(this.bounds.minY,this.bounds.minX,this.map.zoomLevel);
40
None.gif        var min=this.map.getDivCoordinate(b.x,b.y);
41
None.gif        b=this.map.spec.getBitmapCoordinate(this.bounds.maxY,this.bounds.maxX,this.map.zoomLevel);
42
None.gif        var max=this.map.getDivCoordinate(b.x,b.y);
43
None.gif        this.drawElement.style.left=(min.x)+"px";
44
None.gif        this.drawElement.style.top=(max.y)+"px";
45
None.gif        this.drawElement.style.width=(max.x-min.x)+"px";
46
None.gif        this.drawElement.style.height=(min.y-max.y)+"px";
47
None.gif    };
48
None.gif    K_ImageControl.prototype.setOpacity=function(opacity)
49
None.gif    {
50
None.gif        this.opacity=opacity||0.45;
51
None.gif        this.drawElement.style.filter="progid:DXImageTransform.Microsoft.Alpha(opacity="+(this.opacity*100)+");";
52
None.gif    }
53
None.gif    K_ImageControl.prototype.copy=function(){return new K_ImageControl(this.imageUrl,this.bounds,this.rotation,this.opacity)};
54
None.gif    K_ImageControl.prototype.remove=window.GPolyline.prototype.remove;
55
None.gif    K_ImageControl.prototype.display=window.GPolyline.prototype.display;
56
None.gif    K_ImageControl.prototype.setZIndex=window.GPolyline.prototype.setZIndex;
57None.gif    K_ImageControl.prototype.getLatitude=function(){return 180};

        在以上代码中,我使用了VML的v:image来实现图片的旋转功能,在使用此Overlay时,和Google集成的GMarker和GPolyline用法一样,定义时各参数如下

      imageUrl    图片的地址
      GBounds   图片的显示区域,是
GBounds类型,如果图形需要旋转,则是旋转前的矩形区域
      rotation      图片的旋转角,用度数表示-180~180
      opcity         图片的不透明度0~1

例如通过如下代码将图片附加到地图上:

1None.gif     imageOverlay=new K_ImageControl("http://www.qh.xinhuanet.com/qhpd/picture/qinghai.jpg",new GBounds(89.04898,31.54021,103.3235,39.26913),-1);
2
None.gif    map.addOverlay(imageOverlay);
3None.gif    imageOverlay.display(true);

        另外,在运行时可以通过setOpcity来更改透明度。

        这样,就算成功了一半,可是,图片究竟要显示在Google 地图的哪儿呢?这就涉及到图片所描绘的坐标的确定的问题,可以说,大部分的图片,我们都不能直接知道该图片描绘的区域经纬度,因此,我写了一个基于AJAX框架的网页来计算这个问题,如果指定图片上三个点的经纬度并发送到WebService,就能够从返回结果中读到该图片地图的GBounds和rotation,

        详情可以查看本站地图服务的“添加图片功能”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值