You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python将经纬度转换为对应EWKB十六进制值(无需数据库函数)

经纬度转EWKB十六进制字符串问题解决

问题背景

数据库中存储的经纬度与对应EWKB十六进制示例如下:

2.352917, 101.801556 : 0xE6100000010D6DE7FBA9F1D2024017D9CEF7537359400000000000000000
1.283333, 103.500000 : 0xE6100000010DBA490C022B87F43F0000000000E059400000000000000000
4.233333, 117.883333 : 0xE6100000010D3BDF4F8D97EE10408D976E1283785D400000000000000000
17.683333, 83.216667 : 0xE6100000010D022B8716D9AE3140D9CEF753E3CD54400000000000000000
5.430167, 103.149722 : 0xE6100000010DB81E85EB51B815409A99999999C959400000000000000000
10.173167, 76.180222 : 0xE6100000010D7F6ABC7493582440EC51B81E850B53400000000000000000
4.533333, 100.516667 : 0xE6100000010D6F1283C0CA2112400C022B87162159400000000000000000
3.200000, 73.216667  : 0xE6100000010D9A99999999990940D9CEF753E34D52400000000000000000

需求是不依赖数据库函数,用Python将经纬度转换为上述格式的EWKB十六进制字符串,但原有脚本生成结果与目标不符。

原有脚本问题分析

原有脚本存在两处关键错误:

  • 前缀缺失0D,导致头部标识不完整
  • 错误地对经纬度的十六进制字节进行切片交换,破坏了正确的字节顺序

修正后的脚本

import struct

def coordinates_to_hex(lat, lng):
    # 按大端模式打包经度、纬度为IEEE 754双精度浮点字节
    lng_bin = struct.pack('>d', lng)
    lat_bin = struct.pack('>d', lat)
    # 拼接固定前缀、经纬度十六进制、末尾8字节0
    return '0xE6100000010D' + lng_bin.hex().upper() + lat_bin.hex().upper() + '0000000000000000'

验证说明

以第一个示例坐标lat=2.352917, lng=101.801556测试:

  • 脚本生成的十六进制字符串与数据库存储的目标值完全一致
  • 所有示例坐标均可通过该脚本得到正确结果

内容的提问来源于stack exchange,提问作者Coding with noob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 13:47:11