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数据,属性等,更灵活。
分享到:
相关推荐
linux安装 GDAL3.0.4+Postgresql 12.2+Postgis-3.0.1 安装软件及依赖全套,共计17个
这里我们关注的是在CentOS系统上搭建一个基于Nginx的Web服务环境,并结合MySQL数据库、Redis缓存以及PostgreSQL和PostGIS地理空间扩展的组合。这是一个典型的Web开发和数据存储的基础架构,常用于大数据处理、地理...
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 ...
PostgreSQL 14 和 PostGIS 3.2 是两个在地理信息系统(GIS)领域中非常重要的开源组件。PostgreSQL 是一款强大的对象关系型数据库管理系统,而 PostGIS 是在其基础上扩展的,提供了空间数据类型和相关的操作功能,...
本教程将详细介绍如何在CentOS系统上离线编译安装PostgreSQL 14和PostGIS 3.2,这两个是用于地理空间数据库管理的重要组件。 PostgreSQL是一个强大的开源关系型数据库管理系统,它支持复杂查询、事务处理和多种数据...
"ArcEngine连接PostgreSQL所需五个.dll"是指在ArcEngine中实现与PostgreSQL数据库交互时,必须添加或引用的五个关键DLL文件。这些文件包含了ArcEngine与PostgreSQL进行通信所需的接口和功能。当出现“未发现客户端...
在GIS(地理信息系统)开发中,ArcEngine是一个强大的开发平台,它允许开发者使用各种编程语言,如C#,创建地图应用和处理空间数据。本文将深入探讨如何利用ArcEngine结合C#来连接并操作SDE(Spatial Database ...
PostgreSQL与PostGIS的安装和空间数据导入 PostgreSQL是一个功能强大且开源的关系数据库管理系统,而PostGIS则是一个基于PostgreSQL的空间数据库扩展,提供了对空间数据的支持。在本文中,我们将介绍如何安装...
PostgreSql+PostGis 创建空间数据库 PostgreSql 是一个功能强大且开源的关系数据库管理系统,它提供了一个强大的平台来存储和管理数据。PostGis 是一个基于PostgreSql 的空间数据库扩展,它提供了对空间数据的支持...
PostGIS 3.2则是基于PostgreSQL的一个空间数据库扩展,它允许用户存储、查询和操作地理空间数据。在GIS(地理信息系统)领域,PostGIS是一个不可或缺的组件,因为它是将地理数据与传统数据库结合的关键。 在...
ArcGIS Server + ArcSDE + PostgreSQL + ArcMap安装(windows7)-附件资源
本文详细介绍了如何在CentOS7环境中离线安装PostgreSQL及其配套PostGIS插件的方法。提供了完整的离线仓库配置步骤,并演示不同版本之间的兼容性和具体的安装命令流程。 适合人群:从事地理信息系统(GIS)工作的...
在构建一个基于Python的网络爬虫来获取特定地图上的POI(Point of Interest,兴趣点)数据时,结合PostgreSQL数据库和PostGIS扩展可以实现高效、结构化的存储和分析。以下是一些关键知识点的详细说明: 1. **Python...
### zabbix详细安装教程(linux+postgresql+nginx+zabbix) #### 环境说明与配置 本教程将指导您如何在Linux环境下安装Zabbix监控系统,并结合PostgreSQL作为数据库服务以及Nginx作为Web服务器。具体环境配置为:...
**PostgreSQL 14.1 + PostGIS 3.1.4 Windows 安装详解** 在IT领域,数据库管理系统(DBMS)是不可或缺的一部分,PostgreSQL作为一款开源、对象关系型数据库,因其强大的功能和稳定性而备受推崇。PostgreSQL 14.1是...
一个接口包 连的本地postgresql 表及信息有截图 库自己装 一个vue包 vite+vue3+ts+eleplus 配置了router vuex axios postcss-px-to-viewport界面自适应 env prod环境等 启动:均是 npm i npm start 仅供学习哈 也...
在本项目中,"springboot+mybatis3+druid+postgresql"的组合是一个常见的高效、轻量级的Java Web开发架构。Spring Boot简化了Spring应用程序的创建和配置,MyBatis作为持久层框架提供了灵活的SQL映射,Druid是数据库...
PostgreSQL 12是 PostgreSQL 数据库管理系统的一个重要版本,它带来了许多性能提升和新特性,旨在提供更高效、更安全的数据库服务。PostgreSQL 是一个开源的关系型数据库系统,以其强大的事务处理能力、ACID(原子性...
PostgreSQL-PostGIS-TimescaleDB PostgreSQL + PostGIS + TimescaleDB即用型Docker映像 :elephant: :globe_showing_Americas: :chart_increasing: 基于 。 Docker映像具有:当前组件版本: PostgreSQL: 12.5 () ...