首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DbGeography搜索查询

DbGeography搜索查询
EN

Code Review用户
提问于 2015-11-20 06:25:49
回答 1查看 553关注 0票数 2

我遇到了一种情况,在这种情况下,我需要找到最接近DbGeography点的道路。

在某些情况下,这需要5-8秒的时间。

我在专栏上有一个Spatial_Index,我重新组织了它,所以它不是支离破碎的。

此查询相当重,有时CPU使用率因此而提高到100%。

这张表是这样的:

以下是空间结果(万一有帮助):

代码语言:javascript
复制
    public string GetRoad(DbGeography point)
    {
        var name = "";
        try
        {
            using (var gisEntities = new GISSpatialEntities())
            {
                var query = String.Format(@"
                            DECLARE @point geography;
                            SET @point = geography::STPointFromText('POINT({0} {1})', 4326);                              

                            SELECT TOP 10 * FROM GeographyLine
                            WHERE GeoLine.STIsValid() =1 AND  @point.STBuffer(200).STIntersects(GeoLine) = 1
                            ORDER BY GeoLine.STDistance(@point)", point.Longitude, point.Latitude);
                var firstOrDefault = gisEntities.GeographyLines.SqlQuery(query).FirstOrDefault();
                if (firstOrDefault != null)
                {
                    name = firstOrDefault.LineName;
                }
            }
        }
        catch (Exception ex)
        {
            var msg = string.Format("Exception in GetRoad() - {0} - Inner [{1}] \r\n", ex.Message, ex.InnerException);
            _logger.LogMessage(MessageType.Error, msg);
        }
        return name;
    }
EN

回答 1

Code Review用户

回答已采纳

发布于 2015-11-20 06:47:01

  • 您不应该执行SELECT TOP 10 * FROM ...,而应该只检索所需的列,在您的示例中,该列是LineName
  • var name = ""不需要出现在那里,如果您只是return firstOrDefault.LineName,并且没有结果/异常返回string.Empty
  • 当我们在var firstOrDefault工作时,我想说,在这里使用var是错误的,因为从作业的正确方面看,不清楚类型是什么。变量名firstOrDefault没有足够的描述性,因此您应该考虑使用geographyLinefoundGeographyLine
  • 您正在选择TOP 10,但使用的是FirstOrDefault。这看起来不太对。使用SELECT TOP 1会更好、更快。
票数 5
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/111282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档