cl991036
管理员
管理员
  • 注册日期2003-07-25
  • 发帖数5913
  • QQ14265545
  • 铜币29658枚
  • 威望213点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • GIS帝国铁杆
阅读:1519回复:0

[转帖]WP7 ArcGIS 地图

楼主#
更多 发布于:2012-05-19 14:37
 <div id="cnblogs_post_body"><p><strong>ArcGIS Runtime SDK for Windows Phone</strong>是
一套用于构建具有专业GIS功能、大众地图服务、LBS相关移动应用的类库。通过该类库可将地图嵌入到您的应用中,加载在线地图服务,Bing
Maps或离线地图,以完成定位/搜索/空间查询/数据展示等常见功能;此外,它提供了一系列专业的GIS功能,允许您加载自己的地理数据,进行数据采集
/编辑,执行复杂的地理分析任务,从而挖掘数据的潜在价值。</p>
<p>摘自:<a href="http://msdn.microsoft.com/zh-cn/windowsphone/partner">http://msdn.microsoft.com/zh-cn/windowsphone/partner</a></p>
<h2>准备</h2>
<p>SDK下载地址:<a href="http://resources.arcgis.com/zh-cn/content/arcgis-api-windows-phone-24-download">http://resources.arcgis.com/zh-cn/content/arcgis-api-windows-phone-24-download</a></p>
<p>帮助文档<a href="http://help.arcgis.com/en/arcgismobile/10.0/apis/windowsphone/help/index.html">http://help.arcgis.com/en/arcgismobile/10.0/apis/windowsphone/help/index.html</a></p>
<p>这个帮助文档不得不说一下,很好很强大~~~特别喜欢Sample那一栏</p>
<p>中国数据服务地址 :<a href="http://www.arcgisonline.cn/agsolcn/service/map/countrymap2.jsp">http://www.arcgisonline.cn/agsolcn/service/map/countrymap2.jsp</a></p>
<p>中国的地图数据服务很棒,有各种色调版本,很有爱,哈哈</p>
<p>再一个需要准备的资料是坐标纠偏了,这个~~~~不想多说了,最近看美谍战剧,一个美特务威胁果戈理说:你要不把东西给我,我就把你的人送到中国监狱,栽赃他危害国家总统~~~果戈里无语了~~,没有纠偏,阿果连监狱都找不到~~~</p>
<h2>基本知识点</h2>
<ul><li>
<h6>基本的地图加载</h6>
</li></ul>
<div class="csharpcode">
<pre class="alt"><span class="kwrd"><</span><span class="html">esri:Map</span> <span class="attr">x:Name</span><span class="kwrd">="map"</span> <span class="attr">IsLogoVisible</span><span class="kwrd">="False"</span> <span class="attr">Extent</span><span class="kwrd">="12915510.1474625, 4827746.45379021, 12998675.8823845,4877354.08514722"</span><span class="kwrd">></span></pre>
<pre>    <span class="kwrd"><</span><span class="html">esri:Map.Layers</span><span class="kwrd">></span></pre>
<pre class="alt">        <span class="kwrd"><</span><span class="html">local:OfflineArcGISTiledMapServiceLayer</span> <span class="attr">ID</span><span class="kwrd">="StreetMapLayer"</span> <span class="attr">Url</span><span class="kwrd">="http://www.arcgisonline.cn/ArcGIS/rest/services/ChinaOnlineStreetWarm/MapServer"</span><span class="kwrd">/></span></pre>
<pre>        <span class="kwrd"><</span><span class="html">esri:GraphicsLayer</span> <span class="attr">ID</span><span class="kwrd">="MyGraphicsLayer"</span> <span class="kwrd">/></span></pre>
<pre class="alt">    <span class="kwrd"></</span><span class="html">esri:Map.Layers</span><span class="kwrd">></span></pre>
<pre><span class="kwrd"></</span><span class="html">esri:Map</span><span class="kwrd">></span></pre>
<pre class="alt"> </pre>
</div>

<p>IsLogoVisible="False" 隐藏Logo,其实ArcGIS的LOGO还是蛮漂亮的,哈</p>
<ul><ul><li>
<h6>在地图上添加自定义图形</h6>
<div class="csharpcode">
<pre class="alt"><span class="kwrd">private</span> GraphicsLayer graphicsLayer { get { <span class="kwrd">return</span> mapFeet.Layers[<span class="str">"MyGraphicsLayer"</span>] <span class="kwrd">as</span> GraphicsLayer; } }</pre>
<pre><span class="kwrd">private</span> <span class="kwrd">static</span> WebMercator mercator = <span class="kwrd">new</span> WebMercator();</pre>
<pre class="alt">var myPoint = mercator.FromGeographic(<span class="kwrd">new</span> MapPoint(point.X, point.Y, <span class="kwrd">new</span> SpatialReference(4326)));</pre>
<pre>Graphic graphic = <span class="kwrd">new</span> Graphic()</pre>
<pre class="alt">{</pre>
<pre>      Geometry = myPoint,</pre>
<pre class="alt">      Symbol = <span class="kwrd">this</span>.Resources[<span class="str">"RedMarkerSymbol"</span>] <span class="kwrd">as</span> Symbol</pre>
<pre>};</pre>
<pre class="alt">graphicsLayer.Graphics.Add(graphic);</pre>
</div>
<h6> </h6>
</li></ul></ul>

