retrofit 解析百度地图api 返回数据_新版百度地图建筑数据含高度解析

注:本文中所述内容仅作为研究用途,不包括任何技术细节,不提供数据爬取、非法攻击的咨询和支持。另:百度建筑轮廓数据中存在明显签名式错误,下载使用容易被追求侵权。

矢量瓦片:爬取百度地图必须要了解矢量瓦片。矢量瓦片是二进制数据。技术以maxbox为标准。详情可以参考矢量地理数据如何切片?

WebGL:OpenGL的一个javascript绑定。WebGL可以为HTML5 Canvas提供硬件3D加速渲染,Web开发人员可以借助系统显卡来在浏览器里更流畅地展示3D场景和模型wonder-yyc:分享收集的Web 3D学习资源

矢量瓦片技术需要 部署java web。也可以通过本地部署 java web服务器(tomcat)调试js。

百度地图更新后三维模型更加精细了。因为模型是提前建好的,然后将三维模型保存为顶点缓冲和索引,最后直接通过WebGL的方式显示到画布上。(高德还是采用建筑轮廓,并通过高度进行拉伸得到的三维模型)

说白了,百度地图的模型就像是(我们在建模软件里面建完的模型一样)。模型通过计算机图形学(webgl)渲染到屏幕上。

所以建筑高度没有了。

取而代之的是模型渲染信息(顶点缓冲和索引)

投机取巧的童鞋可以洗洗睡了。但是在gis工作者眼中还是小儿科。

技术前提:了解javascript,了解webgl(three.js,重点!!)或者opengl。了解浏览器调试技巧,断点调试。了解地图架构与java web服务器交互(此片文章不牵扯太深刻,不懂的同学也可以通过这篇文章改变你对百度地图的看法)

之前一直有人说百度地图更新后数据加密了,其实这是不完全正确的。百度地图之前采用的是栅格瓦片,不支持三维建筑高度。升级后采用的是webgl与矢量瓦片。矢量瓦片返回的就是二进制数据,所以返回数据没有加密,仅仅是在对其矢量瓦片的请求url进行了封装,,请求的url同样可以通过js跟踪调试解密。然后把二进制数据经过解析(可以调试出json数据)后交给浏览器webgl渲染。

原来的栅格瓦片虽然比较好爬取,直接加载图片在体验上效果非常差,地图缩放会有明显的层级感,不支持3D模型等问题,随着webgl技术越来越成熟,电脑性能强大,大部分地图都支持

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用百度地图提供的公交路线规划 API获取公交线路的所有站点数据。具体步骤如下: 1. 在百度地图开放平台申请开发者账号,并创建一个应用。 2. 在应用管理界面中获取 AK(Access Key)。 3. 在 Android 项目中引入百度地图 SDK。 4. 调用公交路线规划 API,传入起点和终点的坐标,以及其他参数(如公交线路类型、换乘策略等),即可获取到公交线路的所有站点数据。可以使用 Retrofit 或 Volley 等网络请求框架来发送 HTTP 请求并解析返回JSON 数据。 以下是使用 Retrofit 获取公交路线规划数据的示例代码: 1. 定义 API 接口: ```java public interface BaiduMapService { @GET("/direction/v2/transit") Call<TransitRouteResult> searchTransitRoute( @Query("ak") String ak, @Query("origin") String origin, @Query("destination") String destination, @Query("tactics") int tactics, @Query("ret_coordtype") String coordType ); } ``` 2. 创建 Retrofit 实例,并调用 API 接口: ```java BaiduMapService service = RetrofitClient.getClient().create(BaiduMapService.class); Call<TransitRouteResult> call = service.searchTransitRoute( "your_ak", "起点坐标", "终点坐标", 0, // 策略:较快捷 "bd09ll" // 坐标类型:百度经纬度坐标 ); call.enqueue(new Callback<TransitRouteResult>() { @Override public void onResponse(Call<TransitRouteResult> call, Response<TransitRouteResult> response) { if (response.isSuccessful()) { TransitRouteResult result = response.body(); // 解析站点数据 } else { Log.e(TAG, "API request failed: " + response.code()); } } @Override public void onFailure(Call<TransitRouteResult> call, Throwable t) { Log.e(TAG, "API request failed: " + t.getMessage()); } }); ``` 其中,`TransitRouteResult` 是一个 POJO 类,用于存储 API 返回JSON 数据。你需要根据 API 返回JSON 数据结构来定义该类。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值