GIS开发进阶之路(三) SqlSugar、点聚合抽稀方法

SqlSugar:

(1)创建对象:

//创建SqlSugarClient对象
var db =  new SqlSugarClient(xxx);
var sdb =  new SimpleClient<Student>(db);
var student2 = sdb.GetById(1);
var isDel=sdb.DeleteById(1);

(2)继承扩展:

//可以直接用SimpleClient也可以扩展一个自个的类 推荐直接用 SimpleClient 
public class DbSet<T>:SimpleClient<T>  where T :  class ,  new ()
{
   public DbSet(SqlSugarClient context): base (context)
   {
      
   }
   //SimpleClient中的方法满足不了你,你可以扩展自已的方法
   public List<T> GetByIds(dynamic [] ids)
   {
     return Context.Queryable<T>().In(ids).ToList(); ;
   }
}
//创建一个DbContext类,使用DbSet(或者SimpleClient)
public class DbContext
{
     public DbContext()
     {
       Db =  new SqlSugarClient( new ConnectionConfig()
       {
         ConnectionString =  "xx" ,
         DbType = DbType.SqlServer,
         IsAutoCloseConnection =  true
       });
     }
     public SqlSugarClient Db; //用来处理事务多表查询和复杂的操作
     public DbSet<Student> StudentDb {  get {  return new DbSet<Student>(Db); } } //用来处理Student表的常用操作
     public DbSet<School> SchoolDb {  get {  return new DbSet<School>(Db); } } //用来处理School表的常用操作
}

(3)使用DbContext

//用db完成复杂的工作
List<Student> list2=StudentDb.GetList(); //使用 StudentDb查询
//使用db处理事务
Db.Ado.UseTran(() =>
{
   var s= SchoolDb.GetById(1); //使用SchoolDb查询一条记录          
});
//使用db多表查询
var viewList= Db
       .Queryable<Student, School>((st, sc) => st.SchoolId == sc.Id)
       .Select((st, sc) =>  new { st, sc })
       .ToList();

点聚合抽稀方法:

(1)kmeans

a)性能问题

kmeans是计算密集型算法,需要迭代多次才能完成,而且每次迭代过程中都涉及到复杂的距离计算,比较消耗cpu。

我们在上线后遇到load较高的问题。

b)效果问题

kmeans未能彻底解决重叠覆盖问题!可以看到有些聚合后的图标会叠合在一起。

(2)网格距离法

1)将各个点落到相应正方形内;2)求解各个网格的质心;3)合并质心:判断各个质心是否在某一范围内,如果在某一范围内则进行合并。

(3)直接距离法

初始时没有任何已知聚合点,然后对每个点进行迭代,计算一个点的外包正方形,若此点的外包正方形与现有的聚合点的外包正方形不相交,则新建聚合点(这里不是计算点与点间的距离,而是计算一个点的外包正方形,正方形的边长由用户指定或程序设置一个默认值),若相交,则把该点聚合到该聚合点中,若点与多个已知的聚合点的外包正方形相交,则计算该点到到聚合点的距离,聚合到距离最近的聚合点中,如此循环,直到所有点都遍历完毕。每个缩放级别都重新遍历所有原始点要素。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值