/// <summary> /// 根据业务对象ID查找在指定距离范围内的业务对象。 /// 根据BO的空间坐标信息,计算出该对象指定范围内的要求的业务对象类型和业务对象类别的临近对象, /// 并按照与指定对象的距离进行排序,距离近的排在前面。返回对象包括它自己 /// </summary> /// <param name="boid"></param> /// <param name="distince"></param> /// <param name="bot"></param> /// <param name="filter"></param> /// <returns></returns> public NearBOCollection GetNearBOById(string boid, decimal distince, string bot, string filter) { NearBOCollection list = new NearBOCollection(); StringBuilder strSql = new StringBuilder(); strSql.Append(string.Format("(SELECT TOP 1 T.GEOMETRY FROM V_GEOMETRY T WHERE T.BOID='{0}')", boid)); list = GetNearBOByBo(distince, bot, filter, strSql.ToString()); return(list); }
/// <summary> /// 根据对象名称、对象类型查询在该对象指定距离范围内对象, /// 对象类型、对象类别为可选条件,为空则返回所有符合位置关系的对象。返回对象包括它自己 /// </summary> /// <param name="boName"></param> /// <param name="boType"></param> /// <param name="distince"></param> /// <param name="bot"></param> /// <param name="filter"></param> /// <returns></returns> public NearBOCollection GetNearBOByName(string boName, string boType, decimal distince, string bot, string filter) { NearBOCollection list = new NearBOCollection(); StringBuilder strSql = new StringBuilder(); strSql.Append(" (SELECT TOP 1 T3.GEOMETRY "); strSql.Append(" FROM BO T "); strSql.Append(" LEFT JOIN OBJECTTYPE T1 ON T.BOTID = T1.BOTID "); strSql.Append(" LEFT JOIN GEOMETRY T3 ON T.BOID = T3.BOID "); strSql.Append(string.Format(" WHERE T.NAME ='{0}' ", boName)); strSql.Append(string.Format(" AND T1.BOT ='{0}') ", boType)); list = GetNearBOByBo(distince, bot, filter, strSql.ToString()); return(list); }
public NearBOCollection GetNearBOByBo(decimal distince, string bot, string filter, string strSqlGetGeo) { NearBOCollection list = new NearBOCollection(); StringBuilder strSql = new StringBuilder(); strSql.Append(" SELECT DISTINCT B.BOID, T.NAME, O.BOT, SUBSTRING(B.SPACELOCATION,0,3800) AS SPACELOCATION, B.DIST DISTINCE "); strSql.Append(" FROM (SELECT A.BOID, A.NAME, A.GEOMETRY.STAsText() AS SPACELOCATION, "); strSql.Append(string.Format(" ({0}).STDistance(A.GEOMETRY ) AS DIST ", strSqlGetGeo)); strSql.Append(" FROM V_GEOMETRY A "); //过滤条件 if (!string.IsNullOrEmpty(filter)) { strSql.Append(" ,PROPERTY PROPERTY "); strSql.Append(" WHERE PROPERTY.BOID = A.BOID "); strSql.Append(" AND " + "(" + MongoJsonToSql.JsonToSql(filter, bot).ToString() + ")"); strSql.Append(" AND "); } else { strSql.Append(" WHERE "); } strSql.Append(string.Format(" ({0}).STDistance(A.GEOMETRY )<{1} ", strSqlGetGeo, distince)); strSql.Append(" ) B "); strSql.Append(" LEFT JOIN BO T "); strSql.Append(" ON B.BOID = T.BOID "); strSql.Append(" LEFT JOIN OBJECTTYPE O "); strSql.Append(" ON O.BOTID = T.BOTID "); //对象类型 if (!string.IsNullOrEmpty(bot)) { strSql.Append(string.Format(" WHERE O.BOT = '{0}'", bot)); } list.AddRange(SqlServerDBHelper.ExecuteQueryText <NearBO>(strSql.ToString())); return(list); }