原文 http://www.cnblogs.com/wdysunflower/archive/2011/07/14/2105584.html

  应用背景:

  因项目需要尝试了解了ArcGIS、Bing Map、Google Map等开发技术,最终是使用ArcGIS写了个Demo。

  ArcGIS现提供了一套控件库ArcGIS  API  for WPF供Silverlight开发使用,其中也包括WPF可以使用的控件。

  对比Sample Demo以及自己动手实践,还是比较快的就熟悉控件结构,不过对于已经使用过一年多WPF的我来说,感觉控件库开发者还是Winform那套思想,没有发挥出WPF数据绑定、模板等的优势来,用起来不是特别顺手。

  ArcGIS网上提供的地图都相对简单,乍看上去与我们平时使用的Google地图、百度地图什么的有很大差别(可能是我没掌握到精髓吧),寻寻觅觅之后进行了以下尝试,也就是这篇文章的主题——ArcGIS 访问外部资源。

  

参考文章:

  ArcGIS API for Silverlight开发入门(7):使用非AGS数据源的图层

  文章后边留言中反映出现404错误等,我刚开尝试做的时候也得不到数据,猜想是不是像作者说的那样数据Url应经过 时了,后来在研究GMap源代码的时候,发现它也同样使用了Google Map数据源,经过调试跟踪得到了大致的路径,替换baseUrl,终于让我看到地图图像了。下边是经过修改后的 TiledMapServiceLayer:


   public class GoogleMapTileLayer : TiledMapServiceLayer
    {
        public override void Initialize()
        {
            this.FullExtent = new Envelope(-20037508.342787, -20037508.342787, 20037508.342787, 20037508.342787);
            {
                SpatialReference = new SpatialReference();
            };
            this.SpatialReference = new SpatialReference();
            
            this.TileInfo = new TileInfo()
            {
                Height = ,
                Width = ,                 Origin = new MapPoint(-20037508.342787, 20037508.342787)
                {
                    SpatialReference = new SpatialReference()
                },
                Lods = new Lod[]
            };             double resolution = 156543.033928;
            for (int i = ; i < TileInfo.Lods.Length; i++)
            {
                TileInfo.Lods[i] = new Lod() { Resolution = resolution };
                resolution /= ;
            }             base.Initialize();
        }         public override string GetTileUrl(int level, int row, int col)
        {
            string baseUrl = "http://mt3.google.cn/vt/lyrs=m@156000000&hl=zh-CN&x=";
            string url = baseUrl + col.ToString() + "&y=" + row.ToString() + "&z=" + level.ToString() + "&s=";
            return url;
        }
    }

  在xaml中的使用该图层:

  <esri:Map.Layers>
    <WPFControlLibary:GoogleMapTileLayer />
  </esri:Map.Layers>

  因为地图初始就显示重庆地区,就需要指定Envelope,再加上导航、缩放等现成的工具,最终整个地图UserControl代码如下:


<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:esri="http://schemas.esri.com/arcgis/client/2009"
             xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
             xmlns:local="clr-namespace:NPView.View.WPFControl"
             x:Class="GISBrowserCtl">     <Grid x:Name="LayoutRoot">
        <esri:Map x:Name="MyMap"
                  MouseDown="MyMap_MouseDown">
            <esri:Map.Extent>
                <esri:Envelope XMin="11841331.013437796"
                               YMin="3434962.1416729852"
                               XMax="11872920.415001778"
                               YMax="3453477.0409229854">
                    <esri:Envelope.SpatialReference>
                        <esri:SpatialReference WKID="102113" />
                    </esri:Envelope.SpatialReference>
                </esri:Envelope>
            </esri:Map.Extent>
            <esri:Map.Layers>
                <WPFControlLibary:GoogleMapTileLayer />
            </esri:Map.Layers>
            <i:Interaction.Behaviors>
                <esri:MaintainExtentBehavior />
            </i:Interaction.Behaviors>
        </esri:Map>
    </Grid>
</UserControl>

  附效果图一张

  

  ArcGIS API for Silverlight开发入门(8):在程序中使用Virtual Earth的服务

  同样我们还可以按此使Virtual Earth的服务,不过过程要复杂点不过也好合法点,在ArcGIS中使用Bing Map也很容易啦!

