ArcGIS for WPF 访问外部资源

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

ArcGIS for WPF 访问外部资源

  应用背景:

  因项目需要尝试了解了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(102113);
            };
            this.SpatialReference = new SpatialReference(102113);
            

            this.TileInfo = new TileInfo()
            {
                Height = 256,
                Width = 256,

                Origin = new MapPoint(-20037508.342787, 20037508.342787)

                {
                    SpatialReference = new SpatialReference(102113)
                },
                Lods = new Lod[20]
            };

            double resolution = 156543.033928;
            for (int i = 0; i < TileInfo.Lods.Length; i++)
            {
                TileInfo.Lods[i] = new Lod() { Resolution = resolution };
                resolution /= 2;
            }

            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也很容易啦!

时间: 2024-10-22 06:53:25

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

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

原文 http://www.cnblogs.com/wdysunflower/archive/2013/05/29/3039645.html 呵呵~好久没逛园子,没写博客了. 最近刚好又在弄GIS这块,有些收获跟大家分享一下,有些问题也希望能得到"知情人"的解答. 首先需要指出的是,"访问外部资源"实现的方式,在我之前的文章里已经写的比较清楚了: ArcGIS for WPF 访问外部资源   [主题] 探索构造可用URL的方法及思路 . (仅供大家研究.学习.分析

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

随着云服务的广泛应用,单点登录技术(SSO)最近倍受青睐,它也可以帮助IT在VDI部署过程中更好地平衡安全性与用户体验. 单点登录(SSO)有多种方式,简单来讲,SSO是一个允许用户使用单一登录访问多个资源的认证过程.使用云应用的VDI用户可能需要某种方式的认证访问桌面外部的应用.SSO只需要用户单次输入认证信息就可以访问虚拟桌面以及外部资源,降低了最终用户的安全负担. 反对使用单点登录技术的争论之一是其削弱了安全性.如果用户账号被盗用,那么入侵者同样可以访问与账号关联的资源. 活动目录之外的访

JQuery Ajax通过Handler访问外部XML数据的代码_jquery

JQuery的使用非常简单,我们只需要从其官方网站上下载一个脚本文件并引用到页面上即可,然后你就可以在你的脚本代码中任意使用JQuery提供的对象和功能了. 在JQuery中使用Ajax方法异步获取服务器资源非常简单,读者可以参考其官方网站上提供的例子http://api.jquery.com/category/ajax/.当然,作为客户端脚本,JQuery也会遇到跨域访问资源的问题,什么是跨域访问呢?简单来说就是脚本所要访问的资源属于网站外部的资源,脚本所在的位置和资源所在的位置不在同一区域.

【IOS】解决XCODE项目出现MY MAC 64-BIT/设置允许用户外部资源同步到APP/解决CODESIGN ERROR: CERTIFICATE IDENTITY ‘IPHONE DISTRIBUTION***APPEARS MORE THAN ONCE IN THE KEYCHAIN .

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2d/621.html 本章节Himi为大家总结几点经常用到的功能或者经常出现的问题以及解决方法: 本章节主要介绍3个知识点: 1. 解决Xcode中选择设备运行项目时,设备一栏现实"My mac 64-bit"问题: 2.设置允许用户利用itunes同步一些资源到我们的App中: 3.解决CodeSign

WPF学习之资源-Resources

WPF通过资源来保存一些可以被重复利用的样式,对象定义以及一些传统的资源如二进制数据,图片等等,而在其支持上也更能体现出这些资源定义的优越性.比如通过ResourceDictionary的支持就可以通过资源来实现换肤功能,在ExpressionBlend中设计的酷炫造型也可以通过导出成资源来很容易的被程序员所引用,本地化的实现,访问另外程序集的嵌入式资源等等.这些都给我们提供了丰富的手段通过资源访问架构来构建丰富的富媒体应用程序.本文简单讲解了WPF Resources的分类及其常见用法,并简单

使用VBS访问外部文本文件一些方法和脚本实例代码_vbs

处理文件用到的常量有:ForReading = 1 ,ForWriting=2,ForAppending=8,用于的操作分别是读/写和追加,都要在使用之前用VBS Const来声明.常用于处理文本文件的方法有:Read(var)-读var个字符,ReadLine-读一行,ReadAll-读整个文件内容,SkipLine-跳过本行指向下一行,Write(var)-把字符串var写入文件,WriteLine(var)-把字符串var和换行符写入文件,WriteBlankLines(n)-写入n个换行

Applet数字签名,授予访问本地资源

访问 本文章介绍Applet数字签名,授予访问本地资源的方法.步骤一:将Applet Class打成Jar包 如:在命令行中执行以下的语句: jar -cvf MyApplet.jar class 步骤二:(在网页中嵌入Applet)(如何在Html嵌入Apple方法见附录) 下面是嵌入Applet部分的写法: <APPLETCODEBASE = "."CODE = "jcomponent.FileReaderApplet.class"ARCHIVE =&qu

java.net.URL如何通过proxy访问internet资源

对于在局域网内发布的java应用程序,由于其没有直接连接在internet上,所以不能直接用java.net.URL访问网上资源.在这种情况下,需要为java.net.URL指定代理服务器,指定方法如下所示: import java.util.Properties; import java.net.*; import java.io.*; public class TestHttpProxy { public static void main(String[] args) { String sU

无线网卡不能访问内部资源

  电脑是通过无线网卡与局域网连接,但在新添加网卡和无线AP后,无线AP连接到内部的交换机,通过ADSL上网,无线网卡和无线AP在笔记本电脑上设置和调试通过,能用ADSL上网,但不能访问公司内部的资源. 停用电脑中原来的网卡,插入无线网卡,也安装了驱动程序.结果也是可以上网不能访问内部网络.在访问网络资源的时候,错误提示"网络不存在或尚未启动". 这种情况,导致无法访问内容资源的原因可能是文件和打印机共享设置的问题.在无线网络属性的"常规"选项卡中,将"M