2016-06-25 18 views
0

Ich habe diese AbfrageZiehen SQL Server GEOGRAPHY zu POLYGONS

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 

Die Absicht dieser Abfrage ist die GEOGRAPHY Polygon in Google Maps auf "Stringify". POLYGONS funktionieren super. Wenn der POLYGON jedoch ein MULTI-POLYGON ist, habe ich Probleme beim Arbeiten mit dem JSON. Das Ergebnis ist ein Google-Fehler eines schlechten JSON.

Hat jemand mit MULTI POLYGONS gearbeitet und können Sie irgendwas empfehlen, um meine SQL-Anweisung zu ändern, damit das korrekt funktioniert?

Danke.

+0

Es würde helfen, wenn Sie ein Beispiel für das SQL-Multipolygon hätten und wie die Ausgabe aussehen soll. –

Antwort

1

Obwohl Sie müssen in Ihren ersetzt übersetzen ...

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

Aber die einfachste und schnellste Methode, die ich zu, dies zu erreichen verwendet haben (in JS meistens):

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]