Я создаю веб-службу, которая обслуживает данные о географических границах в формате 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 ()
также кажутся мне неэффективными.
Есть ли у кого-нибудь предложения / комментарии по поводу выполнения этого?