打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C#打造一个开源webgis(四)地图客户端(上)

 地图客户端

地图客户端是用来显示地图和实现交互的,采用的技术和实现的方式多种多样,有Flash,Silverlight,Javascript等等,此外,别忘了桌面客户端也属于其范畴。

而具体基于这些技术的第三方插件有很多,开源的有如DeepEarth、SharpMap、Gmap.net、Greatmap、OpenLayer,如果细心的话,会发现提及的大多基于.net技术的,没错,个人偏向所致吧,对比过基于Deepzoom实现及Javascript实现的地图效果后,我倾向于Deepzoom(Silverlight版地图基本采用),当然,如果说考虑到用户体验(要安装浏览器插件),用Javascript或许会是更好的选择。若了解原理,展现方式不同,内在其实也大同小异的。简单描述下,仅作为参考:SharpMap对于桌面应用更有名些,我对它最后一次了解也是很久之前了,现在不知道变成怎样了,它集成了很多开源项目,包括GDAL、.net版的JTS(NJTS)等,但是个人对其渲染效果和性能不怎么满意。DeepEarth是比较有名的webClient,渲染效果不错,但功能不足,需要自己开发定制很多GIS常用功能。Gmap.net貌似比较强大,就是参考资料太少。OpenLayers是基于Javascript的……有兴趣的可以了解一下……最后来个笔锋一转,会不会觉得很坑?——我用的是arccgis api for silverlight,原因很简单,功能强大,足够我使用……

搭建DEMO

先来看看搭建Demo的效果图:
silverlight实现


wpf实现

怎么实现的呢,步骤如下:
1、免费注册arcgis开发者,下载Arcgis api for silverlight的SDK(我顺便下载了Arcgis api for WPF的SDK),其实所谓的SDK,只要得到几个DLL就行了,只要别人有了,直接拷贝过来引用就可以了。注:若不喜欢,完全可以用DeepEarth来代替
2、建一个silverlight的项目,把DLL引用进去,然后创建一个类GoogleMapLayer.cs,内容如下,代码比较好理解,也不写注释了。特别留意一下GetTileUrl方法,采用的url是网上google瓦片服务地址,注释掉的第一行url是本地缓存离线瓦片地图,第二行url是第三节提到过的geoserver提供的wms服务,也就是说可以根据需求定制自己的地图层。
[csharp] view plaincopy
  1. public class GoogleRoadLayer : TiledMapServiceLayer  
  2.    {  
  3.        SpatialReference _spatialReference = new SpatialReference(102113);  
  4.        public override void Initialize()  
  5.        {  
  6.            this.FullExtent = new Envelope(-20037508.342787, -20037508.342787, 20037508.342787, 20037508.342787)  
  7.            {  
  8.                SpatialReference = _spatialReference  
  9.            };  
  10.            this.SpatialReference = _spatialReference;  
  11.            this.TileInfo = new TileInfo()  
  12.            {  
  13.                Height = 256,  
  14.                Width = 256,  
  15.                Origin = new MapPoint(-20037508.342787, 20037508.342787)//Origin = new ESRI.ArcGIS.Geometry.MapPoint(-180, 90)  
  16.                {  
  17.                    SpatialReference = _spatialReference  
  18.                },  
  19.                Lods = new Lod[20]  
  20.            };  
  21.   
  22.            double resolution = 156543.033928;  
  23.            for (int i = 0; i < TileInfo.Lods.Length; i++)  
  24.            {  
  25.                TileInfo.Lods[i] = new Lod() { Resolution = resolution };  
  26.                resolution /= 2;  
  27.            }  
  28.            base.Initialize();  
  29.        }  
  30.   
  31.        public override string GetTileUrl(int level, int row, int col)  
  32.        {  
  33.            //设置默认值   
  34.            string url = string.Format("http://mt{0}.google.cn/vt/lyrs=m@163000000&hl=zh-CN&gl=cn&x={1}&s=&y={2}&z={3}&s=", row % 4, col, row, level);  
  35.            //string url = string.Format("http://192.168.4.164:8083/{2}/{0}_{1}.png", col, row, level);  
  36.            //string url = string.Format("http://localhost:10100/geoserver/cq/wms?service=WMS&version=1.1.0&request=GetMap&layers=cq:landview&styles=&bbox={0},{1},{2},{3}&width=512&height=473&srs=EPSG:4326&format=image/png";  
  37.            return url;  
  38.        }  
  39.    }  

3、在MainPage.xaml(可以新建一个页面)的Grid标签,加入以下内容,至此一个拥有放大缩小、平移、滚轮支持的基本地图浏览程序就完成了
  1. <esri:Map x:Name="map" Background="White"  WrapAround="true" IsLogoVisible="False" >  
  2.     <esri:Map.Layers>  
  3.         <esri:LayerCollection>  
  4.             <local:GoogleRoadLayer ID="TileLayer"/>  
  5.         </esri:LayerCollection>  
  6.     </esri:Map.Layers>  
  7. </esri:Map> 
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
ArcGIS Silverlight API访问天地图服务
arcgis api for javascript 学习(一) 调用在线发布的动态地图
arcgis for Android 100.1 在线加载天地图和谷歌地图
arcgis api 4.x for js之基础地图篇
浅析ArcGis中的软件——ArcMap、ArcScene、 ArcGlobe、ArcCatalog
C#打造一个开源webgis(四)地图客户端
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服