Tôi đang xây dựng một dịch vụ web phục vụ dữ liệu ranh giới địa lý theo định dạng JSON.Định dạng lại Đa giác SQLGeography thành JSON
Dữ liệu địa lý được lưu trữ trong cơ sở dữ liệu SQL Server 2008 R2 sử dụng loại địa lý trong bảng. Tôi sử dụng phương thức [ColumnName].ToString()
để trả về dữ liệu đa giác dưới dạng văn bản.
đầu ra Ví dụ:
POLYGON ((-6.1646509904325884 56.435153006374627, ... -6.1606079906751 56.4338050060666))
MULTIPOLYGON (((-6.1646509904325884 56.435153006374627 0 0, ... -6.1606079906751 56.4338050060666 0 0)))
nghĩa địa lý có thể mang hình thức của một trong hai một mảng của các cặp dài/lat xác định một đa giác hoặc trong trường hợp của nhiều định nghĩa, một mảng hoặc đa giác (multipolygon).
Tôi có regex sau đây chuyển đổi đầu ra thành các đối tượng JSON chứa trong mảng đa chiều tùy thuộc vào đầu ra.
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
}
Điều này thực sự hoạt động khá tốt và chuyển đổi đầu ra DB thành JSON khi đang hoạt động để phản hồi cuộc gọi hoạt động.
Tuy nhiên tôi không có chủ regex và các cuộc gọi đến String.Replace()
cũng có vẻ không hiệu quả với tôi.
Có ai có bất kỳ đề xuất/nhận xét nào về hiệu suất này không?
Lưu ý: Định nghĩa địa lý chỉ dành cho GB, được phản ánh trong regex. – James