使用 Excel VBA 对 KML 文件进行经纬度排序

Sorting lat long for KML file using Excel VBA

我想知道是否有人可以帮助我。

我正在尝试将一些经纬度放入 KML 文件中以供 Google 地球使用。但是从我的测试来看,KML 文件似乎不喜欢很长的经纬度,如果它太长,它会在 kml 中给我“######”。

我一直在尝试创建一些代码,这样如果一个 latlong 字符串的长度超过 230 个字符,它会将其分成几段,这样每行的字符就会小于 230 个。

代码需要剪切经纬度并将每个新部分粘贴到工作表中的新行中。 latlong 的每一行必须以“,0”结尾,并且每一行必须以新的 lat long 开头,因此“-1.39,55.292,0 -1.32 ..... etc)

我尝试了以下方法:

LatLong = "-1.39665,55.92563,0 -2.39654,52.92552,0 -3.39626,51.92541,0 -3.39617,55.92533,0 -3.39621,41.92526,0 -3.39649,51.9252592,0 -3.39649,51.9252592,0 -3.39649,51.9382525.6,0 -1.39684,23.92537,0 -3.39686,50.92549,0 -3.39688,41.9256,0 -1.39684,23.92537,0 -3.39686,50.92549,0 -3.39688,41.9256,0 -1.39684,23.92537,0 -3.39686,50.92549,0 -3.39688 ,41.9256,0

    Dim Revserse As String
    Dim length2 As String
    length2 = Len(LatLong)
    Dim point As Integer
    Dim NewLatLong As String

If Len(LatLong) < 230 Then
    ActiveCell.Value = LatLong
    ActiveCell.Offset(1).Select
    Selection.Insert Shift:=xlDown
Else

    NewLatLong = Left(LatLong, 230)
    Revserse = StrReverse(NewLatLong)
    For i = 1 To Len(Revserse)
        If Mid(Revserse, i, 2) = "0," Then
            point = i
            Exit For
        End If
    Next i
    point = 230 - point

First_new_latlong = Left(LatLong, (point + 1))

Second_new_latlong= Right(LatLong, (length2 - (point + 1)))
MsgBox newlatlong1

MsgBox newlatlong2
End if

但是,我上面的代码不会检查 latlong 的新切碎部分是否再次超过 230 个字符。但我想不通。我认为需要有一个 for 循环来不断检查新的 latlong 是否大于 230 但由于约束,即必须以“,0”结尾并且新行必须以新的 latlong “-1.29,55.11, 0...”变得棘手。

不知道有没有人可以帮忙?

感谢您的帮助!

根据我对 KML 规范的了解,在一条线上应该不需要有一个以上的坐标三元组。 (毫无疑问,您可以这样做,但您不需要这样做。)

因此你应该能够在每个三元组之间插入一个 CR/LF 而不是 space:

Dim latlong As String
latlong = "-1.39665,55.92563,0 -2.39654,52.92552,0 -3.39626,51.92541,0 -3.39617,55.92533,0 -3.39621,41.92526,0 -3.39649,51.92525,0 -3.39668,55.92529,0 -1.39684,23.92537,0 -3.39686,50.92549,0 -3.39688,41.9256,0 -1.39684,23.92537,0 -3.39686,50.92549,0 -3.39688,41.9256,0 -1.39684,23.92537,0 -3.39686,50.92549,0 -3.39688,41.9256,0"

latlong = Replace(latlong, " ", vbCrLf)

MsgBox latlong

从该代码生成的字符串应该能够插入到 KML 文件中。