#include "stdafx.h"
#include "windows.h"
#include "sdetype.h"
#include "sdeerno.h"
#include "assert.h"
#include <iostream>
#pragma comment(lib, "sde.lib")
using namespace std;
SE_LAYERINFO FindLayerInfo(const char* szName, SE_LAYERINFO *layerinfo_list, long count);
int main(int argc, char* argv[])
{
const char* szServer = "127.0.0.1";
const char* szInstance = "5151";
const char* szDatabase = "sde";
const char* szUser = "sde";
const char* szPassword = "sde";
const char* szName = "SDE.cities";
LONG rc;
long lyrcount = 0;
SE_ERROR pseError;
SE_CONNECTION seConnection;
SE_STREAM seStreamCursor=NULL;
SE_COORDREF coordref=NULL;
SE_LAYERINFO layerinfo = NULL;
SE_LAYERINFO *layerinfo_list = NULL;
SE_SQL_CONSTRUCT *sql=NULL;
SE_COLUMNINFO* pColumnList = NULL;
SHORT m_num_columns = 1; // 字段个数
CHAR **m_columns = new CHAR*[m_num_columns]; // 字段名称数组
m_columns[0] = "SHAPE";
DWORD ts = GetTickCount();
DWORD ts_con = GetTickCount();
rc = SE_connection_create(szServer, szInstance, szDatabase, szUser, szPassword, &pseError, &seConnection);
assert(rc==SE_SUCCESS);
DWORD te_con = GetTickCount();
cout<<"Connect Time"<<((DWORD)(te_con-ts_con))<<endl;
rc = SE_layer_get_info_list(seConnection, &layerinfo_list, &lyrcount);
assert(rc==SE_SUCCESS);
layerinfo = FindLayerInfo(szName, layerinfo_list, lyrcount);
assert(layerinfo!=NULL);
rc = SE_stream_create(seConnection, &seStreamCursor);
assert(rc==SE_SUCCESS);
rc = SE_coordref_create (&coordref);
assert(rc==SE_SUCCESS);
rc = SE_layerinfo_get_coordref (layerinfo, coordref);
assert(rc==SE_SUCCESS);
CHAR table[SE_MAX_TABLE_LEN];
CHAR column[SE_MAX_COLUMN_LEN];
rc = SE_layerinfo_get_spatial_column(layerinfo,table,column);
assert(rc == SE_SUCCESS);
rc = SE_sql_construct_alloc(1, &sql);
assert(rc == SE_SUCCESS);
strcpy(sql->tables[0], table);
sql->where = strdup("");
rc = SE_stream_query(seStreamCursor, 1, (const CHAR **)m_columns, sql);
assert(rc == SE_SUCCESS);
rc = SE_stream_execute(seStreamCursor);
assert(rc==SE_SUCCESS);
free(sql->where);
SE_sql_construct_free(sql);
LONG wktLen = 0;
LONG wkbLen = 0;
LONG binarySize = 0;
SE_SHAPE pShape = NULL;
char* pWKB = NULL;
char* pWKT = NULL;
while(SE_stream_fetch(seStreamCursor)==SE_SUCCESS)
{
rc = SE_shape_create(coordref, &pShape);
rc = SE_stream_get_shape(seStreamCursor, 1, pShape);
if(rc==SE_SUCCESS)
{
rc = SE_shape_get_text_size(pShape, &wktLen);
if(rc==SE_SUCCESS)
{
pWKT = new char[wktLen];
memset(pWKT, 0, wktLen);
SE_shape_as_text(pShape, wkbLen, pWKT);
printf("\r%s",pWKT);
delete pWKT;
}
SE_shape_free(pShape);
}
}
delete[] m_columns;
SE_layer_free_info_list(lyrcount, layerinfo_list);
SE_coordref_free(coordref);
SE_stream_free(seStreamCursor);
SE_connection_free(seConnection);
return 0;
}
SE_LAYERINFO FindLayerInfo(const char* szName, SE_LAYERINFO *layerinfo_list, long count)
{
CHAR name[SE_MAX_COLUMN_LEN];
CHAR cachedColumnName[SE_MAX_COLUMN_LEN];
for(long i=0; i<count; i++)
{
SE_layerinfo_get_spatial_column(layerinfo_list[i], name, cachedColumnName);
if(stricmp(name, szName)==0)
{
return layerinfo_list[i];
}
}
return NULL;
}
分享到:
相关推荐
给朋友帮忙写的一个预研性质的示例 网上ArcSDE C API的例子太少了,费了不少劲拼凑了这个示例,还有不少要完善的地方。需要的兄弟姐妹参看一下吧。
包含: ArcSDE C API参考手册 ArcSDE JAVA API参考手册 ArcSDE API Samples使用程序实例
ArcSDE C API在.NET中的调用 .doc
基于ArcSDE C API的ArcSDE客户端实现方法
基于ArcSDE C API的ArcSDE客户端实现方法
ArcSDE管理员手册,包括ArcSDE的安装、高级数据加载、调优、监控优化、创建GEODATABASE、要素类的版本编辑等等内容,是ArcSDE数据库管理员不可多得的好资料
ArcSDE安装+Geoserver数据发布.zip;ArcSDE安装+Geoserver数据发布.zip;ArcSDE安装+Geoserver数据发布.zip
基于ArcSDE的GIS空间数据存储分析
NULL 博文链接:https://tzraeq.iteye.com/blog/1551489
初学者很好的帮助,是ArcSDE 的API调用
ArcSDE 是空间数据库引擎, 允许用户用关系数据库管理...这些类按托管和非托管两层进行设计, 数据访问功能由非托管类调用ArcSDE C API 实现, 托管类对外公开非托管类的功能, 可被任何. NET 兼容的程序设计语 言调用。
ArcSDE说明文档。ArcSDE Client API for C programmers.ArcSDE Client API for Java programmers.
ArcSDE C示例代码,就是用C连接ArcSDE
ArcSDE 9.3 Java API离线帮助手册,完整版。
基于ArcObjects和ArcSDE的地理数据分发的实现
ArcSDE API for JAVA ArcSDE Help
ArcSDE入门教材,及相关学习数据,资料是esri中国公司的培训资料
基于ArcSDE与Oracle空间数据集成的应用.pdf
基于Oracle的ArcSDE数据备份与恢复的论文
基于ArcSDE的影像数据管理.doc 基于ArcSDE的影像数据管理.doc