《2022年ArcSDECAPI创建矢量数据及坐标系统定义 .pdf》由会员分享,可在线阅读,更多相关《2022年ArcSDECAPI创建矢量数据及坐标系统定义 .pdf(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、ArcSDE C API创建矢量数据及坐标系统定义ArcSDE C API 创建矢量数据及坐标系统定义七 18 2010 Published by Jack under .NET/CSharp, ArcSDE *写了有些天了 .上网不方便 ,总是没更新 .罪过. 在 ArcSDE API 中,要素类 (featureclass) 被称为 Layer下文均用 layer 代表 featureclass。Layer可以看作增加了一个空间列定义的Table 。ArcSDE创建 Layer的过程:1, 创建 DBMS Table ,注册 Table (增加 SDE维护的 ROWID类型字段)2,增加空
2、间列定义 坐标系统,几何类型,存储精度等参数定义3,创建 F表(Feature Table )综上所述,调用 API创建 Layer步骤:1,创建 Table并注册2,增加空间列定义所用相关函数(创建表并注册见上一篇) :SE_coordref_create 创建坐标系结构体pe_factory_geogcs 设置坐标系定义(也可用其它坐标系定义函数,该函数是指定系统预定义的坐标系代码)SE_coordref_set_coordsys 设置坐标系名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - -
3、 - 第 1 页,共 8 页 - - - - - - - - - SE_coordref_set_xy 设置坐标域和存储精度SE_coordref_set_precision 确定使用 64 位还是 32 位存储SE_layerinfo_create 创建 layerinfo SE_layerinfo_set_coordref 设置坐标系SE_layerinfo_set_spatial_column 设置“ shape”字段SE_layerinfo_set_shape_types 设置几何类型SE_layerinfo_set_grid_sizes 设置格网大小SgCoordRefSetXYCl
4、usterTol 设置 xy tolerance 其中:设置xy tolerance 的函数在sde c api 中并没有提到,使用dumpbin /exports sde.dll 就会发现,实际很多函数sde c api文档都没有提到。那就只好去看sdetype.h头文件的定义了。其中涉及到的几个概念:precision,scale,xy cluster tolerance:通过观察 api 定义,SE_coordref_set_precision 用来定义要素类存储精度的。在 ArcSDE9.2以前的版本,空间几何形体坐标均以32 未整数存储。以后的版本,默认采用64位整型数据存储。SE_
5、coordref_set_xy 函数用来设置存储数据的范围和scale值。 xy 是数据存储起始 minx,miny 值。scale可以看作是存储精度。因为空间数据以整型存储在数据库中,所以,需要要通过小数点位移,来存储小数。这里的 scale 值就是这个意思。例如,如果一个数据的坐标系为高斯-克里格投影,即地图单位为米,那么,如果数据要能够以厘米存储, 即可以存储类似 123.12形式的数据,则 scale值至少设置为 100。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页
6、,共 8 页 - - - - - - - - - 通常情况,为了保证数据存储精度,可适当提高scale 值。如设置为1000。SgCoordRefSetXYClusterTol(设置 xy cluster tolerance)则表达进行拓扑操作的时候,系统可区分两个点的最小距离。通常情况下,需要将tolerance 值设置为存储精度值的两倍或更高。ESRI推荐值为 10 倍以上。SDE API 声明代码:/create coodref struct DllImport("sde.dll", SetLastError = true, ThrowOnUnmappableChar
7、 = true) public static extern System.Int32 SE_ coordref_create(out IntPtr coordref); /create pe_geogc s struct by gcs CODE DllImport("pe.dll", SetLastError = true, ThrowOnUnmappableChar = true) public static extern System.IntPtr pe_factory_geogcs(Int16 code); 名师资料总结 - - -精品资料欢迎下载 - - - - -
8、 - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 8 页 - - - - - - - - - /set coordref's coordsys DllImport("sde.dll", SetLastError = true, ThrowOnUnmappableChar = true) public static extern System.Int32 SE_coordref_set_coordsys(IntPtr coordref,IntPtr pe_coordsys); /set coordref
9、39;s xy and scale DllImport("sde.dll", SetLastError = true, ThrowOnUnmappableChar = true) public static extern System.Int32 SE_coordref_set_xy(IntPtr coordref, double x,double y,double xyunits); /set coordref's precision DllImport("sde.dll", SetLastError = true, ThrowOnUnmapp
10、ableChar = true) public static extern System.Int32 SE_coordref_set_precision(IntPtr coordref, Int32 precision); /create layerinfo struct DllImport("sde.dll", SetLastError = true, ThrowOnUnmappableChar = true) public static extern System.Int32 SE_layerinfo_create(IntPtr coordref, ref 名师资料总结
11、 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 8 页 - - - - - - - - - IntPtr layerinfo); /set spatial column DllImport("sde.dll", SetLastError = true, ThrowOnUnmappableChar = true) public static extern System.Int32 SE_layerinfo_set_spatial_column(IntPtr laye
12、rinfo,string tablename,string spatialColumnName); /set layerinfo's shapetype property DllImport("sde.dll", SetLastError = true, ThrowOnUnmappableChar = true) public static extern System.Int32 SE_layerinfo_set_shape_types(IntPtr layerinfo, Int32 shape_type); /set layerinfo's grid si
13、ze 3 level DllImport("sde.dll", SetLastError = true, ThrowOnUnmappableChar = true) public static extern System.Int32 SE_layerinfo_set_grid_sizes(IntPtr layerinfo, double grid1,double grid2,double grid3); /set xy tolerance DllImport("sg.dll", SetLastError = true, 名师资料总结 - - -精品资料欢
14、迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 8 页 - - - - - - - - - ThrowOnUnmappableChar = true) public static extern System.Int32 SgCoordRefSetXYClusterTol(IntPtr coordref, double xyTolerance); 调用过程代码:IntPtr coordref; / create coordinate system struct int res = SDEAPI.SE_coo
15、rdref_create(out coordref); /define coordinate system 4024 -> PE_GCS_KRASOVSKY_1940 (pedef.h) IntPtr pe_coordsys = SDEAPI.pe_factory_geogcs(4024); /set coordinate system res = SDEAPI.SE_coordref_set_coordsys(coordref,pe_coordsys); /set xy domain res = SDEAPI.SE_coordref_set_xy(coordref, -400, -40
16、0, 1000000000); /set tolerance res = SDEAPI.SgCoordRefSetXYClusterTol(coordref, 0.00000005); /set precision res = SDEAPI.SE_coordref_set_precision(coordref, 64); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 8 页 - - - - - - - - - /create layerinfo struct IntPt
17、r layerinfo = new IntPtr(); res = SDEAPI.SE_layerinfo_create(coordref,ref layerinfo); res = SDEAPI.SE_layerinfo_set_coordref(layerinfo, coordref); /create table code CreateTable( . ); /set spatial column res = SDEAPI.SE_layerinfo_set_spatial_column(layerinfo, FeatureClassPro.FeatureClas sName, "
18、;SHAPE"); /set shape type res = SDEAPI.SE_layerinfo_set_shape_types(layerinfo,getShapeCode(FeatureClassPro.GeoMetryType); / set grid size res = SDEA 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 8 页 - - - - - - - - - PI.SE_layerinfo_set_grid_sizes(layerinfo, 0.0, 0.0, 0.0); /final: create layer function res = SDEAPI.SE_layer_create(sdeConnection,layerinfo,0,0); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 8 页 - - - - - - - - -