首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从DbGeography点的集合创建DbGeography面

从DbGeography点的集合创建DbGeography面
EN

Stack Overflow用户
提问于 2013-03-01 21:46:11
回答 3查看 9.7K关注 0票数 4

有人能告诉我如何从类型为'POINT‘的DbGeography对象集合中创建类型为'Polygon’的DbGeography对象吗

到目前为止,我已经得到了创建多边形的方法,但是我遗漏了最初的步骤。

代码语言:javascript
复制
1. DbGeography multipoint = DbGeography.MultiPointFromText("MULTIPOINT(53.095124 -0.864716, 53.021255 -1.337128, 52.808019 -1.345367, 52.86153 -1.018524)", 4326)

2. DbGeometry temp_multipoint = DbGeometry.MultiPointFromBinary(multipoint.AsBinary(), 4326)

3. DbGeography polygon = DbGeography.PolygonFromBinary(temp_multipoint.ConvexHull.AsBinary(), 4326); (RESULT)

问题是从DbGeography(点)列表创建初始多点地理对象

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-24 07:39:38

我最终找到了如何从多个点创建多边形,而不必从WKT创建它。下面的解释稍微简化了一点,但尽管如此

代码语言:javascript
复制
    var PolygonFromMultiplePoints = new DbGeography();

    using (var db = new LocationContext())
    {
        //Select Locations known to be within a certain area which should define the polygon.
        foreach (var item in db.Locations)
        {
            PolygonFromMultiplePoints.Union(item.GeoLocation);
        }
    }            
    var temp_multipointgeometry = DbGeometry.MultiPointFromBinary(PolygonFromMultiplePoints.AsBinary(), DbGeometry.DefaultCoordinateSystemId);            
    PolygonFromMultiplePoints = DbGeography.PolygonFromBinary(temp_multipointgeometry.ConvexHull.AsBinary(), DbGeography.DefaultCoordinateSystemId);

代码示例假设您已经有一个以点的形式存储在数据库中的dbgeography集合。我的数据库信息来自于从GeoNames导入位置。

票数 2
EN

Stack Overflow用户

发布于 2013-03-25 22:46:07

使用WKT将每个点创建为DbGeography对象:

代码语言:javascript
复制
DbGeography point1 = DbGeography.FromText("POINT(53.095124 -0.864716)", 4326);
DbGeography point2 = DbGeography.FromText("POINT(53.021255 -1.337128)", 4326);
DbGeography point3 = DbGeography.FromText("POINT(52.808019 -1.345367)", 4326);
...
DbGeography polygon = DbGeography.PolygonFromText("POLYGON((53.095124 -0.864716, 53.021255 -1.337128, 52.808019 -1.345367, 53.095124 -0.864716))", 4326);

需要注意的两件事:

  • WKT格式是经度,然后是纬度,而不是更直观的经长
  • 对于面,最后一个点必须与第一个点匹配才能将其关闭

希望这对我有帮助--我也努力学习多边形的东西!

有关WKT格式的额外提示,请参阅本文:http://en.wikipedia.org/wiki/Well-known_text

票数 6
EN

Stack Overflow用户

发布于 2013-09-22 12:48:01

你真的应该在C#中做这件事,以迭代的方式添加点,原因有两个:

  • 您需要确保结束位置与开始位置相同。
  • 由于环的方向,您需要确保点是顺时针添加的。你可以翻转圆环,逆时针旋转(sqlGeography.ReorientObject();).

您正在处理空间数据,但是复杂形状的构造从来不是T-SQL的目标。在最坏的情况下,将其放在CLR函数中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15159265

复制
相关文章

相似问题

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