ArcGIS for WPF 访问外部资源
原文 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 访问外部资源的更多相关文章
- ArcGIS for WPF 访问外部资源【进阶之构造URL】
原文 http://www.cnblogs.com/wdysunflower/archive/2013/05/29/3039645.html 呵呵~好久没逛园子,没写博客了. 最近刚好又在弄GIS这块 ...
- springmvc:BeanNameViewResolver访问内部资源视图对象和访问外部资源视图对象
<!-- 处理器映射器 --> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerM ...
- WPF 访问外部的xaml文件
原文:WPF 访问外部的xaml文件 今天做主题时,需要访问外部的xaml文件,方法: using (FileStream s = new FileStream("C:\\Control.x ...
- WPF Demo9外部资源文件
<Window x:Class="Demos.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/ ...
- 密码太多记不住?SSO帮你轻松访问VDI及外部资源
单点登录(SSO)有多种方式,简单来讲,SSO是一个允许用户使用单一登录访问多个资源的认证过程.使用云应用的VDI用户可能需要某种方式的认证访问桌面外部的应用.SSO只需要用户单次输入认证信息就可以访 ...
- kubernetes之Endpoint引入外部资源实践;
1. 什么是Endpoint? 我们创建Service的时候会自动给我们创建一个同名的Endpoint资源,每一个同名的 Servie都有一个Endpoints资源,因为Service自己并不直接匹配 ...
- docker网络-如何让外部网络访问容器资源
docker网络-如何让外部网络访问容器资源 安装httpd 服务: docker:/root# docker exec -it f63b2633d146 bash bash-4.1# yum ins ...
- 给tomcat配置外部资源路径(应用场景:web项目访问图片视频等资源)
对于一个web项目来说,除了文字之外,图片,视频等媒体元素也是其重要的组成部分.我们知道,web项目中如果用到大量的图片.视屏的资源,我们 通常的做法是只在数据库中存储图片.视频等资源的路径,web项 ...
- WPF 访问资源中的Storyboard
原文:WPF 访问资源中的Storyboard <UserControl.Resources> <Storyboard x:Key="testStoryboard" ...
随机推荐
- 【转】win32,win64编程永恒;语言编程需要注意的64位和32机器的区别
原文网址:http://www.cnblogs.com/kex1n/archive/2010/10/06/1844737.html 一.数据类型特别是int相关的类型在不同位数机器的平台下长度不同.C ...
- 【转】ubuntu12.04下安装chrome浏览器
原文网址:http://blog.163.com/zhou_411424/blog/static/197362156201331931313549 下载google chrome deb包 32位:h ...
- bzoj2243-染色(动态树lct)
解析:增加三个变量lc(最左边的颜色),rc(最右边的颜色),sum(连续相同颜色区间段数).然后就是区间合并的搞法.我就不详细解释了,估计你已经想到 如何做了. 代码 #include<cst ...
- SSH2.0编程 ssh协议过程实现
之前为了自己做一套SSH,先自己实现了一套telnet.但经过这么多天的苦逼,发现以前的工作都是徒劳.ssh的协议很繁杂,核心的内容在于密码算法,而且自己很难在网上找到周全的细节讲解与详细的实现,只有 ...
- LVM(1)
DM: DM: Device Mapper 逻辑设备 RAID, LVM2 DM: LVM2 快照 多路径
- hdu3397 Sequence operation
感觉自己好像搞定了一个不得了得题呢.. 对于这种区间性质合并的线段树,对于每个节点保存一下当前区间内1的个数,左右边界相邻的1个的个数与0的个数,还有当前区间最大连续的1和0的个数. 合并的时候的细节 ...
- [HeadFist-HTMLCSS学习笔记][第七章CSS入门:加一点样式]
CSS入门 style元素设置CSS 基本格式 <style type="text/css"> body { background-color: #eaf3da; } ...
- 学习AJAX(一)
- Ext树控件第一次勾选父节点子节点没选中
项目中同事提出了这样一个bug 问题: 第一次勾选父节点子节点竟然没选中,逆天了啊 初步分析: 可能是之前代码的逻辑错误造成的,随进入调试阶段... 调试中发现该参数为空(原来写代码的也太没素质了), ...
- C# 实现预览dwg文件完整源代码(无需autocad环境)
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using Sys ...