Вот кто-то просил координаты номенклатурных листов по их названиям
Public Function GST2LL(nList As String) As String
' поиск координат углов снимка по номенклатурному квадрату
' nList в формате N-36-012 или N-36-144-Г для масштаба 50.000
Dim LatList As Long, LonList As Long, ListKm100 As Long, Km050 As String
Dim LonBeg As Double, LatBeg As Double, LonEnd As Double, LatEnd As Double
On Error GoTo Skip
' миллионный лист, левый верхний угол
LonList = (CLng(Mid(nList, 3, 2)) - 30 - 1) * 6
LatList = (Asc(Left(nList, 1)) - 64) * 4
ListKm100 = CLng(Mid(nList, 6, 3))
If ListKm100 > 144 Then GoTo Skip
Km050 = Mid(nList, 10, 1)
' километровый лист, левый верхний угол
LonBeg = LonList + (ListKm100 - (Int((ListKm100 - 1) / 12) * 12)) * 0.5 - 0.5
LatBeg = LatList - Int((ListKm100 - 1) / 12) * (1 / 3)
' правый нижний угол листа
If Not Right(nList, 1) Like "#" Then Km050 = Right(nList, 1)
If Km050 = "" Then
LonEnd = LonBeg + 0.5: LatEnd = LatBeg - (1 / 3)
ElseIf Km050 = "А" Or Km050 = "A" Then
LonEnd = LonBeg + 0.25: LatEnd = LatBeg - (1 / 6)
ElseIf Km050 = "Б" Or Km050 = "B" Then
LonBeg = LonBeg + 0.25: LonEnd = LonBeg + 0.25: LatEnd = LatBeg - (1 / 6)
ElseIf Km050 = "В" Or Km050 = "V" Then
LonEnd = LonBeg + 0.25: LatBeg = LatBeg - (1 / 6): LatEnd = LatBeg - (1 / 6)
ElseIf Km050 = "Г" Or Km050 = "G" Then
LonBeg = LonBeg + 0.25: LonEnd = LonBeg + 0.25
LatBeg = LatBeg - (1 / 6): LatEnd = LatBeg - (1 / 6)
End If
' приводим к текстовому выводу с разделителем запятой и 6-ю нулями
GST2LL = FFormat(CStr(LonBeg), 6, ",") & "/" & FFormat(CStr(LatBeg), 6, ",") & "-" & _
FFormat(CStr(LonEnd), 6, ",") & "/" & FFormat(CStr(LatEnd), 6, ",")
Skip:
End Function
сдвоенные листы не понимает, опять же - простите за VB
сюда же можно прикрутить поиск имени номенклатурного листа,
максимум названий можно найти на
http://stern.vitagil.ru/maps/blank.html; полного списка километровых листов я найти не смог...