我有下面的每個字串:
MULTIPOLYGON(((107.067521 16.873693000000003,107.06849999999997 16.873613000000034)))
現在有什么方法可以將 107.067521 16.8736930000003 分組, 107.06849999999997 16.873613000000034 分組并在每個組中將它們分開。組 107.067521 16.873693000000003 的示例將拆分 lat=107.067521, lng=16.873693000000003,對其余組執行相同操作。
uj5u.com熱心網友回復:
我想我會使用 Split 來完成所有作業:
var nums = input.Split(", ()".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
var points = new List<Point>();
for(int i = 1; i < nums.Length; i = 2){
points.Add(new Point {
Lat = double.Parse(nums[i 1],
Lon = double.Parse(nums[i])
});
}
請注意,在 WKT 表示中,更典型的是按“長緯度”順序排列 - 您已經說過緯度在前。如果您絕對確定您的字串是“Long Lat”,則在回圈內交換分配,但首先要仔細檢查,否則您最終可能會在地球上完全不同的地方繪制多邊形
另一件事要指出;你這里只有一個多邊形,如果你只有一個,那么像上面一樣簡單地決議它就可以了,但是多多邊形的使用是為了跟蹤哪些多邊形應該保持在一起。如果只有一個多邊形,則展平到一系列點可以正常作業,但是如果您的字串中確實有多個多邊形,則事情可能會變得不穩定,例如
MULTIPOLYGON( (1 2,3 4,5 6,1 2) , (7 8,9 10,11 12,7 8) )
POLYGON( (1 2,3 4,5 6,1 2,7 8,9 10,11 12,7 8) )
這兩個是完全不同的形狀(后者不閉合)。小心處理它,如果你真的有多個多邊形,請考慮更復雜的決議例程
uj5u.com熱心網友回復:
在沒有正則運算式的情況下,我的方法是找到由 last(和 first包圍的文本),然后使用String.Split和 分隔符,和 空格將其拆分 。如果有多個空格,請洗掉空條目。
string example = @"MULTIPOLYGON(((107.067521 16.873693000000003,107.06849999999997 16.873613000000034)))";
int start = example.LastIndexOf('(');
int end = example.IndexOf(')');
string inside = example.Substring(start 1, end - start - 1);
string[] fields = inside.Split(new char[] { ' ', ',' }, StringSplitOptions.RemoveEmptyEntries);
// Example
Console.WriteLine($"long1={fields[0]} lat1={fields[1]} long2={fields[2]} lat2={fields[3]}");
為了稍微更健壯,您可以先通過逗號分隔以獲取由空格分隔的 long-lat 對,然后在空格上拆分這些欄位。但是假設輸入格式正確,上面的示例應該可以正常作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/388752.html
上一篇:用JS中物件的匹配替換單詞
