Переформатирование многоугольников SQLGeography в JSON

Я создаю веб-службу, которая обслуживает данные о географических границах в формате JSON.

Географические данные хранятся в базе данных SQL Server 2008 R2 с использованием типа geography в таблице. Я использую метод [ColumnName] .ToString () для возврата данных многоугольника в виде текста.

Пример вывода:

POLYGON ((-6.1646509904325884 56.435153006374627, ... -6.1606079906751 56.4338050060666))

MULTIPOLYGON (((-6.1646509904325884 56.435153006374627 0 0, ... -6.1606079906751 56.4338050060666 0 0)))

Географические определения могут принимать форму массива пар широта / долгота, определяющих многоугольник или, в случае нескольких определений, массив или многоугольники (мультиполигон).

У меня есть следующее регулярное выражение, которое преобразует вывод в объекты JSON, содержащиеся в многомерных массивах, в зависимости от вывода.

Regex latlngMatch = new Regex(@"(-?[0-9]{1}\.\d*)\s(\d{2}.\d*)(?:\s0\s0,?)?", RegexOptions.Compiled);

    private string ConvertPolysToJson(string polysIn)
    {
        return this.latlngMatch.Replace(polysIn.Remove(0, polysIn.IndexOf("(")) // remove POLYGON or MULTIPOLYGON
                                               .Replace("(", "[")  // convert to JSON array syntax
                                               .Replace(")", "]"), // same as above
                                               "{lng:$1,lat:$2},"); // reformat lat/lng pairs to JSON objects
    }

Это действительно работает довольно хорошо и на лету преобразует вывод БД в JSON в ответ на вызов операции.

Однако я не являюсь мастером регулярных выражений, и вызовы String.Replace () также кажутся мне неэффективными.

Есть ли у кого-нибудь предложения / комментарии по поводу выполнения этого?

8
задан Alex 14 February 2015 в 19:26
поделиться