【问题标题】:Convert string coordinates to geography将字符串坐标转换为地理
【发布时间】:2021-05-04 11:30:48
【问题描述】:

我的表格中有字符串坐标,但我想做一些地理功能,所以我需要先将此字符串值转换为地理。像这样:

geography::STGeomFromText('POINT([location])', 4326).MakeValid().STDistance(@p)

但可以肯定的是,这段代码不能正常工作,因为这里需要的是点而不是字符串坐标。

完整代码:

geography::STGeomFromText('POINT([location])', 4326).MakeValid().STDistance(@p);

DECLARE @p geography;  
            SET @p = geography::STGeomFromText('POINT({$Lon} {$Lat})', 4326);
            Select TOP 1 id, location from branches where {$location} <= {$this->radius} order by {$location}

【问题讨论】:

    标签: sql sql-server geography


    【解决方案1】:

    在不了解代码如何对变量进行插值的情况下提供完美的解决方案有点困难,但 SQL 可能会在使用 STGeomFromText 方法将您的 long/lat 识别为字符串时遇到问题。

    你可以试试这样的:

    SELECT geography::STGeomFromText('POINT(' + CAST([$Long] AS VARCHAR(20)) + ' ' + CAST([$Lat] AS VARCHAR(20)) + ')', 4326)
    

    或者更简洁:

    SELECT geography::Point([$Lat], [$Long], 4326)
    

    【讨论】:

    • 我从一开始就没有 LAT 和 LNG 我只有一个像 '315100,425201' 这样的字符串位置,如果位置拆分为 LAT 和 LNG 我可以这样做
    • 知道了,在这种情况下,您可以先拆分字符串:DECLARE @coordinates VARCHAR(MAX) = '38, 78' DECLARE @lat VARCHAR(MAX) = LEFT(@coordinates, CHARINDEX(', ', @coordinates) - 1) DECLARE @long VARCHAR(MAX) = RIGHT(@coordinates, LEN(@coordinates) - CHARINDEX(',', @coordinates) - 1) SELECT geography::Point(@lat, @long, 4326)
    猜你喜欢
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多