2016-06-25 9 views
0

У меня есть этот запрос,Натяжение SQL ГЕОГРАФИЯ сервера полигонам

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 

Цель этого запроса заключается в «Stringify» Географии полигон в Google Maps. ПОЛИГОНЫ отлично работают. Однако, если ПОЛИГОН является МНОГОПОЛИГОНОМ, у меня возникают проблемы с работой JSON. Результатом является ошибка Google плохого JSON.

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

Спасибо.

+0

Это помогло бы, если бы у вас был пример многопользователя SQL и что вы ожидали от вывода. –

ответ

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] 

 Смежные вопросы

  • Нет связанных вопросов^_^