<p>//这个图形只能是园,方框等,如果其他,只能用图片</p>
<p><esriSymbols:PictureMarkerSymbol x:Key="BlueMarkerSymbol" Source="/Images/fuck.png" /></p>
<p><esriSymbols:SimpleMarkerSymbol x:Key="RedMarkerSymbol" Color="Red" Size="20" Style="Circle" /></p>
<p>用这个添加元素有个好处,效率高,比在图层上话UIElement效率要高的多,我搞了200多个fuck.png都很快</p>
<ul><li>
<h6>地图缓存</h6>
</li></ul>
<p>OfflineArcGISTiledMapServiceLayer 是参考菩提老王的博客重写的一个缓存图片的Layer</p>
<p>代码如下:</p>
<div class="csharpcode">
<pre class="alt"> <span class="kwrd">public</span> <span class="kwrd">class</span> OfflineArcGISTiledMapServiceLayer : ArcGISTiledMapServiceLayer</pre>
<pre>    {</pre>
<pre class="alt">        <span class="kwrd">private</span> <span class="kwrd">const</span> <span class="kwrd">string</span> c_fileName = <span class="str">"MapTiles\\{0}_{1}_{2}.jpg"</span>;</pre>
<pre> </pre>
<pre class="alt">        <span class="kwrd">protected</span> <span class="kwrd">override</span> <span class="kwrd">void</span> GetTileSource(<span class="kwrd">int</span> level, <span class="kwrd">int</span> row, <span class="kwrd">int</span> col, Action<ImageSource> onComplete)</pre>
<pre>        {</pre>
<pre class="alt">            <span class="kwrd">string</span> fileName = <span class="kwrd">string</span>.Format(c_fileName, level, row, col);</pre>
<pre> </pre>
<pre class="alt">            FileStream fileStream = <span class="kwrd">null</span>;</pre>
<pre>            <span class="kwrd">if</span> (Isolated.FileExist(fileName) ;; Isolated.ReadFile(fileName, <span class="kwrd">out</span> fileStream))</pre>
<pre class="alt">            {</pre>
<pre>                BitmapImage image = <span class="kwrd">new</span> BitmapImage()</pre>
<pre class="alt">                {</pre>
<pre>                    CreateOptions = BitmapCreateOptions.DelayCreation</pre>
<pre class="alt">                };</pre>
<pre>                image.SetSource(fileStream);</pre>
<pre class="alt">                onComplete(image);</pre>
<pre>            }</pre>
<pre class="alt">            <span class="kwrd">else</span></pre>
<pre>            {</pre>
<pre class="alt">                <span class="kwrd">base</span>.GetTileSource(level, row, col, onComplete);</pre>
<pre>            }</pre>
<pre class="alt">        }</pre>
<pre> </pre>
<pre class="alt">        <span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">void</span> Initialize()</pre>
<pre>        {</pre>
<pre class="alt">            <span class="kwrd">base</span>.Initialize();</pre>
<pre>            <span class="kwrd">base</span>.TileLoaded += <span class="kwrd">new</span> EventHandler<TileLoadEventArgs>(OfflineArcGISTiledMapServiceLayer_TileLoaded);</pre>
<pre class="alt">        }</pre>
<pre> </pre>
<pre class="alt">        <span class="kwrd">void</span> OfflineArcGISTiledMapServiceLayer_TileLoaded(<span class="kwrd">object</span> sender, TiledLayer.TileLoadEventArgs e)</pre>
<pre>        {</pre>
<pre class="alt">            <span class="kwrd">string</span> fileName = <span class="kwrd">string</span>.Format(c_fileName, e.Level, e.Row, e.Column);</pre>
<pre>            <span class="kwrd">if</span> (e.ImageStream != <span class="kwrd">null</span> ;; Isolated.FileExist(fileName) == <span class="kwrd">false</span>)</pre>
<pre class="alt">            {</pre>
<pre>                Isolated.SaveFile(fileName, e.ImageStream);</pre>
<pre class="alt">            }</pre>
<pre>        }</pre>
<pre class="alt">    }</pre>
</div>

<h2>总的来说</h2>
<p>之前一直用BingMap控件引Google的数据源,后来发现不能做缓存~~~就放弃了,其实BingMap的操控流畅比ArcGIS要好,不过
缓存是硬伤,没办法,好处是ArcGis的效率还不错,特别是我需要在Map上加载很多东西的时候,BingMap就会变慢,可能是我处理的方式不太
对~~~</p>
<p>哦,还有MapABC的大家也可以参考</p>
<p>总的来说:ArcGis的缓存还是很棒的,哈哈</p></div><div id="MySignature">http://blog.bryht.net</div>
喜欢0 评分0
没钱又丑,农村户口。头可断,发型一定不能乱。 邮箱:gisempire@qq.com
游客

返回顶部