我正在构建一个以 JSON 格式提供地理边界数据的 Web 服务。
地理数据使用表中的地理类型存储在 SQL Server 2008 R2 数据库中。我使用[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
}
这实际上工作得很好,并将 DB 输出动态转换为 JSON 以响应操作调用。
但是,我不是正则表达式大师,而且对String.Replace()
我的调用也似乎效率低下。
有没有人对此性能有任何建议/意见?