sql-server - 线串到点

标签 sql-server tsql geospatial sql-server-2012

我需要使用 SQL Server 从线串中提取点。我知道我可以使用 Geometry.ToString() 查看坐标,但我需要新的点几何图形。我该怎么做?

最佳答案

如果您使用的是 SQL 2005+,我建议使用 CTE:

DECLARE @GeometryToConvert GEOMETRY
SET     @GeometryToConvert = 
    GEOMETRY::STGeomFromText('LINESTRING (-71.880713132200128 43.149953199689264, -71.88050339886712 43.149719933022993, -71.880331598867372 43.149278533023676, -71.88013753220099 43.147887799692512, -71.879965998867931 43.147531933026357, -71.879658998868422 43.147003933027179, -71.879539598868575 43.146660333027739, -71.879525332201979 43.145994399695439, -71.87959319886852 43.145452399696296, -71.879660598868384 43.14531113302985, -71.879915932201357 43.145025599696908, -71.879923198868028 43.1449217996971, -71.879885998868076 43.144850733030523, -71.879683932201715 43.144662333030851, -71.879601398868488 43.144565333030982, -71.879316798868956 43.144338333031328, -71.879092332202617 43.144019799698469, -71.8789277322029 43.143902533032019, -71.878747932203169 43.143911533031996, -71.878478132203554 43.14405779969843, -71.878328332203807 43.144066133031743, -71.878148732204068 43.144016599698489, -71.8772655988721 43.143174533033118, -71.876876198872708 43.142725133033821, -71.876801532206173 43.142654933033953, -71.876629398873092 43.142600733034044)', 4269)
;
WITH GeometryPoints(N, Point) AS  
( 
   SELECT 1,  @GeometryToConvert.STPointN(1)
   UNION ALL
   SELECT N + 1, @GeometryToConvert.STPointN(N + 1)
   FROM GeometryPoints GP
   WHERE N < @GeometryToConvert.STNumPoints()  
)

SELECT *, Point.STAsText() FROM GeometryPoints

文本结果

Text Results

空间结果 - STBuffer(.0001)

Spatial Results (Buffered)

关于sql-server - 线串到点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10768390/

相关文章:

mysql - 如何找到点,根据紧密程度排序,得到1-20、21-40等。高效使用Myisam和mysql以及空间索引

sql-server - SQL REPLACE 给出错误 : 'String or binary data would be truncated.'

sql - 使用时间戳过滤/WHERE

math - 在给定起始坐标、范围、方位角和仰角的情况下获取 ECEF XYZ

algorithm - 如何通过 lat long 进行高效的多搜索点

sql-server - 在多个集合中找到一个匹配的集合

c# - 数据库优先方法中的独特约束

sql-server - 将 varchar 值转换为 int,如果输入错误,不会引发异常

sql-server - 使用存储过程中的位输入来确定如何过滤where子句中的结果

sql-server - MS SQL Server 强制转换无一异常(exception)