ArcGIS for WPF 访问外部资源的更多相关文章

  1. ArcGIS for WPF 访问外部资源【进阶之构造URL】

    原文 http://www.cnblogs.com/wdysunflower/archive/2013/05/29/3039645.html 呵呵~好久没逛园子,没写博客了. 最近刚好又在弄GIS这块 ...

  2. springmvc:BeanNameViewResolver访问内部资源视图对象和访问外部资源视图对象

    <!-- 处理器映射器 --> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerM ...

  3. WPF 访问外部的xaml文件

    原文:WPF 访问外部的xaml文件 今天做主题时,需要访问外部的xaml文件,方法: using (FileStream s = new FileStream("C:\\Control.x ...

  4. WPF Demo9外部资源文件

    <Window x:Class="Demos.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/ ...

  5. 密码太多记不住?SSO帮你轻松访问VDI及外部资源

    单点登录(SSO)有多种方式,简单来讲,SSO是一个允许用户使用单一登录访问多个资源的认证过程.使用云应用的VDI用户可能需要某种方式的认证访问桌面外部的应用.SSO只需要用户单次输入认证信息就可以访 ...

  6. kubernetes之Endpoint引入外部资源实践;

    1. 什么是Endpoint? 我们创建Service的时候会自动给我们创建一个同名的Endpoint资源,每一个同名的 Servie都有一个Endpoints资源,因为Service自己并不直接匹配 ...

  7. docker网络-如何让外部网络访问容器资源

    docker网络-如何让外部网络访问容器资源 安装httpd 服务: docker:/root# docker exec -it f63b2633d146 bash bash-4.1# yum ins ...

  8. 给tomcat配置外部资源路径(应用场景:web项目访问图片视频等资源)

    对于一个web项目来说,除了文字之外,图片,视频等媒体元素也是其重要的组成部分.我们知道,web项目中如果用到大量的图片.视屏的资源,我们 通常的做法是只在数据库中存储图片.视频等资源的路径,web项 ...

  9. WPF 访问资源中的Storyboard

    原文:WPF 访问资源中的Storyboard <UserControl.Resources> <Storyboard x:Key="testStoryboard" ...

随机推荐

  1. 下一代云计算模式:Docker正掀起个性化商业革命

    作者: 吴宁川  来源: ITValue  发布时间: 2015-09-20 10:41  阅读: 10008 次  推荐: 16   原文链接   [收藏] 文/ITValue 记者吴宁川 从 20 ...

  2. 线程篇-01-NSThread

    一.概述 1.使用NSThread创建线程的三种方式和区别. 二.核心 2.1 NSThread创建线程的三种方式和区别. 主要有NSThread对象的创建线程的类方法detachNewThreadS ...

  3. Git服务器搭建全过程

    GitHub是一个免费托管开源代码的Git服务器,如果我们不想公开项目的源代码,又不想付费使用,那么我们可以自己搭建一台Git服务器. 下面我们就看看,如何在Ubuntu上搭建Git服务器.我们使用V ...

  4. Unable to resolve target 'android-14' 解决办法

    学习安卓的时候用Eclipse导入工程之后出现Unable to resolve target 'android-14' 这样的问题,代码确定没有问题,因为是从网上教程下载的示例代码,上网搜索了一下, ...

  5. python3-day2(基本回顾)

    1.作用域 1>外层变量可以被内层变更使用 2>内层变更不可以被外层使用 global nonlocal 2.对于Python,一切事物都是对象,对象基于类创建 3.练习 有如下值集合 [ ...

  6. c++之 printf 打印内容

    该代码全部在Visual Studio 2015中编写,有关VS2015的安装流程后期在写相关的博文 首先让我们来输出一下hello, world! 1.首先新建一个main.cpp的文件,然后在该文 ...

  7. [重磅] 让HTML5达到原生的体验 系列之中的一个 避免切页白屏

    非常多人都想.甚至曾使用HTML5开发跨平台App.而且想达到原生App的体验. 最后的结果都是无奈的放弃.HTML5貌似美好,但坑太多.想做到原生App的体验差点儿不可为. 也曾有过著名的faceb ...

  8. pat 1049 Counting Ones

    要统计1到N之间‘1’的个数,如数11包含2个1.所以当N=12时,答案为5. 思想: 找规律,假设ans[N]表示1到N的‘1’的个数,则有a[100]=(a[10]-1)*9+10+a[10]-1 ...

  9. BOOST 线程完全攻略 - 结束语

    modulethread扩展多线程破解通讯 全文介绍了3个boost::thread的扩展类,希望能给大家书写多线程代码带来便捷. thread -> controlled_module_ex ...

  10. spring mvc + mybatis + spring aop声明式事务管理没有作用

    在最近的一个项目中,采用springMVC.mybatis,发现一个很恼人的问题:事务管理不起作用!!网上查阅了大量的资料,尝试了各种解决办法,亦未能解决问题! spring版本:3.0.5 myba ...