Вызов SQL Server ГЕОГРАФИЯ ПОЛИГОНАМ

У меня есть этот запрос

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 на карты Google. ПОЛИГОНЫ отлично работают. Однако, если ПОЛИГОН является МНОГОПОЛИГОНОМ, у меня возникают проблемы с работой JSON. Результатом является ошибка Google плохого JSON.

Кто-нибудь работал с MULTI POLYGONS и мог ли вы порекомендовать что-нибудь, чтобы изменить мой SQL-запрос, чтобы работать правильно?

Благодарю.

sql,sql-server,json,sqlgeography,

0

Ответов: 1


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]
SQL, SQL-сервер, JSON, sqlgeography,