Пример #1
0
        /// <summary>
        /// 矩形范围查询
        /// </summary>
        /// <param name="Keywords"></param>
        /// <param name="Types"></param>
        /// <param name="PageNumber"></param>
        /// <param name="PageSize"></param>
        /// <param name="Point1"></param>
        /// <param name="Point2"></param>
        /// <returns></returns>
        private static POIResult SearchInBounds
        (
            string[] Keywords,
            string[] Types,
            int PageNumber,
            int PageSize,
            LngLat Point1,
            LngLat Point2
        )
        {
            POIResult poiResult = new POIResult();
            double    x1        = Math.Min(Point1.lng, Point2.lng);
            double    y1        = Math.Min(Point1.lat, Point2.lat);
            double    x2        = Math.Max(Point1.lng, Point2.lng);
            double    y2        = Math.Max(Point1.lat, Point2.lat);

            var query = GetBaseQuery(Keywords, Types)
                        .Where(
                p =>
                p.CENTERX >= x1 && p.CENTERX <= x2
                &&
                p.CENTERY >= y1 && p.CENTERY <= y2
                );

            poiResult.Count   = query.Count();
            query             = OrderAndTakePage(query, PageNumber, PageSize);
            poiResult.Results = query.ToList();
            return(poiResult);
        }
Пример #2
0
        /// <summary>
        /// 半径内查询
        /// </summary>
        /// <param name="Keywords"></param>
        /// <param name="Types"></param>
        /// <param name="PageNumber"></param>
        /// <param name="PageSize"></param>
        /// <param name="CenterPoint"></param>
        /// <param name="Radius"></param>
        /// <returns></returns>
        private static POIResult SearchInRadius
        (
            string[] Keywords,
            string[] Types,
            int PageNumber,
            int PageSize,
            LngLat CenterPoint,
            double Radius
        )
        {
            POIResult poiResult = new POIResult();

            List <object> paras            = new List <object>();
            string        baseSQL          = @"select featureguid,fcode,name,shortname,aliasname,address,labelx,labely,centerx,centery,type,phone,website,photo,fscale,stylename,usource,updatetime,updatestatus from poi t where 1=1 ";
            string        keywordsConditon = string.Empty;

            for (int i = 0, l = Keywords.Length; i < l; i++)
            {
                string kWord = Keywords[i];
                keywordsConditon += " and t.name like :t" + i;
                paras.Add(new OracleParameter(":t" + i, "%" + kWord + "%"));
            }
            baseSQL += keywordsConditon;

            if (Types != null && Types.Length > 0)
            {
                string typeCondition = string.Empty;
                for (int i = 0, l = Types.Length; i < l; i++)
                {
                    var type = Types[i];
                    typeCondition += ":t" + i + ",";
                    paras.Add(new OracleParameter(":t" + i, type));
                }
                typeCondition = " and t.fcode in (" + typeCondition.Trim(',') + ")";
                baseSQL      += typeCondition;
            }

            baseSQL += @" and sdo_within_distance(geometry,sdo_geometry(:point, 4326),:radius) = 'TRUE'";
            string sqlCount = string.Format(@"select count(*) from ({0})", baseSQL);

            paras.Add(new OracleParameter(":point", string.Format("POINT({0} {1})", CenterPoint.lng, CenterPoint.lat)));
            paras.Add(new OracleParameter(":radius", string.Format("distance={0} unit=m", Radius)));

            var count = _context.Database.SqlQuery <int>(sqlCount, paras.ToArray());

            poiResult.Count = count.ToList().First();

            baseSQL += " order by fscale asc";
            string sqlList = string.Format(@"select * from (select t.*,rownum rn from ({0})t where rownum<=:endCount) where rn>:beginCount", baseSQL);

            paras.Add(new OracleParameter(":endCount", (PageNumber + 1) * PageSize));
            paras.Add(new OracleParameter(":beginCount", PageNumber * PageSize));

            var results = _context.Database.SqlQuery <POI>(sqlList, paras.ToArray());

            poiResult.Results = results.ToList();
            return(poiResult);
        }
Пример #3
0
        /// <summary>
        /// 关键字查询
        /// </summary>
        /// <param name="Keywords"></param>
        /// <param name="Types"></param>
        /// <param name="PageNumber"></param>
        /// <param name="PageSize"></param>
        /// <returns></returns>
        private static POIResult SearchByKeywords
        (
            string[] Keywords,
            string[] Types,
            int PageNumber,
            int PageSize
        )
        {
            POIResult poiResult = new POIResult();
            var       query     = GetBaseQuery(Keywords, Types);

            poiResult.Count   = query.Count();
            query             = OrderAndTakePage(query, PageNumber, PageSize);
            poiResult.Results = query.ToList();
            return(poiResult);
        }
Пример #4
0
        public ActionResult SearchPOI(POISearchParameters SearchParameters)
        {
            ReturnObject2 ro = null;

            try
            {
                POIResult poiResult = POISearch.Search(SearchParameters);
                ro = new ReturnObject2();
                ro.AddData("Data", poiResult);
            }
            catch (Exception ex)
            {
                ro = new ReturnObject2(ex.Message);
            }
            return(Json(ro));
        }