当前位置:   article > 正文

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

postgres 按照线偏移

前言

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数据库操作方法。

  1. public class PostgreHelper : IDBHelper
  2. {
  3. /// <summary>
  4. /// 读取数据返回DataSet
  5. /// </summary>
  6. /// <param name="sqrstr"></param>
  7. /// <returns></returns>
  8. public DataSet ExecuteQuery(string sqrstr)
  9. {
  10. try
  11. {
  12. using (NpgsqlConnection conn = new NpgsqlConnection(Config.PostgreConnectionString))
  13. {
  14. using (NpgsqlDataAdapter da = new NpgsqlDataAdapter(sqrstr, conn))
  15. {
  16. DataSet ds = new DataSet();
  17. da.Fill(ds, "ds");
  18. return ds;
  19. }
  20. }
  21. }
  22. catch (Exception ex)
  23. {
  24. Log.Instance.Error("ExecuteQuery:"+ex.Message);
  25. return null;
  26. }
  27. }
  28. /// <summary>
  29. /// 判断增删改执行状态
  30. /// </summary>
  31. /// <param name="sqrstr"></param>
  32. /// <returns></returns>
  33. public int ExecuteNonQuery(string sqrstr)
  34. {
  35. try
  36. {
  37. using (NpgsqlConnection conn = new NpgsqlConnection(Config.PostgreConnectionString))
  38. {
  39. using (NpgsqlCommand SqlCommand = new NpgsqlCommand(sqrstr, conn))
  40. {
  41. int r = SqlCommand.ExecuteNonQuery(); //执行查询并返回受影响的行数
  42. conn.Close();
  43. return r; //r如果是>0操作成功!
  44. }
  45. }
  46. }
  47. catch (Exception ex)
  48. {
  49. Log.Instance.Error("ExecuteNonQuery:"+ex.Message);
  50. return -1;
  51. }
  52. }
  53. /// <summary>
  54. /// 读取数据返回数据流
  55. /// </summary>
  56. /// <param name="cmdText"></param>
  57. /// <returns></returns>
  58. public DbDataReader GetReader(string cmdText)
  59. {
  60. try
  61. {
  62. using (NpgsqlConnection conn = new NpgsqlConnection(Config.PostgreConnectionString))
  63. {
  64. using (NpgsqlCommand cmd = new NpgsqlCommand(cmdText, conn))
  65. {
  66. NpgsqlDataReader sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
  67. return sdr;
  68. }
  69. }
  70. }
  71. catch (Exception ex)
  72. {
  73. Log.Instance.Error("GetReader:" + ex.Message);
  74. return null;
  75. }
  76. }
  77. }

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

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

  1. public class MainGISFunction
  2. {
  3. PostgreHelper dbHelper = new PostgreHelper();
  4. /// <summary>
  5. /// 判断两个经纬度点之间的距离
  6. /// 参数格式:经度,纬度
  7. /// </summary>
  8. /// <param name="lonlat1">经纬度1</param>
  9. /// <param name="lonlat2">经纬度2</param>
  10. /// <returns>直线距离(单位m)/null</returns>
  11. public DataTable Get
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/589769
推荐阅读
相关标签
  

闽ICP备14008679号