随笔 - 81  文章 - 1033  trackbacks - 0
<2007年9月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

在浮躁的年代里,我们进取心太切,患得患失;虚荣心太强,战战兢兢。一心争强好胜,惟恐榜上无名。
I think I can fly , and flying like a bird !
程序员一名,已售出,缺货中!

我的邮件联系方式

用且仅用于MSN

博客点击率
free web counter
free web counter

常用链接

留言簿(36)

随笔档案

搜索

  •  

积分与排名

  • 积分 - 186100
  • 排名 - 309

最新评论

阅读排行榜

评论排行榜

    MapEasy群里面很多新朋友都不停的问到同一个问题,既然MapEasy是一个纯粹的JavaScript地图显示客户端那么她是如何与客户自己的后台地图程序进行整合,共同工作?这在MapEasy的设计之初就给了完美的解答,在MapEasy上实现与不同的地图服务的对接是一件非常轻松而且灵活的事情。大家都可以看到在MapEasy的Sample里就给出了诸如Google、edushi、WOW、custom等多种后台地图服务的接口。

    但是由于各种历史的原因Sample里只有edushi的地图现在还可以正常工作,其他的可能已经看不到图片。很多朋友都以为是MapEasy的代码的原因,其实不然,可以解释为是MapEasy很久没有更新的原因,那些地图服务已经不能取得地图数据了。

    在这里特别感谢BeanSoft兄提出的建议,做一个在取本地图片的的Sample,这样就不会出现上述的地图服务不能工作后Sample不能正常工作。最值得我敬佩的是他马上动手做了一个Demo,再次感谢分享!

    下面告诉大家实现与自己的地图服务配合是一件多么Easy的事情(我们的目的就是让Map更加Easy ^_^)。请大家注意MapType这个类,她就是MapEasy提供给大家扩展自定义地图服务类型的组件(我觉得在这里用组件这个词更加贴切,因为她虽然够简单,但同样够强大和完整)。下面给出MapType类:

 1 function MapType() {
 2     
 3     this.enablePic;
 4 
 5     this.disablePic;
 6     
 7     //~ Method
 8     {
 9         this.enablePic = imgBaseDir + "maptype_0b.gif";
10         this.disablePic = imgBaseDir + "maptype_0a.gif";
11     }
12 
13     this.getSrc = function(level, row, column) {
14         return imgBaseDir + 'zoom_' + level + '/+ level + '_' + column + '_' + row + '.jpg';
15     }
16 
17     this.getEnablePic = function() {
18         return this.enablePic;
19     }
20 
21     this.getDisablePic = function() {
22         return this.disablePic;
23     }
24 }

    enablePic、disablePic即显示在左上角(当然如果你愿意可以把她放在任何位置)的变换地图类型的按钮的图片,分别为选中和非选中时的图片。而getSrc方法就是实现与不同地图服务对接的最重要直接的方法,默认提供的方法是取本地图片。getSrc方法提供了与不同数据源的接口,在getSrc中发挥你的聪明才智以最简单的方式取得对应瓦片的图片就可以了。

    MapEasy推荐的最佳实践是编写一个属于自己的MapType,如WMSMapType,继承MapEasy提供的MapType重写getSrc方法实现自己的数据源接口。

    WMS(Web Map Service)是OPENGIS的规范,应用非常广泛。下面给出一个以WMS服务为地图数据源的简单实现作为参考。

 1 /**
 2  * 自定义一个WMS数据源
 3  * @author crespo
 4  */
 5 function WMSMapType() {
 6 
 7     MapType.apply(this);
 8 
 9     this.getSrc = function(level, row, column) {
10         var xMin = (MapModel.bound.getMinX() + ((MapModel.bound.getWidth()) / (new Zoom(level).getBorderTilesNum()))*(column))/1e16;
11         var yMin = (MapModel.bound.getMaxY() - ((MapModel.bound.getHeight()) / (new Zoom(level).getBorderTilesNum()))*(row+1))/1e16;
12         var xMax = (MapModel.bound.getMinX() + ((MapModel.bound.getWidth()) / (new Zoom(level).getBorderTilesNum()))*(column+1))/1e16;
13         var yMax = (MapModel.bound.getMaxY() - ((MapModel.bound.getHeight()) / (new Zoom(level).getBorderTilesNum()))*(row))/1e16;
14         //alert("row and column"+row+","+column);
15         //alert(xMin+","+yMin+","+xMax+","+yMax);
16         return "http://localhost:8080/geoserver/wms?bbox="+xMin+","+yMin+","+xMax+","+yMax+"&styles=population&Format=image/png&request=GetMap&layers=states&width=256&height=256&srs=EPSG:4326";
17     }
18 }

    使用本机的geoserver服务器提供的WMS服务测试通过。

    赶快去扩展你的地图类型吧!
posted on 2007-02-07 10:59 cresposhi 阅读(3411) 评论(9)  编辑  收藏

FeedBack:
# re: MapEasy答疑(二) 如何让MapEasy与WMS共同工作 2007-02-07 12:03 梅颖
你自己写的啊?  回复  更多评论
  
# re: MapEasy答疑(二) 如何让MapEasy与WMS共同工作 2007-02-07 12:31 施伟
???你觉得是谁写的呢?  回复  更多评论
  
# re: MapEasy答疑(二) 如何让MapEasy与WMS共同工作 2007-02-07 14:49 梅颖
哦,真的是你写的啊,呵呵,你好厉害哦,好崇拜你哦,呵呵,教哈我列  回复  更多评论
  
# re: MapEasy答疑(二) 如何让MapEasy与WMS共同工作 2007-02-08 08:10 睿不可当
mark
看来 我来blogjava不能不来的只有
crespo9907和ilovezmh了
呵呵  回复  更多评论
  
# re: MapEasy答疑(二) 如何让MapEasy与WMS共同工作 2007-02-08 08:52 施伟
@睿不可当
呵呵,睿G把你的blog也留一下,也好让我们过去景仰一下!  回复  更多评论
  
# re: MapEasy答疑(二) 如何让MapEasy与WMS共同工作 2007-09-14 09:40 向超
老大,能不能把你连接geoserver的例子给我发一份xiangchao76@sohu.com  回复  更多评论
  
# re: MapEasy答疑(二) 如何让MapEasy与WMS共同工作 2007-09-17 17:48 向超
看了你wms的例子,我直接也通过geoserver提供的wms做了一个测试,现在问题是,geoserver提供的wms是没有切片的,其中那个bbox也只是确定地图的显示位置,所以我现在的情况是如果row,cou,lev都是1的情况,地图显示是正确的,如果这些都是2,也就是地图显示是分片的时候,就会出现显示不正常,要不就是图片没有完全拼接在一起,要不就是图片拼接的位置错开,重叠等,不知道是怎么回事,望博主指点  回复  更多评论
  
# re: MapEasy答疑(二) 如何让MapEasy与WMS共同工作 2007-09-17 18:47 cresposhi
你的理解可能有点偏差,我们通过wms取的是某一张瓦片,而不是整张地图。而到底是哪张瓦片就是有MapType.getSrc的三个参数来确定的---行、列、级别。
上面例子中的xMin、yMin、xMax、yMax分别代表当前指定参数那个位置的瓦片的最小x坐标、最小y坐标、最大x坐标、最大y坐标。
  回复  更多评论
  
# re: MapEasy答疑(二) 如何让MapEasy与WMS共同工作 2008-01-22 15:02 longlong
我有两个MapType,一个是WMSMapType,一个是RSMapType,分别是矢量地图和影像地图,单独的情况下都能显示,现在我想做他们的叠加,怎么做呢?  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: