Adding SharpMap geometry to a PostGIS database

C# + NetTopologySuite读取Shp存入PostGIS数据库 C#; PostGIS; NetTopologySuite; ShapeFile; QGIS 阅读详情

...or how to upload an ESRI Shapefile to PostGIS.

I've often been asked how to copy data from a shapefile to a PostGIS database. PostGIS comes with a commandline-tool for this (shp2pgsql.exe), but all it does is generate a huge SQL-textfile that you will need to run afterwards - Not very efficient I think - especially with the ASCII-representation of the geometry. Furthermore I've had several problems with it regarding many international letters in the attributes.

So why not try to let Npgsql and SharpMap do the job?

I've been working a bit with a small tool that makes it easy to upload an entire shapefile to a PostGreSQL/PostGIS database using SharpMap.

Below are some of the PostGIS/SharpMap related code explained:


 

 

First we create a Npgsql connection

 

The next step is to add a geometry column (see in the full source on how you create the table with all the attributes). In this case we set the spatial reference ID to '-1' and name the geometry column 'geom'.

 

command.CommandText = "SELECT AddGeometryColumn('','myTable','geom','-1','GEOMETRY',2);";
command.ExecuteNonQuery();

Now we are ready to upload to the database, so lets get hold of that shapefile! First we set up a datasource:

SharpMap.Data.Providers.ShapeFile shp = new SharpMap.Data.Providers.ShapeFile(@"C:/data/MyShape.shp", false);

We can now query all the feature object IDs, by using an extents-query on the full extents:

 

conn.Open();
List<uint> indexes = shp.GetObjectIDsInView(shp.GetExtents());

...and then loop through all the features:

foreach

(uint idx in indexes)
{
   SharpMap.Data.FeatureDataRow
feature = shp.GetFeature(idx);
   
command.CommandText = "INSERT INTO /"myTable/" (/"geom/") VALUES (GeomFromWKB(:geom,:srid));"
;
   command.Parameters.Add(":geom", NpgsqlTypes.NpgsqlDbType
.Bytea);
   command.Parameters[":geom"
].Value = feature.Geometry.AsBinary(); //Add the geometry as Well-Known Binary
   command.Parameters.Add(":srid", NpgsqlTypes.NpgsqlDbType
.Integer);
   //Set the SRID of the geometry - this must match the SRID we used when the column was created
   command.Parameters[":srid"].Value = -1;

   
//TODO: Add parameters for remaining columns if nessesary (in that case alter the INSERT commandtext accordingly) 
 
   command.ExecuteNonQuery();
}
//Clean up
conn.Close();
shp.Close();

...and that is all there is to it !

The great thing about this, is that it is easy to change this to take any other SharpMap datasource and upload as well. And with Christians OGR extension you can suddenly upload a bunch of datasource directly to PostGIS.

Download the full source and compiled binaries here: Shape2Pgsql.zip (624,3 KB) (updated April 26, 2006)
NpgsqlConnection
conn = new NpgsqlConnection ("Server=localhost;Port=5432;User Id=username;Password=password;Database=myGisDB;")
NpgsqlCommand command = new NpgsqlCommand
();
command.Connection = conn;
 
【C#】了解SharpMap开发 题目 了解SharpMap开发 描述 SharpMap 是一个基于.net 2.0 使用 C#开发的 Map 渲染类库,可以渲染各类 GIS 数据,可应用于桌面和 Web 程序。目前支持 B/S 及 C/S 两种方式的 DLL 调用, 支持地图渲染效果。它的优点有: 占用资源较少,响应比较快。在对于项目中如果只需要简单的地图功能 的话,是一个比 较好的选择。 它是基于.NET 2.0环境下开发的,对于.NET 环境支持较好。 . 使用简单,只要在.NET 项目中引用响应的 dll 文件即可,没有复杂的安 阅读详情

相关推荐

SharpMap地图控件

SharpMap,自己用来做gis的地图控件

shape空间数据导入mysql_sharpmap访问各种空间数据库的连接方法

