【问题标题】:Pulling SQL Server GEOGRAPHY to POLYGONS将 SQL Server GEOGRAPHY 拉到 POLYGONS
【发布时间】:2016-06-25 17:13:15
【问题描述】:

我有这个问题

SELECT 
    ' {"location":"'+ G.ZCTA5CE10 +', ' + INTPTLON10 + ', ' + INTPTLAT10 + '",'+
               '"polygon":' +
                replace(replace(replace(replace(replace(replace(replace(G.geom.ToString(), 'POLYGON ((', '[{"lng":'), '))', '}]'), ', ', '},{"lng":'), ' ', ',"lat":'), ')', ''), '(', ''), 'MULTI', '') +
                '}'
FROM REF_ZIP_GEOG G WITH(INDEX([geog_sidx]))
WHERE G.geom.STDistance(geography::STPointFromText('POINT(-81.3225 32.113)', 4326))<= 40234;  --40.234 KM ~ 25 Miles

此查询的目的是将 GEOGRAPHY 多边形“字符串化”到谷歌地图中。多边形工作得很好。但是,如果 POLYGON 是 MULTI-POLYGON,我在处理 JSON 时会遇到问题。结果是一个错误的 JSON 的 Google 错误。

有没有人使用过 MULTI POLYGONS,您能推荐一些东西来改变我的 SQL 语句以使其正常工作吗?

谢谢。

【问题讨论】:

  • 如果您有一个 SQL 多面体的示例以及您期望输出的样子,这将有所帮助。

标签: sql sql-server json sqlgeography


【解决方案1】:

虽然你需要翻译成你的替代品......

Ignore "MULTIPOLYGON"s and split on ")), ((" and handle each as you would a polygon.

但是,我用来完成此任务的最简单和最快的方法(主要在 JS 中):

get the geography.STAsText() from sql into some functional language
foreach multi
    replace "MULTIPOLYGON" with "" (nothing)
    split on ")), (("
    foreach poly
        replace "POLYGON" with ""
        split on "), ("
        foreach coordset
            replace "[((]" and "[))]" with ""
            split on ","
            foreach point
                trim and split on " "
                lat = coord[1]
                lng = coord[0]

【讨论】:

    猜你喜欢
    • 2011-03-21
    • 2021-08-07
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多