ArcGis平台是一个价格相当高的商业平台,本来想通过ArcSDE进行开发,这样方便而且有保证。但是因为项目在初期阶段还未采购ArcGis平台,前期为了项目开发对于初学ArcEngine的偶,破解破的我头大,可以说费了九牛三虎之力。项目进行到数据处理阶段,前期的开发工作的数据源来自shp文件。现在需要用到数据库来提供数据源了,发现ArcSDE又要破解,又是狂乱的百度啊,问题是比ArcEngine还难破解,一怒之下果断放弃ArcSDE,寻找另外的解决方案。道路是艰难的,同样是面对大量的E文,在N个网页中被我找到了这篇文章:http://www.paolocorti.net/2008/06/06/spatial-database-for-postgres-and-arcgis-users-how-to-choose/ 写的相当不错(其实我也不能完全看明白)。
因为上面这个文章给了我很大的信心,于是开始研究zigGis, GDAL。传说中的zigGis相当牛,能直接将postgis中的GIS类型显示到ArcGis的控件中,但是呢最新的版本不支持我所开发项目的ArcGis版本,只能放弃重来了。终于在网络的海洋中找来找去被我看到了wkb/wkt这样一个概念,如果对GIS开发有经验的人可能早就知道应该这样做了。在postgis中提供很多函数将wkb转成它的geometry类型,同样也有将geometry转成binary的函数。当然更兴奋的是ArcGis中有针对标准wkb的转换,这样一来,可想而知,这个方案是行的通的。
第一步:从postgreSQL中通过postgis读取GIS数据显示在AxMapControl中
1. C# 连接数据库pg,这个不用多说,初学者在网上很容易找到。
要注意的是因为ArcEngine中对wkb的支持是byte[]之间的转换,所以在进行数据库取数据时用postgis的这个函数将GIS数据转成byte[],这样写 asbinary(the_geom)
2. 将得到的byte[](也就是wkb数据)通过ArcEngine的接口得到IGeometry,如下所示:
IGeometryFactory3 factory = new GeometryEnvironment() as IGeometryFactory3;
factory.CreateGeometryFromWkbVariant(wkb, out geom, out countin);
3. 将 IGeometry 显示在AxMapControl中。
我相信有了这个,就笑了,ArcEngine新建图层显示要素很简单的吧。
第二步:将上一步从pg中显示出来的GIS数据进行相应的修改后保存回pg中
1. 修改指定的要素后通过 geometry得到wkb
要对修改操作进行保存,就需要将指定的要素中的geometry再次转回wkb然后通过sql语句修改pg中的指定记录即可,思路很简单,问题在于拼接SQL字符串上面,因为arcengine通过geometry得到的仍然是一个byte[],这个东西是没办法拼到sql语句中的。
2. 用到的ArcEngine接口如下:
IGeometryFactory3 factory = new GeometryEnvironment() as IGeometryFactory3;
byte[] geoBytes = factory.CreateWkbVariantFromGeometry(geometry) as byte[];
3. 拼接SQL时要将上面的byte[]数组转码
其实postgis处理存到pg中的是一长串的16进制字符串,相信大家打开数据库能看到,要想拼接好SQL串就得这样来一下:geomfromwkb(decode('" + geoByteStr + "', 'hex'))其中的geoByteStr是byte[]转成16进制的字串
上面两步已走通,是完全可以实现的,这样做的话,数据表我们也能自行定义,操作GIS数据,属性等,更灵活。
分享到:
相关推荐
centos nginx+mysql5.7+redis+postgresql12+postgis 安装包
linux安装 GDAL3.0.4+Postgresql 12.2+Postgis-3.0.1 安装软件及依赖全套,共计17个
postgresql14+postgis32_14亲测可用
postgresql postGIS 安装手册
postgresql14加postgis3.2在centos离线编译安装
Python + Postgresql + PostGIS爬虫获取某地图POI数据 (1)网络爬虫 (2)多线程 (3)数据库连接池
postgresql+postgis安装和空间数据的导入
ArcGIS Server + ArcSDE + PostgreSQL + ArcMap安装(windows7)-附件资源
基于Centos7 x64 操作系统 ,开源数据PostgreSQL+PostGIS 数据环境安装文档
postgresql12+postgis32_12亲测可用
3-3" --restart always -e TZ=Asia/Shanghai -p 5432:5432 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -e PASSWORD_AUTHENTICATION="scram-sha-256" -v 自定义挂载目录:/var/lib/postgresql/data -d ...
zabbix详细安装教程(linux+postgresql+nginx+zabbix)
PostgreSQL12.4及PostGIS30_12离线安装包
springboot+druid+mybatis+postgresql框架搭建,使用mybatis-generator自动生成pojo+mapper+dao
PostgreSql+PostGis 创建空间数据库
一个接口包 连的本地postgresql 表及信息有截图 库自己装 一个vue包 vite+vue3+ts+eleplus 配置了router vuex axios postcss-px-to-viewport界面自适应 env prod环境等 启动:均是 npm i npm start 仅供学习哈 也...
解决在springboot+mybatis+postgresql时,数据库字段类型为json时,如何与mybatis进行映射
Beginning+Databases+with+PostgreSQL.pdf.7z
postgresql-12.12-1-windows-x64.exe postgis-bundle-pg12x64-setup-3.2.3-1.exe Windows环境下的postgresql+postgis安装包,具体版本号已给出