Что ж, просто пытаюсь распаковать шестнадцатеричные значения различными способами ...
#! /usr/bin/python
import struct
import binascii
a = '04867C279DE2D6EC'
b = '04867C27C030085E'
c = '04867C27C230A5FE'
formats = ['2I', '2i', '2f', 'd', '4h', '4H']
formats += ['>'+item for item in formats]
for fmt in formats:
print fmt, '-->'
for item in [a,b,c]:
coords = struct.unpack(fmt, binascii.unhexlify(item))
print ' ', coords
Получает некоторые идеи ...
2I -->
(662472196, 3973505693)
(662472196, 1577595072)
(662472196, 4272238786)
2i -->
(662472196, -321461603)
(662472196, 1577595072)
(662472196, -22728510)
2f -->
(3.5044675291578432e-15, -2.07824221089183e+27)
(3.5044675291578432e-15, 2.4533886735682109e+18)
(3.5044675291578432e-15, -1.0978789217059195e+38)
d -->
(-1.9722947342913136e+216,)
(9.4395557694675488e+144,)
(-1.135288151092706e+302,)
4h -->
(-31228, 10108, -7523, -4906)
(-31228, 10108, 12480, 24072)
(-31228, 10108, 12482, -347)
4H -->
(34308, 10108, 58013, 60630)
(34308, 10108, 12480, 24072)
(34308, 10108, 12482, 65189)
>2I -->
(75922471, 2648889068)
(75922471, 3224373342)
(75922471, 3257968126)
>2i -->
(75922471, -1646078228)
(75922471, -1070593954)
(75922471, -1036999170)
>2f -->
(3.1617264522911893e-36, -6.0043925910101893e-21)
(3.1617264522911893e-36, -2.7505106925964355)
(3.1617264522911893e-36, -44.162101745605469)
>d -->
(7.3832340678903009e-287,)
(7.3832347392384709e-287,)
(7.383234778429458e-287,)
>4h -->
(1158, 31783, -25118, -10516)
(1158, 31783, -16336, 2142)
(1158, 31783, -15824, -23042)
>4H -->
(1158, 31783, 40418, 55020)
(1158, 31783, 49200, 2142)
(1158, 31783, 49712, 42494)
Распаковывает его как беззнаковый знак с прямым порядком байтов32-битное целое число (> 2I) выглядит как проекционные координаты какого-то вида ...
(-32.063657, 115.7658683) --> (75922471, 2648889068)
(-32.0633982, 115.7649085) --> (75922471, 3224373342)
(-32.0633846, 115.7653336) --> (75922471, 3257968126)
Если это UTM, то, вероятно, это UTM Zone 50S, основанная на широте и долготе.Мы не знаем данные, но разница не должна превышать пару сотен метров.
Для зоны 50S:
(lat, long) --> (Easting, Northing)
(-32.063657, 115.7658683) --> (383506.31320936838, 6451842.2821839228)
(-32.0633982, 115.7649085) --> (383415.3800562254, 6451869.9348384682)
(-32.0633846, 115.7653336) --> (383455.49221963808, 6451871.9016738012)
(Использование OSR (ужасно непитонично)оболочки для Python ...)
from osgeo import osr
def latlong2utm(lat, long):
epsg_wgs84 = 4326
epsg_utm50S = 32750
inproj = osr.SpatialReference()
inproj.ImportFromEPSG(epsg_wgs84)
outproj = osr.SpatialReference()
outproj.ImportFromEPSG(epsg_utm50S)
transform = osr.CoordinateTransformation(inproj, outproj)
x,y,_ = transform.TransformPoint(long, lat)
return x, y
К сожалению, это не похоже на UTM Zone 50S, во всяком случае ... А Zone 49 выглядит не лучше ...
Так, не сильно помогло, но я решил опубликовать это, чтобы помочь другим людям, которые, возможно, пробуют тот же путь ... (Я также пытался распаковывать вещи, поскольку плавающие объекты IBM вместо плавающих объектов IEEE ... Там тоже не повезло ...Может быть, я просто глуп, но у меня нет идей.Надеюсь, это немного поможет, хотя ...