在arcgis二次开发教程中,想实现添加shape文件,代码怎么写啊,有没有现成代码

苹果/安卓/wp
积分 143, 距离下一级还需 2 积分
权限: 自定义头衔
道具: 彩虹炫, 涂鸦板, 雷达卡, 热点灯, 金钱卡, 显身卡下一级可获得
道具: 匿名卡
购买后可立即获得
权限: 隐身
道具: 金钱卡, 彩虹炫, 雷达卡, 热点灯, 涂鸦板
开心签到天数: 10 天连续签到: 1 天[LV.3]偶尔看看II
以最新空间计量软件OpenGoeda为例,其实,对于空间面板数据发分析与地图的显示是两会儿事,空间分析可以简单的分为两块:第一是:空间统计分析,即空间数据的探索性分析,一般用到地图,主要是为了直观显示其属性值的空间分布情况,另外就是全局空间自相关分析(全局Morans'I系数)和局部空间自相关分析(LISA)及Morans散点图(HH,HL,LH,LL);第二是:空间计量分析,主要包括:空间滞后模型(SLM)和空间误差模型(SEM),使用的前提是,自变量和因变量都存在空间自相关性,因此导致经典的计量模型估计有偏或失效,因此自然而然将空间因素考虑到模型中进行分析,空间因素的引进涉及最核心的表达空间的权重矩阵。这是空间计量模型和软件解决的基本问题。在此基础上说一下,如何利用OpenGoeda分有相应的shape格式地图和没有的情况下如何进行空间面板数据的回归分析。
& &&&首先、是有相应地图的shape格式文件,如何进分析,涉及研究区域的地图的制作;地图和属性数据的链接等。具体如下:首先可以借助Mapinfo和Arcgis软件制作shape格式的地图文件,并设置ID唯一代码,接着制作属性值文件,其格式为dbf,然后,将上述制作完成的shape格式文件和dbf格式属性值通过OpenGoda软件的Table菜单下的Merge TableDate进行合并,形成一个完整的包含分析需要的所有属性值的shape格式文件。这样我们所有准备工作完成了,接下来就可以进行各种各样的分析了。
& &&&其次、无法获取地图的shape文件,或者你主要进行的空间回归分析,那么此时你完全不用费心思去制作地图,这时候仅需要你生成一个空间权重矩阵,具体做法是:1、生成一个OpenGoeda能识别的shape格式文件(直接用txt做就ok了,还可以通过dbf格式做,也比较容易)步骤,tools/shape/Point from ASCII(txt),2、建立dbf格式的属性数文件,3、利用软件里的Merge TableDate将1步建的shape文件数据表和2步建的dbf格式数据进行合并,并保存,保存后的文件我们命名为“sample”,3,则可以用sample.shp格式文件进行空间面板数据分析了。
& && &&&以上是本人在实际应用中的做法,希望对大家有所帮助!另附最新版的空间计量软件:OpenGoeda软件下载,
载入中......
00:46:22 上传
好的意见建议
热心帮助其他会员
奖励积极上传好的资料
分析的有道理
观点有启发
热心帮助其他会员
总评分:&经验 + 120&
论坛币 + 30&
学术水平 + 15&
热心指数 + 15&
信用等级 + 13&
本帖被以下文库推荐
& |主题: 689, 订阅: 162
& |主题: 37, 订阅: 8
, , , , , , ,
辛苦楼主了。
[b]万物并作 吾以观复[/b]
谢谢楼组分享!
楼主,这是我的QQ,希望可以更多地请教你,叩谢了!急。。。。。
楼主,这是我的QQ,希望可以更多地请教你,叩谢了!急。。。。。
谢谢搂住,我还有疑问向请教你,我不知道怎么能将excel格式转换成dbf格式
每个生命都是一个奇迹,每个人生都可歌可泣!
胡扯蛋,都说了些啥玩意????????????
每个生命都是一个奇迹,每个人生都可歌可泣!
楼主辛苦了,受用啊~~~
向上楼的朋友道歉了,你的这个帖子写的很好的,继续进步哦!呵呵
每个生命都是一个奇迹,每个人生都可歌可泣!
完整安装office2007,利用Acess打开excel保存dbf就ok!
无限扩大经管职场人脉圈!每天抽选10位免费名额,现在就扫& 论坛VIP& 贵宾会员& 可免费加入
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
如有投资本站或合作意向,请联系(010-);
邮箱:service@pinggu.org
投诉或不良信息处理:(010-)
京ICP证090565号
论坛法律顾问:王进律师本帖子已过去太久远了,不再提供回复功能。1955人阅读
本地开发(25)
问题的提出
ArcGIS Runtime 支持MPK,APK,TPK,GPK这些打包之后的数据,这些也都是ArcGIS 10.1 中新增的数据格式(MPK除外,MPK是在ArcGIS 10中增加的,但是并不能支持ArcGIS Runtime),我们经常使用的数据可能并不是这些打包后的数据,而是shape这样的数据,我们如何加载shape数据呢?加载了shape数据,我们又如何编辑呢?
我们知道ArcGIS Runtime中有一种类型的图层叫做GraphicsLayer,它是用来显示我们的一些符号化的几何对象——Graphic,Graphic由Gemoetry+属性+符号组成。
Shape数据格式的公开的,这样只要我们按照其规范就可以从底层写读取shape文件的程序,但是我们没有必要这么做,因为在网上有有很多开源的读取shape数据的类库,如GDAL/OGR,SharMap类库等,有了这些类库,我们就有一个想法,借助这些类库将shp数据读取出来,然后转成能在GraphicsLayer图层上显示的东东。到了这里我们需要做的就是将shape文件中读取出来的几何图形对象转成Graphic的几何对象,这一个步骤也有人做了。在上,就提到了读取shape文件的shapefilereader类。该类里面有一个非常好的方法ToGraphic(),该方法直接将读取的shape转成了Graphic,有了Graphic,我们就可以将Graphic显示在Map中了
读取shape数据
void button3_Click(objectsender,
RoutedEventArgse)
&&&&&&&&&&& OpenFileDialog
pOpenShpFile = new
OpenFileDialog();
&&&&&&&&&&& pOpenShpFile.Multiselect =false;
&&&&&&&&&&& pOpenShpFile.Filter =&Shapefile(.shp)|*.shp&;
&&&&&&&&&&& string
pFileName = &&;
&&&&&&&&&&& if (pOpenShpFile.ShowDialog() ==true)
&&&&&&&&&&& {
&&&&&&&&&&&&&&& if (pOpenShpFile.FileName.Length & 0)
&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&& pFileName =pOpenShpFile.FileName;
&&&&&&&&&&&&&&&&&&& FileInfo
pShpInfo = new
FileInfo(pFileName);
&&&&&&&&&&&&&&&&&&& ShapeFile
pShapeReader = new
ShapeFile();
&&&&&&&&&&&&&&&&&&& //pShapeReader.Read(pShpInfo, new FileInfo(pFileName.Replace(&.shp&, &.dbf&)));
&&&&&&&&&&&&&&&&&&& //该方法只读shape
&&&&&&&&&&&&&&&&&&& pShapeReader.ReadShapes(pShpInfo);
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&& pShapeReader.ReadShapes(pShpInfo);
&&&&&&&&&&&&&&&&&&& Collection&ShapeFileRecord&pShapeRecords =
pShapeReader.Records;
&&&&&&&&&&&&&&&&&&& foreach (ShapeFileRecordpRecord
in pShapeRecords)
&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&& &&&&GraphicpGraphic =
ExtensionMethods.ToGraphic(pRecord);
&&&&&&&&&&&&&&&&&&&&&&& pGraphicsLayer.Graphics.Add(pGraphic);
&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&& MyMap.Extent =pGraphicsLayer.FullExtent;
&&&&&&&&&&&&&&& }
&&&&&&&&&&& }
红色部分的为添加的shape点状类型的数据
编辑Shape数据
ArcGIS Runtime对数据提供了编辑功能,但是编辑也是通过FeatureLayer来实现的,如何编辑shape数据呢?
相信很多人已经对GDAL了解,GDAL有一个分支OGR,OGR是专门用来对矢量数据的支持,在这里简单对OGR的体系结构坐下介绍
  OGR包括如下几部分:
  Geometry:类Geometry(包括OGRGeometry等类)封装了OpenGIS的矢量数据模型,并提供了一些几何操作,WKB(Well KnowsBinary)和WKT(Well Known Text)格式之间的相互转换,以及空间参考系统(投影)。
  Spatial Reference:类OGRSpatialReference封装了投影和基准面的定义。
  Feature:类OGRFeature封装了一个完整feature的定义,一个完整的feature包括一个geometry和geometry的一系列属性。
  Feature Definition:类OGRFeatureDefn里面封装了feature的属性,类型、名称及其默认的空间参考系统等。一个OGRFeatureDefn对象通常与一个层(layer)对应。
  Layer:类OGRLayer是一个抽象基类,表示数据源类OGRDataSource里面的一层要素(feature)。
  Data Source:类OGRDataSource是一个抽象基类,表示含有OGRLayer对象的一个文件或一个数据库。
  Drivers:类OGRSFDriver对应于每一个所支持的矢量文件格式。类OGRSFDriver由类OGRSFDriverRegistrar来注册和管理。
