利用Postgresql+Postgis进行空间地理信息分析(道路偏移,进出电子围栏等)

本文介绍了如何利用Postgresql+Postgis进行GIS空间分析,如车辆电子围栏、路线偏移等。首先讲解了GIS空间分析的概念,然后详细说明了在Windows服务器上安装PostgreSQL和PostGIS的步骤。接着,通过创建DBHelper类和引入Npgsql库,封装常用分析方法以API形式提供服务。最后,分享了一个稳定运行一年的服务实例,表明该方法能有效处理大量车辆的实时空间分析需求。
摘要由CSDN通过智能技术生成

前言

GIS空间分析指的是在GIS(地理信息系统)里实现分析空间数据,即从空间数据中获取有关地理对象的空间位置、分布、形态、形成和演变等信息并进行分析。

将GIS空间分析利用到系统中,我们可以利用GIS空间分析处理车辆进出电子围栏,车辆预计到达目的地,车辆是否进入某些区域,车辆是否进入道路,车辆是否偏移了规定道路等等相关应用型分析。

准备

针对复杂的GIS空间分析,我们可以利用Postgresql+Postgis来简单实现,我们需要先安装对于的控件分析需要的组件。

1:安装PostgreSQL,我这里使用的是Windows 服务器

2:给PostgreSQL 安装PostGIS组件

安装参考:https://wenku.baidu.com/view/ac2b40ab284ac850ad0242f3.html

实现

首先我们可以与操作MS-SQL,MySQL等数据库一样定义一个DBHelper类,给这个类取名PostgreHelper,封装PostgresSQL数据库操作方法。

   public class PostgreHelper : IDBHelper
    {
        /// <summary>
        /// 读取数据返回DataSet
        /// </summary>
        /// <param name="sqrstr"></param>
        /// <returns></returns>
        public DataSet ExecuteQuery(string sqrstr)
        {
            try
            {
                using (NpgsqlConnection conn = new NpgsqlConnection(Config.PostgreConnectionString))
                {
                    using (NpgsqlDataAdapter da = new NpgsqlDataAdapter(sqrstr, conn))
                    {
                        DataSet ds = new DataSet();
                        da.Fill(ds, "ds");
                        return ds;
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Instance.Error("ExecuteQuery:"+ex.Message);
                return null;
            }
        }

        /// <summary>
        /// 判断增删改执行状态
        /// </summary>
        /// <param name="sqrstr"></param>
        /// <returns></returns>
        public int ExecuteNonQuery(string sqrstr)
        {
            try
            {
                using (NpgsqlConnection conn = new NpgsqlConnection(Config.PostgreConnectionString))
                {
                    using (NpgsqlCommand SqlCommand = new NpgsqlCommand(sqrstr, conn))
                    {
                        int r = SqlCommand.ExecuteNonQuery();  //执行查询并返回受影响的行数
                        conn.Close();
                        return r; //r如果是>0操作成功! 
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Instance.Error("ExecuteNonQuery:"+ex.Message);
                return -1;
            }
        }

        /// <summary>
        /// 读取数据返回数据流
        /// </summary>
        /// <param name="cmdText"></param>
        /// <returns></returns>
        public DbDataReader GetReader(string cmdText)
        {
            try
            {
                using (NpgsqlConnection conn = new NpgsqlConnection(Config.PostgreConnectionString))
                {
                    using (NpgsqlCommand cmd = new NpgsqlCommand(cmdText, conn))
                    {
                        NpgsqlDataReader sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                        return sdr;
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Instance.Error("GetReader:" + ex.Message);
                return null;
            }
        }
    }

这里我们需要引入一个dll,Npgsql;Npgsql封装了一些.NET与PostgreSQL操作方法。

然后我们将一些常用的分析方法进行封装,封装好后以API的方式提供给应用程序使用。

 public class MainGISFunction
    {
        PostgreHelper dbHelper = new PostgreHelper();
        /// <summary>
        /// 判断两个经纬度点之间的距离
        /// 参数格式:经度,纬度
        /// </summary>
        /// <param name="lonlat1">经纬度1</param>
        /// <param name="lonlat2">经纬度2</param>
        /// <returns>直线距离(单位m)/null</returns>
        public DataTable Get
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大鱼>

一分也是爱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值