【问题标题】:SQL Server 2012, UnionAggregate Missing Z and MSQL Server 2012,UnionAggregate 缺少 Z 和 M
【发布时间】:2019-12-11 16:47:44
【问题描述】:

在具有 M 和 Z 的多个有序线几何图形上使用联合聚合,但最终结果缺少这些 Z 和 M 值。我也尝试过使用地理位置,但没有运气。


测试查询

create table #test
(shape geometry)

insert into #test(shape)
values (geometry::STGeomFromText('LINESTRING (-89.831404 29.869888 2.5 28.58, -89.835404 29.869892 2.5 30.13)', 4269)), (geometry::STGeomFromText('LINESTRING (-89.835404 29.869892 2.5 30.13, -89.831403 29.869896 2.5 31.45)', 4269))

DECLARE @geom3 geometry = (select geometry::UnionAggregate(shape) FROM #test )
SELECT @geom3.AsTextZM()

drop table #test

返回

LINESTRING (-89.831403 29.869896, -89.835404 29.869892, -89.831404 29.869888)

我希望得到以下结果:

LINESTRING (-89.831403 29.869896 2.5 28.58, -89.835404 29.869892 2.5 30.13, -89.831404 29.869888 2.5 31.45)

【问题讨论】:

  • 您需要提供更多信息,否则人们会否决您的问题。尝试添加相关代码以及描述您的数据格式。甚至可能还有数据示例。
  • 谢谢。这是我的第一篇文章,不知道该包含什么。
  • 据我所知,UnionAgregate 将生成一个新的地理值,并在此过程中从源形状中删除所有 Z 和 M(高程和测量)数据。
  • 你知道有什么相同/变通但保留 Z 和 M 的方法吗? CollectionAggregate 保留了它们,但它给了我一个无序的几何集合,这不是我想要的
  • 对不起,我没有。

标签: sql-server sqlgeometry


【解决方案1】:

UnionAgregate 将生成一个新的地理值,并在此过程中从源形状中删除所有 Z 和 M(高程和测量)数据。

需要注意的是,UnionAgregate 会将 X 和 Y 坐标相同但 Z 和 M 不同的两个点组合成一个具有 X 和 Y 坐标的点,因此以下脚本将返回 2 个点:

create table #test
(shape geometry)

insert into #test(shape)
values (geometry::STGeomFromText('POINT (-10 10 1 1)', 0)),
(geometry::STGeomFromText('POINT (-10 10 4 4)', 0)),
(geometry::STGeomFromText('POINT (-11 10 4 4)', 0));

select shape.AsTextZM() from #test

select geometry::UnionAggregate(shape).AsTextZM() FROM #test 

drop table #test

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    相关资源
    最近更新 更多