去百度API的百度地图准确叠加和坐标转换的解决方案研究

1.背景

目前项目上如果要使用百度地图,得加载百度的开发包,然后通过百度提供的接口来调用百度地图以及将需要标记的点显示在百度地图中等等。

此方案存在明显劣势:

a.对原系统的破坏。一套从底层开发的系统,其地图的加载方式均是从底层通过换算行列号来进行加载的。而百度地图却必须脱离此方案通过调用百度API来实现,破坏了整个系统的架构,并且导致很多基于原架构的功能无法使用。

b.自身发布的矢量服务等无法使用。因为百度采用的是非标准火星坐标,自己采集的大量shp数据如果不纠正到百度坐标系下,是无法正确叠加到百度地图上的。这同时导致了,当我们将shp数据进行矢量发布后,由于从百度获取的坐标不是该矢量服务对应的坐标系下的坐标,从而无法进行准确的查询等功能。

c.要素展示等功能无法定制。要素展示等必须使用百度API,将要素坐标等作为参数然后在百度地图上标记出来。这限制了要素的定制展示。

d.其他诸多问题。由于必须使用百度开发包,限制了AGS JS或OL的有效使用。

那么,我们是否能不使用百度API,实现百度地图的准确加载,以及实现自身图层可以准确叠加到百度地图上,从而使自身图层对应的矢量服务可以正确使用?

下面我跟大家大致介绍下目前我和一个同事这两周的研究成果。

2.解决方案

2.1 百度地图非API引用

如果我们能够算出百度地图的地图级别、切图原点、瓦片大小。我们便可以不使用百度的API来调用百度地图了。

通过对百度代码的解析,以及对标准横轴墨卡托投影的研究,我们成功获取了百度地图的各个参数。

2.2 坐标转换

我们将坐标转换分为了在线转换和离线转换,并开发了相关工具。

工具的功能是:将shp图层导入到工具后,能将shp图层转换成百度坐标系下的shp图层。

工具的原理是:建立控制点库,利用算法,实现坐标转换。

3.成果展示

                       

4.问题

目前该成果还未用到项目中,有诸多地方需要改进或研究或实现:比如工具效率、精度厘米级上的提升、自制的百度瓦片下载工具等。

而且目前均是将坐标转到百度地图坐标系下。通过算法,我们应该是可以将百度坐标转换到通用坐标系下,但是这里又涉及到如何将百度地图瓦片(栅格图片)纠正到通用地图下,此难度比单纯的矢量数据转换难很多。

就目前应用来看,如果要使用百度地图,除我们GIS部分,需要手机组、MIS组、实景组等,均需保存的数据为百度坐标系下的坐标,如此各组对接起来才更方便。但是,此时保存的数据为百度坐标系下的数据,该数据如果要给其他公司使用,还得进行再次反算为通用坐标系下坐标。

可见,大项目上使用还是有诸多不便的。不过,这个问题是使用百度地图的通用问题,跟我们是否进行了去百度API化无关。

 

                                                                            ——欢迎转载,但保留版权,请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于多子图叠加地图共用坐标轴的情况,可以使用Matplotlib库来实现。可以先创建一个包含多个子图的Figure对象,然后分别在每个子图上绘制地图并设置不同的坐标轴范围。最后通过调整坐标轴位置和大小来实现地图叠加和共用坐标轴的效果。以下是一个简单的示例代码: ``` import matplotlib.pyplot as plt # 创建包含多个子图的Figure对象 fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(10, 10)) # 在每个子图上绘制地图并设置坐标轴范围 axes[0, 0].plot(x1, y1) axes[0, 0].set_xlim([xmin1, xmax1]) axes[0, 0].set_ylim([ymin1, ymax1]) axes[0, 1].plot(x2, y2) axes[0, 1].set_xlim([xmin2, xmax2]) axes[0, 1].set_ylim([ymin2, ymax2]) axes[1, 0].plot(x3, y3) axes[1, 0].set_xlim([xmin3, xmax3]) axes[1, 0].set_ylim([ymin3, ymax3]) axes[1, 1].plot(x4, y4) axes[1, 1].set_xlim([xmin4, xmax4]) axes[1, 1].set_ylim([ymin4, ymax4]) # 调整坐标轴位置和大小 plt.subplots_adjust(left=0.05, bottom=0.05, right=0.95, top=0.95, wspace=0.1, hspace=0.1) # 显示图像 plt.show() ``` 其中,x1、y1、xmin1、xmax1、ymin1、ymax1等变量分别表示第一个子图的横轴、纵轴数据和坐标轴范围。其他子图同理。调用subplots函数创建Figure对象时,通过nrows和ncols参数可以指定子图的行数和列数,通过figsize参数可以指定Figure对象的大小。调用subplots_adjust函数可以调整子图之间的间距和坐标轴位置。最后调用show函数显示图像。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值