对SHP数据的编辑,我们只要将我们在GraphicsLayer上绘制的Graphic转成OGR支持的Geometry就可以了
&&&&& &OSGeo.OGR.DataSourcepDS;
&&&&&&& OSGeo.OGR.LayerpLayer;
void button3_Click(objectsender,
RoutedEventArgse)
&&&&&&&&&&&& OpenFileDialog
pOpenShpFile = new
OpenFileDialog();
&&&&&&&&&&& pOpenShpFile.Multiselect =false;
&&&&&&&&&&& pOpenShpFile.Filter =&Shapefile(.shp)|*.shp&;
&&&&&&&&&&& string
pFileName = &&;
&&&&&&&&&&& if (pOpenShpFile.ShowDialog() ==true)
&&&&&&&&&&& {
&&&&&&&&&&&&&&& if (pOpenShpFile.FileName.Length & 0)
&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&& pFileName =pOpenShpFile.FileName;
&&&&&&&&&&&&&&&&&&& //shape文件驱动文件名称
&&&&&&&&&&&&&&&&&&& string
pszDriverName = &ESRI Shapefile&;
&&&&&&&&&&&&&&&&&&& //注册驱动
&&&&&&&&&&&&&&&&&&& OSGeo.OGR.Ogr.RegisterAll();
&&&&&&&&&&&&&&&&&&& //调用对Shape文件读写的Driver接口
&&&&&&&&&&&&&&&&&&& OSGeo.OGR.DriverpDriver =
OSGeo.OGR.Ogr.GetDriverByName(pszDriverName);
&&&&&&&&&&&&&&&&&&& if (pDriver ==null)
&&&&&&&&&&&&&&&&&&&&&&& MessageBox.Show(&驱动&);
&&&&&&&&&&&&&&&&&&& //用此Driver打开Shape文件,1表示更新
&&&&&&&&&&&&&&&&&&& pDS =
pDriver.Open(pFileName, 1);
&&&&&&&&&&&&&&&&&&& if (pDS ==null)
&&&&&&&&&&&&&&&&&&&&&&& MessageBox.Show(&打开数据源错误&);
&&&&&&&&&&&&&&&&&&& //获取图等
&&&&&&&&&&&&&&&&&&& pLayer =
pDS.GetLayerByIndex(0);
&&&&&&&&&&&&&&&&&&& if (pLayer ==null)
&&&&&&&&&&&&&&&&&&&&&&& MessageBox.Show(&Layer Creation Failed&);
&&&&&&&&&&&&&&&&&&& //获取几何类型
&&&&&&&&&&&&&&&&&&& wkbGeometryTypepGeoType =
pLayer.GetLayerDefn().GetGeomType();
&&&&&&&&&&&&&&&&&&& // 获取空间参考
&&&&&&&&&&&&&&&&&&& OSGeo.OSR.SpatialReferencepSpatial =
pLayer.GetSpatialRef();
&&&&&&&&&&&&&&& }
&&&&&&&&&&& }
//传入我们在地图上的点
&&&&&&& void
Test(MapPoint
pMapPoint)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //创建一个Feature,一个Point
&&&&&&&&&&&&&&&&&&& OSGeo.OGR.FeaturepFeature =
newFeature(pLayer.GetLayerDefn());
&&&&&&&&&&&&&&&&&&& OSGeo.OGR.GeometrypPointGeo =
newOSGeo.OGR.Geometry(OSGeo.OGR.wkbGeometryType.wkbPoint);
&&&&&&&&&&&&&&&&&&& pPointGeo.AddPoint(pMapPoint.X,pMapPoint.Y,
&&&&&&&&&&&&&&&&&&& //字段个数,不包括ObjectID和FID
&&&&&&&&&&&&&&&&&&& int
pFCount = pFeature.GetFieldCount();
&&&&&&&&&&&&&&&&&&& pFeature.SetField(1, 3.6);
&&&&&&&&&&&&&&&&&&& pFeature.SetGeometry(pPointGeo);
&&&&&&&&&&&&&&&&&&& //pFeature.SetGeometryDirectly(pPointGeo);
&&&&&&&&&&&&&&&&&&& pLayer.CreateFeature(pFeature);
&&&&&&&&&&&&&&&&&&& //写入文件
&&&&&&&&&&&&&&&&&&& pLayer.SyncToDisk();
&&&&&&&&&&&&&&&&&&& //关闭文件读写
&&&&&&&&&&&&&&&&&&& pFeature.Dispose();
&&&&&&&&&&&&&&&&&& // pLayer.Dispose();
&&&&&&&&&&&&&&&&&& // pDS.Dispose();
编号为29的为我们新增的点
由于我现在拿到的ArcGIS Runtime软件不是最终的,目前还不能直接对Shape数据实现加载和编辑,但是通过开源的类库,我们可以很好的使用ArcGIS Runtime对shape数据实现加载和编辑,感谢Esri,感谢他们将Shape数据结构公开,文中通过实例说明了对shape数据加载的和编辑的流程,通过这些我们可以看出,其实难点在于如何将shape文件中的几何对象转成Graphic的geometry,在1.2我们读取shape数据的时候,开源的类库直接提供了转到Graphic的方法,但是编辑的时候,目前我还没找到,但是只要我们将1.2的那个转向Graphic的方法逆转过来就应该是可以的,这一步还需要花点时间整理整理。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1215886次
积分:17299
积分:17299
排名:第418名
原创:432篇
转载:45篇
译文:106篇
评论:421条
(1)(5)(7)(18)(1)(1)(12)(2)(2)(5)(1)(1)(2)(5)(2)(12)(1)(3)(26)(3)(2)(6)(18)(4)(9)(21)(31)(6)(15)(34)(32)(9)(5)(108)(171)读取arcGis的shape文件里面的.dbf数据
  不多说了 直接上代码
  package coAna.
import com.esri.arcgis.datasourcesfile.ShapefileWorkspaceF
import com.esri.arcgis.geodatabase.IF
import com.esri.arcgis.geodatabase.IFeatureC
import com.esri.arcgis.geodatabase.IFeatureClassW
import com.esri.arcgis.geodatabase.IFeatureClassWriteP
import com.esri.arcgis.geodatabase.IFeatureC
import com.esri.arcgis.geodatabase.IFeatureW
import com.esri.arcgis.geodatabase.IFeatureWorkspaceP
import com.esri.arcgis.geodatabase.IF
import com.esri.arcgis.geodatabase.IQueryF
import com.esri.arcgis.geodatabase.IWorkspaceF
import com.esri.arcgis.geodatabase.QueryF
import com.esri.arcgis.geometry.IP
import com.hjkj.util.C
public class ReadShape {
public void sfsdfs(String shapeFileName) {
// 获取指定路径 C:\DIET\shape\temp
Configuration config = new Configuration();
String targetPath = config.getValue("outShapeFile");
IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory();
IFeatureWorkspace pFeatureWorkspace = new IFeatureWorkspaceProxy(
pWorkspaceFactory.openFromFile(targetPath, 0));
IFeatureClass featureClass = pFeatureWorkspace
.openFeatureClass(shapeFileName);
IFeatureClassWrite pFeatureClassWrite = new IFeatureClassWriteProxy(
featureClass);//
IQueryFilter pQueryFilter = new QueryFilter();
IFeatureCursor pFCursor = featureClass.search(pQueryFilter, false);
IFeature pFeature = pFCursor.nextFeature();
int i = 0;
while (pFeature != null) {
IPolyline polyline = (IPolyline) pFeature.getShapeCopy();
IFields ifds = pFeature.getFields();// 字段信息集合
for (int num = 0; num & ifds.getFieldCount(); num++) {
String name = ifds.getField(num).getName();// 某个字段名字
pFeature.getValue(num);// 某字段值
System.out.println("某个字段的名字:" + name);
System.out.println("某个字段的值:"
+ pFeature.getValue(num).toString());
} catch (Exception e) {
e.printStackTrace();

我要回帖

更多关于 基于arcgis的二次开发 的文章

 

随机推荐