|
Public Function MeshesToDegree(ByVal Meshes As String, ByRef Latitude As Double, ByRef Longitude As Double, Optional LatitudePoint As Double = 0, Optional LongitudePoint As Double = 0)
'-------------------------------------------------------------------------------
' MeshesToDegree
' 説明
' 「メッシュコード」から「緯度経度」への変換
' パラメータ
' Meshes : 1〜9次メッシュ情報
' LatitudePoint : 0/南 0.5/中心 1/北
' LongitudePoint : 0/西 0.5/中心 1/東
' 戻り値
' Latitude : 緯度「度」情報
' Longitude : 経度「度」情報
'-------------------------------------------------------------------------------
Dim decLatitude As Variant '緯度
Dim decLongitude As Variant '経度
Dim decMeshesLatitude As Variant 'メッシュ緯度
Dim decMeshesLongitude As Variant 'メッシュ経度
Dim decMeshesTemp As Variant 'メッシュ
decLatitude = CDec(0) '緯度
decLongitude = CDec(0) '経度
'----- 変換用値設定
Call MeshesInit
'----- 1次メッシュコード変換(一辺約80km)
If Len(Meshes) >= 4 Then
decMeshesLatitude = CDec(Mid(Meshes, 1, 2)) 'メッシュ緯度
decMeshesLongitude = CDec(Mid(Meshes, 3, 2)) 'メッシュ経度
If Len(Meshes) = 4 Then
decMeshesLatitude = decMeshesLatitude + CDec(LatitudePoint) 'メッシュ緯度
decMeshesLongitude = decMeshesLongitude + CDec(LongitudePoint) 'メッシュ経度
End If
decLatitude = decLatitude + (decMeshesLatitude * conDeg1stLat)
decLongitude = decLongitude + (decMeshesLongitude + conDeg1stLon)
End If
'----- 2次メッシュコード変換(一辺約10km 1次メッシュを縦横8分割)
If Len(Meshes) >= 6 Then
decMeshesLatitude = CDec(Mid(Meshes, 5, 1)) 'メッシュ緯度
decMeshesLongitude = CDec(Mid(Meshes, 6, 1)) 'メッシュ経度
If Len(Meshes) = 6 Then
decMeshesLatitude = decMeshesLatitude + CDec(LatitudePoint) 'メッシュ緯度
decMeshesLongitude = decMeshesLongitude + CDec(LongitudePoint) 'メッシュ経度
End If
decLatitude = decLatitude + (decMeshesLatitude * conDeg2ndLat)
decLongitude = decLongitude + (decMeshesLongitude / conDeg2ndLon)
End If
'----- 3次メッシュコード変換(一辺約1km 2次メッシュを縦横10分割)
If Len(Meshes) >= 8 Then
decMeshesLatitude = CDec(Mid(Meshes, 7, 1)) 'メッシュ緯度
decMeshesLongitude = CDec(Mid(Meshes, 8, 1)) 'メッシュ経度
If Len(Meshes) = 8 Then
decMeshesLatitude = decMeshesLatitude + CDec(LatitudePoint) 'メッシュ緯度
decMeshesLongitude = decMeshesLongitude + CDec(LongitudePoint) 'メッシュ経度
End If
decLatitude = decLatitude + (decMeshesLatitude * conDeg3rdLat)
decLongitude = decLongitude + (decMeshesLongitude / conDeg3rdLon)
End If
'----- 4次メッシュコード変換(一辺約500m 3次メッシュを縦横2分割)
If Len(Meshes) >= 9 Then
decMeshesTemp = CDec(Mid(Meshes, 9, 1)) - con1
decMeshesLatitude = CDec(Fix(decMeshesTemp / con2)) 'メッシュ緯度
decMeshesLongitude = decMeshesTemp - (decMeshesLatitude * con2) 'メッシュ経度
If Len(Meshes) = 9 Then
decMeshesLatitude = decMeshesLatitude + CDec(LatitudePoint) 'メッシュ緯度
decMeshesLongitude = decMeshesLongitude + CDec(LongitudePoint) 'メッシュ経度
End If
decLatitude = decLatitude + (decMeshesLatitude * conDeg4thLat)
decLongitude = decLongitude + (decMeshesLongitude / conDeg4thLon)
End If
'----- 5次メッシュコード変換(一辺約250m 4次メッシュを縦横2分割)
If Len(Meshes) >= 10 Then
decMeshesTemp = CDec(Mid(Meshes, 10, 1)) - con1
decMeshesLatitude = CDec(Fix(decMeshesTemp / con2)) 'メッシュ緯度
decMeshesLongitude = decMeshesTemp - (decMeshesLatitude * con2) 'メッシュ経度
If Len(Meshes) = 10 Then
decMeshesLatitude = decMeshesLatitude + CDec(LatitudePoint) 'メッシュ緯度
decMeshesLongitude = decMeshesLongitude + CDec(LongitudePoint) 'メッシュ経度
End If
decLatitude = decLatitude + (decMeshesLatitude * conDeg5thLat)
decLongitude = decLongitude + (decMeshesLongitude / conDeg5thLon)
End If
'----- 6次メッシュコード変換(一辺約125m 5次メッシュを縦横2分割)
If Len(Meshes) >= 11 Then
decMeshesTemp = CDec(Mid(Meshes, 11, 1)) - con1
decMeshesLatitude = CDec(Fix(decMeshesTemp / con2)) 'メッシュ緯度
decMeshesLongitude = decMeshesTemp - (decMeshesLatitude * con2) 'メッシュ経度
If Len(Meshes) = 11 Then
decMeshesLatitude = decMeshesLatitude + CDec(LatitudePoint) 'メッシュ緯度
decMeshesLongitude = decMeshesLongitude + CDec(LongitudePoint) 'メッシュ経度
End If
decLatitude = decLatitude + (decMeshesLatitude * conDeg6thLat)
decLongitude = decLongitude + (decMeshesLongitude / conDeg6thLon)
End If
'----- 7次メッシュコード変換(一辺約75m 6次メッシュを縦横2分割)
If Len(Meshes) >= 12 Then
decMeshesTemp = CDec(Mid(Meshes, 12, 1)) - con1
decMeshesLatitude = CDec(Fix(decMeshesTemp / con2)) 'メッシュ緯度
decMeshesLongitude = decMeshesTemp - (decMeshesLatitude * con2) 'メッシュ経度
If Len(Meshes) = 12 Then
decMeshesLatitude = decMeshesLatitude + CDec(LatitudePoint) 'メッシュ緯度
decMeshesLongitude = decMeshesLongitude + CDec(LongitudePoint) 'メッシュ経度
End If
decLatitude = decLatitude + (decMeshesLatitude * conDeg7thLat)
decLongitude = decLongitude + (decMeshesLongitude / conDeg7thLon)
End If
'----- 8次メッシュコード変換(一辺約37.5m 7次メッシュを縦横2分割)
If Len(Meshes) >= 13 Then
decMeshesTemp = CDec(Mid(Meshes, 13, 1)) - con1
decMeshesLatitude = CDec(Fix(decMeshesTemp / con2)) 'メッシュ緯度
decMeshesLongitude = decMeshesTemp - (decMeshesLatitude * con2) 'メッシュ経度
If Len(Meshes) = 13 Then
decMeshesLatitude = decMeshesLatitude + CDec(LatitudePoint) 'メッシュ緯度
decMeshesLongitude = decMeshesLongitude + CDec(LongitudePoint) 'メッシュ経度
End If
decLatitude = decLatitude + (decMeshesLatitude * conDeg8thLat)
decLongitude = decLongitude + (decMeshesLongitude / conDeg8thLon)
End If
'----- 9次メッシュコード変換(一辺約18.75m 8次メッシュを縦横2分割)
If Len(Meshes) >= 14 Then
decMeshesTemp = CDec(Mid(Meshes, 14, 1)) - con1
decMeshesLatitude = CDec(Fix(decMeshesTemp / con2)) 'メッシュ緯度
decMeshesLongitude = decMeshesTemp - (decMeshesLatitude * con2) 'メッシュ経度
If Len(Meshes) = 14 Then
decMeshesLatitude = decMeshesLatitude + CDec(LatitudePoint) 'メッシュ緯度
decMeshesLongitude = decMeshesLongitude + CDec(LongitudePoint) 'メッシュ経度
End If
decLatitude = decLatitude + (decMeshesLatitude * conDeg9thLat)
decLongitude = decLongitude + (decMeshesLongitude / conDeg9thLon)
End If
Latitude = decLatitude '緯度
Longitude = decLongitude '経度
End Function
|