Db2 有人能把这个60位的值转换成地理坐标吗?

Db2 有人能把这个60位的值转换成地理坐标吗?,db2,gis,coordinates,Db2,Gis,Coordinates,我有一个(DB2)数据库表,其中包含位置信息,其中一列是字符(16),包含一个十六进制数。我有一个程序,可以在地图上显示这些点,但无法访问其来源。更改数字会移动地图上的点-我只是不知道算法 一些示例(编辑以包含更多内容): 有没有标准的方法可以做到这一点?这是某种DB2约定还是什么?有什么办法让我弄明白吗 谢谢 可能是UTM网格格式 当然,UTM中有很多变量(例如所使用的数据)。好吧,只是尝试以各种方式解压十六进制值 #! /usr/bin/python import struct impor

我有一个(DB2)数据库表,其中包含位置信息,其中一列是字符(16),包含一个十六进制数。我有一个程序,可以在地图上显示这些点,但无法访问其来源。更改数字会移动地图上的点-我只是不知道算法

一些示例(编辑以包含更多内容):

有没有标准的方法可以做到这一点?这是某种DB2约定还是什么?有什么办法让我弄明白吗


谢谢

可能是UTM网格格式


当然,UTM中有很多变量(例如所使用的数据)。

好吧,只是尝试以各种方式解压十六进制值

#! /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区域50S,基于纬度,长。。。我们不知道数据,但这不会造成超过几百米的差异

对于50区:

(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包装器…)

不幸的是,它看起来不像UTM Zone 50S,无论如何。。。49区看起来也没什么好转

所以,没有太多帮助,但我想我会发布这篇文章来帮助其他可能尝试同样道路的人。。。(我也试着用IBM的浮点而不是IEEE的浮点来解包……也没有运气……)也许我只是太傻了,但我已经没有主意了。希望这有点帮助,不过…

这可能是。它们用于在一维中打包坐标

生成莫顿数很容易。您所要做的就是将x和y坐标数转换为二进制。然后“交错”这些位以得到莫顿数。哪一个先去并不重要,但你必须始终如一


再多一个元组,这个问题就可以回答了。然而,我不确定这些坐标是否完全准确;可能会有一些舍入,特别是MGA是UTM投影。我将进一步调查。+1用于使用OSR。即使Python包装器是。。。古怪的我仍然发现它是一个非常强大的交互式坐标系转换工具。是的!就是这样!这些值正在成功拆分,当其中一个值被修改并重新组合时,地图上的点仅在一个维度中移动。所以,现在我只需要弄清楚他们指的是什么网格。
(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)
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