使用GeoDjango时admin后台Point点位显示位置不正确问题
问题根因
点位定位偏移是因为构造空间对象时坐标顺序写反了:
- 谷歌地图输出的坐标规则是
(纬度值, 经度值),你获取到的31.520370是北纬数值,74.358749是东经数值 - GEOSGeometry遵循WKT空间格式标准,
POINT类型要求传入顺序为POINT (经度值 纬度值),你把纬度放到了经度参数位、经度放到了纬度参数位,最终点位落到了错误区域。
修复方案
调整构造GEOSGeometry时的坐标顺序即可,修正后的入库代码如下:
Profile.objects.create( owner=obj.owner, name=obj.ground_name, phone_no=obj.phone_no, # 调整顺序:经度在前,纬度在后 location=GEOSGeometry('POINT (74.358749 31.520370)', srid=4326), address=obj.address, state=obj.state, city=obj.city, country=obj.country )
验证说明
坐标顺序修正后重新写入数据,管理后台的地图点位就会和谷歌地图上的坐标位置完全匹配:
- 原错误写法会把本该落在巴基斯坦拉合尔的点位定位到错误的高纬度海域,和你之前的后台异常显示完全吻合
- 修正后点位会准确定位到目标位置,不存在偏移。
内容的提问来源于stack exchange,提问作者Ahmed Yasin
相关产品推荐
相关产品推荐