1、加载Shapefile文件publicvoidLoadShapefile(){//为图层设置数据源stringsDataFile=System.IO.Path.Combine(DATAPATH,"countries.shp");SharpMap.Data.Providers.ShapeFile.ShapeFileProvideroShapeFile=newSharpMap....

weixin_42298809的博客 548

linq2db-postgis-extensions:带有扩展方法的.NET Standard 2.0库,用于使用linq2db访问PostGIS几何方法

Linq2db PostGIS扩展 .NET Standard 2.0库,在几何实例( NpgsqlTypes.PostgisGeometry或NetTopologySuite.Geometries.Geometry )上具有OGC扩展方法,可在使用 LINQ到数据库提供程序(轻量级ORM)时提供对服务器端功能的访问。 两种实现 财产 LinqToDBPostGisNpgsqlTypes LinqToDBPostGisNetTopologySuite 延伸型 NpgsqlTypes.PostgisGeometry NetTopologySuite.Geometries.Geometry Npgsql版本 3.x 4.x PostGIS参考版本 1.5 3.0 状态 遗产 推荐方式 NuGet - 依存关系 linq2db,Npgsql linq2db,Npgsql,N

SharpMap介绍及源码分析

本文发表于《3sNews新闻周刊》第一期,有删改,请勿转载。SharpMap是一个基于.net 2.0使用C#开发的Map渲染类库,可以渲染各类GIS数据(目前支持ESRI Shape和PostGIS格式),可应用于桌面和Web程序。其网址为:http://sharpmap.iter.dk/SharpMap的发布许可(License)为GNU General Public License,开发者为...

weixin_33975951的博客 524

车载毫米波雷达实战:用MATLAB复现DDMA-MIMO雷达的Empty-band算法(附代码解析)

本文详细介绍了车载毫米波雷达中DDMA-MIMO技术的实战应用,重点解析了Empty-band算法的原理与MATLAB实现。通过搭建仿真环境,文章深入探讨了发射天线通道解调与相位法速度解模糊两大核心难题的解决方案,并提供了完整的代码解析,为雷达算法工程师提供了从理论到实践的清晰指南。

hill8的博客 558

Oracle EBS R12.2 安装 -- Step by Step

Oracle EBS R12.2 安装 -- Step by Step

Albert Tan DBA之路 1512

postgresql 和.NET类型对照表

PostgreSQL type默认的.NET 类型特定提供的类型其他 .NET 类型 bool bool int2 short byte, sbyte, int, long, float, double, decimal, string int4 int byte, short, long, float, do...

Zeno2017的博客 622

基于STM32的INA226电压电流检测仪

该功率检测装置以STM32F103C8T6微控制器为核心,集成功率检测、数据交互、状态显示和用户提示功能,通过模块化设计实现稳定运行。系统包括按键、LED指示灯、OLED屏幕、INA226电压电流检测、复位电路、晶振电路、蜂鸣器驱动、输入输出接口、调试接口和3.3V降压电路等模块。微控制器通过按键检测用户输入,启动功率检测,采集数据并通过OLED显示,异常情况触发蜂鸣器报警,LED状态指示同步反馈。3.3V降压电路为所有模块提供稳定电源,晶振电路确保时序精度。INA226芯片通过I2C接口与微控制器通信,实

a2784288164的博客 1909

基于.NET 2.0的GIS开源项目SharpMap分析手记(二):源代码总体结构分析

 通过前面的“第一次亲密接触”,我们对SharpMap的功能已经有一个总体的了解,现在我们再来分析SharpMap的源代码总体结构。解压下载的0.9版源代码,有两个文件夹:SharpMap和SharpMap.UI,如图1所示。 图1 SharpMap源代码结构 其中SharpMap.UI是用户界面相关命名空间,如窗体Forms、Ajax等。SharpMap工程是主体,包

地理信息,无处不在 1万+

FPGA之串口收发字符串之(四)——串口屏USART_HMI介绍

之前对串口各模块的设计都做了相关介绍。这里介绍串口屏的相关知识。 本次项目使用的串口屏型号是陶晶驰串口屏TJC3224T024_011,这个型号的串口屏的资料在官网可以找到。本文抛转引玉,简单介绍以便在本工程中更好的应用。 下图是该串口屏的实物图: 一般地,使用单片机或者嵌入式MCU控制串口屏,都会用到串口,同样地,在FPGA中实现也是类似,不过稍微复杂,具体代码设计过程中有以下问题需要...

隔壁old余的博客 7495

Open3D (C++) 使用点云创建数字高程模型DEM

Open3D (C++) 使用点云创建数字高程模型DEM

点云侠的博客 1391

(二)选择postgis作为sharpmap的数据源

Shapfile文件为ESRI公司的文件存储格式,并且得到了业界广泛的支持。Shapfile格式是一种简单的,用非拓朴关系的形式存储几何位置和地理特征的属性信息的格式。虽然GeoServer采用Shapfile文件可以快速的创建网上地图服务,但它的缺点确很明显:   1、Shapefile只支持一个图层,在实际中没有意义。   2、直接保用SHP文件不安全,Shapfile文件很容易被病毒或其...

weixin_30376163的博客 324

CKA-题库-简洁参考答案-反复练习20遍-必过!!!

新版CKA考试已于2020年9月1日正式上线! 考试模式:线上考试 考试时间:2小时 认证有效期:3年 软件版本:Kubernetes v1.19 重考政策:可接受1次重考 经验水平:中級 题目数量:17题 题库量小:随机的题目重复率极高 考试时可打开两个浏览器Tab,一个是考试窗口,一个用来查阅官方文档](https://kubernetes.io/docs/) 01 Task - 英文 Create a new ClusterRole named deployment-clusterrole tha.

随笔记录-分享&记忆 7317

C# SharpMap的简单使用

本文是利用ShapMap实现GIS的简单应用的小例子,以供学习分享使用。关于SharpMap的说明,网上大多是以ShapeFile为例进行简单的说明,就连官网上的例子也不多。本文是自己参考了源代码进行整理的,主要是WinForm的例子。原理方面本文也不过多论述,主要是实例演示,需要的朋友还是以SharpMap源码进行深入研究。 什么是SharpMap ? SharpMap是一个基于.net 2...

weixin_34050427的博客 1612

couldn‘t upgrade db schema: insert into ACT_GE_PROPERTY values (‘common.sche[已解决]

启动整合了flowable的项目,初始化时报错。flowable没有自动建表, 原因 测试数据库版本是MySQL5.7。经过查询和尝试,原因是:在这个数据库里面,已经有一个数据库里面有activiti的这些表了,它检索的时候全库检索查到它了,所以flowable不去建表了,但是我们指定的这个schema里卖弄还是空的,所以它报了找不到表。解决方法:mysql的链接上加上参数如下,让本schema成为默认的schema。...

JavaPub 6007

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

(一)创建一简单地图

SharpMap.Map myMap = new SharpMap.Map(new Size(400,300)); myMap.MinimumZoom = 100; //Minimum zoom allowed myMap.BackgroundColor = Color.White; //Set background myMap.Center = new SharpMap.Geometry....

weixin_30834783的博客 166

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

.net使用npgsql批量写入数据

当有类型限定时,例如jsonb,在单条存储时 在sql语句中使用‘@event_data::jsonb’此形式。多条存储遇到类型限定,在write写入时,加入‘NpgsqlDbType.Jsonb’限定。

lwy 750

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

(精华)2020年6月27日 C#类库 PostgreSqlHelper(Ado.net数据库封装)

using EFCore.Sharding; using Npgsql; using NpgsqlTypes; using System; using System.Collections; using System.Collections.Generic; using System.Data.Common; using System.Net; using System.Net.NetworkInformation; namespace Core.Util { /// <summary&gt

愚公智库 56万+

c# 从MySQL往sharpmap中加载矢量数据图层(一)

从MySQL往sharpmap加载数据的办法。

柠檬森林的博客 1703

基于.NET 2.0的GIS开源项目SharpMap分析手记(六):SharpMap的功能扩展之路

 基于.NET 2.0的GIS开源项目SharpMap分析手记(六):SharpMap的功能扩展之路粟卫民 http://blog.youkuaiyun.com/suen/一个开源项目的发展方向关系到此项目应用的发展与壮大,所以十分重要。好的开源项目正因为开发者准确地把握了项目功能扩充方向,从而把有限的精力用在了使用者最需要的功能上,从而取得了成功。现在来预测SharpMap是否会取得

地理信息,无处不在 1万+

sharpMap 在地图上画圆 方法

///         ///  画圆         ///         /// 圆心点模型         /// 半径         /// 点数         /// 偏移量         public void drawCircle(CF.ShareMapExtLib.Model.PointInfoModel p, double radius, int sid

u014534262的博客 2034

轻松搞定通过c#连接postgis数据库并且实现增删改查功能

1.所需工具 1)VS2017 ;2)Postgis数据库 2.步骤 1)安装Npgsql类包 2)创建PgsqlHelper类(包括 增删改查操作的方法) using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Web; using Npg...

傲骨雄风的博客 4032

开源GIS相关收集

NASA World WindNASA World Wind是使用.NET开发的一个Windows窗体系统,以地球外观看得角度提供全球定位功能,类似于Google Earth。它结合了美国国家航空航天局(NASA)从卫星拍摄的图像,这些图像应用于Blue Marble, Landsat 7, SRTM, MODIS 以及其它更多的地方。链接:http://www.worldwindcentral.

Little Thunder 1190

设置ODBC的自定义类CSetODBC

何志丹一,功能描述用于配置数据源用户名及密码.1,可以得到连接串,此串可用于CMyRecordset(派生于CRecordset)的GetDefaultConnect(),也可以用干CDataBase类OpenEx.2,如果用户配置正确,只需要配置一次,相关信息记录在文件.3,可以指定存储信息的文件名.因为有可能几个程序共用一个数据源.4,用户可以重新配置数据5,可以得到当前数据的类型.6

闻缺陷则喜何志丹 3115
上一篇: 三角网格等值线自动生成方法及程序实现
下一篇: Applying on-the-fly transformation in SharpMap
Chendy
博客等级 码龄23年 67粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值