silverlight   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ArcGIS API for Silverlight应用开发系列(2)客户端读取Shapefile大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

系统是死的,数据是活的,在一些涉及敏感数据的地方,可能需要提供访问客户端数据的功能。例如:在某单位内部有一个基于ArcGIS  Silverlight  API的WebGIS系统,提供了一些常用的业务功能,能够访问一些基础地理数据和基本的业务数据。而有的业务数据,由于保密要求,可能不通过系统直接提供,需要在客户端直接访问。 在客户端访问Shapefile,可以通过直接读取的方式,以及将数据传回服务

系统是死的,数据是活的,在一些涉及敏感数据的地方,可能需要提供访问客户端数据的功能。例如:在某单位内部有一个基于ArcGIS  Silverlight  API的WebGIS系统,提供了一些常用的业务功能,能够访问一些基础地理数据和基本的业务数据。而有的业务数据,由于保密要求,可能不通过系统直接提供,需要在客户端直接访问。

在客户端访问Shapefile,可以通过直接读取的方式,以及将数据传回服务器端读取的方式来实现。ESRI已经公开了Shapefile的文件格式,这为我们从客户端直接读取Shapefile提供了便利。

下文将演示如何从客户端直接读取Shapefile文件

下面的代码是处理Map的Drop事件,即通过拖放文件的方式来读取Shapefile。注意需要同时拖放.shp 和.dbf文件

private void mymap_Drop(object sender,DragEventArgs E)
{
   try
    {
       //获取拖放到地图上的文件信息
       IDataObject dataObject = e.Data as IDataObject;
       FileInfo[] files = dataObject.GetData(DataFormats.FileDrop) as FileInfo[];
 
       //判断拖放的文件是否为.shp和.dbf
       FileInfo shapeFile = null;
       FileInfo dbfFile = null;
       foreach (FileInfo fi in files)
       {
           if (fi.Extension.ToLower() == ".shp") shapeFile = fi;
           if (fi.Extension.ToLower() == ".dbf") dbfFile = fi;
       }
 
       // 读取Shapefile数据 
       ShapeFile shapeFileReader = new ShapeFile();
       if (shapeFile != null && dbfFile != null)
       {
           shapeFileReader.Read(shapeFile,dbfFilE);
       }
       else
       {
           messageBox.Show("请将.dbf和.shp文件同时拖放到地图上!");
           return;
       }
 
       IList<Graphic> lstGraphics = new List<Graphic>();
       foreach (ShapeFileRecord record in shapeFileReader.Records)
       {
           //将从Shapefile中读取的记录转换为Graphic
           Graphic graphic = record.ToPointGraphic();
           if (graphic != null) lstGraphics.Add(graphic);
       }
 
       // 如果空间参不一致,可能需要投影
       if (lstGraphics.Count > 0)
       {
           Geometryservice projectTask = new Geometryservice("http://localhost/arcgis/rest/services/Geometry/GeometryServer");
           projectTask.ProjectCompleted += new EventHandler<GraphicsEventArgs>(projectTask_ProjectCompleted);
           projectTask.Failed += new EventHandler<TaskFailedEventArgs>(projectTask_Failed);
 
           //将平面坐标转换为经纬度
           projectTask.ProjectAsync(lstGraphics,mymap.SpatialReferencE);
       }
    }
    catch (Exception eX)
    {
       messageBox.Show("拖放文件错误:" + ex.ToString());
    }
}
然后需要在投影完成事件中处理结果,为Graphic指定符号,并添加到图层中。

下面是效果图:

ArcGIS API for Silverlight应用开发系列(2)客户端读取Shapefile


底图数据(波特兰市区)

ArcGIS API for Silverlight应用开发系列(2)客户端读取Shapefile


Shapefile数据(波特兰911报警电话拨打位置)

ArcGIS API for Silverlight应用开发系列(2)客户端读取Shapefile


拖放效果(波特兰报警电话拨打区域分布)


篇幅所限,只贴了核心代码,如需完整代码,请在评论住留下邮箱地址。

欢迎加入ArcGIS Silverlight API讨论群交流:147535735

大佬总结

以上是大佬教程为你收集整理的ArcGIS API for Silverlight应用开发系列(2)客户端读取Shapefile全部内容,希望文章能够帮你解决ArcGIS API for Silverlight应用开发系列(2)客户端读取Shapefile所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。