Я хочу сравнить MULTILINESTRING
тип геометрии с POINT
типом геометрии.Чтобы проверить, совпадает ли (XY) из MULTILINESTRING с (XY) из POINT.В основном тип MULTILINESTRING
выглядит примерно так: MULTILINESTRING((918844.55 6670885.31,918778.87 6670898.9, 918502.96 6670936.35))
, количество координат (XY) может быть больше 3. И тип POINT
выглядит следующим образом: POINT(920892.39 6671627.92)
, но количество координат (XY) равното же самое.
Я получаю эти данные из базы данных postgreSQl, и у меня нет никаких проблем с их извлечением или анализом каждого типа геометрии, но для сравнения.
Сложность, с которой я сталкиваюсьЯ получаю MULTILINESTRING
тип геометрии. Я получаю набор данных, где каждая строка похожа на пример выше.Поэтому мне нужно сравнить каждую (XY) координату MULTILINESTRING
типа геометрии с каждым (XY) POINT
типом геометрии.Если значение совпадает, я хочу INSERT
координаты (XY) таблицы.
Ниже моего кода и объяснений:
Sub importcb_smn(ByVal myConnection As System.Data.Odbc.OdbcConnection)
Dim infoDataset As DataSet, infoDataset2 As DataSet
'Here I get MULTILINESTRING type
infoDataset = accessRequet_odbc("select st_astext(st_snaptogrid(geom, 0.01)) from netgeo_cable", myConnection)
'Here I get POINT type
infoDataset2 = accessRequet_odbc("select st_astext(st_snaptogrid(geom, 0.01)) from netgeo_point_tech", myConnection)
Dim t1 As Long = infoDataset2.Tables(0).Rows.Count
Dim t2 As Long
Dim geomCable As String, geomPt(t1) As String, geomSplit(t2) As String
Dim parse1 As String, parse2 As String, parse3 As String
'Here I parse POINT type data to dump it into an array
For i = 0 To infoDataset2.Tables(0).Rows.Count - 1
parse1 = infoDataset2.Tables(0).Rows(i).ItemArray(0).Remove(0, 6)
geomPt(i) = parse1.Substring(0, parse1.Length - 1)
Next
'Here I parse MULTILINESTRING type
For i = 0 To infoDataset.Tables(0).Rows.Count - 1
parse2 = infoDataset.Tables(0).Rows(i).ItemArray(0).Remove(0, 17)
geomCable = parse2.Substring(0, parse2.Length - 2)
geomSplit = Split(geomCable, ",")
'I test if value matches
For j = 0 To UBound(geomPt)
If geomPt(j) = geomSplit(i) Then
Call executeCommand("insert into netgeo_cable_bis(geom) values (st_geometryfromtext('POINT(" & geomSplit(i) & ")',2154))", myConnection)
End If
Next
Next
End Sub
Поэтому я пытаюсь сравнить 2 массива.Сначала я анализирую и сбрасываю каждую строку infoDataset2
в geomPt()
.Таким образом, каждая строка geomPt()
является (XY) строкой.
Затем я анализирую и выкидываю одну строку infoDataset
в geomSplit()
.Но здесь каждая строка geomSplit()
- это просто (XY) координаты 1 строки infoDaset
.
. Поэтому я пытаюсь сравнивать внутри одного и того же цикла.Чтобы проверить все (XY) координаты каждой строки infoDataset
с каждой строкой infoDataset2
.
, я получаю ошибку в if geomPt(j) = geomSplit(i) then
, говоря: System.IndexOutOfRangeException : The index is outside the limits of the table
.Но я не вижу, как это исправить.
Я хочу извлечь уроки из этого, поэтому, если возможно, объясните мне, что я делаю не так, или если мой подход не хватает понимания.