base 镜像 - 每天5分钟玩转容器技术(10)
上一节我们介绍了最小的 Docker 镜像,本节讨论 base 镜像。 base 镜像有两层含义: 不依赖其他镜像,从 scratch 构建。
用过美团外卖的小伙伴们都知道,美团通过收货地址来为我们推荐附近的商品或者商家,如下:
要想实现这个业务,需要:
上一次,我们介绍了百度LBS地图的Web端开发实战,主要介绍了百度地图的地图展示、本地检索、逆/地理编码、覆盖物、城市列表等关键功能;实现了店铺的坐标点定位。
那么这一次我们着重介绍通过百度LBS云存储和云检索实现“根据收货地址来检索附近的店铺”的功能。
LBS.云是百度地图针对LBS开发者推出的平台级服务,结合已有的地图API和SDK服务,通过开放服务端存储和计算能力,提供海量位置数据的实时存储、检索、展示一体化解决方案。
这个解决方案让我们能够很轻松地实现上述功能。
LBS云提供了关键的nearby API,这个API主要是通过上传一个Point的坐标到LBS云,通过nearby的检索功能实现对附近10000米范围的Point点检索,通过json数据传递给我们开发者。
LBS云为我们提供了一个可扩展列的位置数据表(geotable),里面可以存储我们想要保存的关键字段,比如店铺ID。
这样,我们开发者只需要关注如何存储数据和获取数据了。
首先,申请一个百度LBS的密钥(ak)。
然后到虎鲸数据管理平台创建自己的table。
我的table名为ym_shop_lbs,自定义字段为shop_id。
我现在要做的就是将店铺的point和ID存储到LBS云。
百度LBS地图的Web端开发实战教程中介绍到了如何存储店铺的Point,我们接着讲。
通过ajax将point的信息传递的controller。
$.showConfirm("您确定要将 " + rs.address + " 设为当前地址吗?", function() {
// 通过ajax进行地址点的更新
$.ajax({
type : 'POST',
url : common.ctx + "/seller/updateShopLocation",
dataType : "json",
cache : false,
data : {
lbs_point : point.lng + "," + point.lat,
lbs_address : rs.address,
},
success : function(json) {
},
error : function(xhr, ajaxOptions, thrownError) {
$.showErr("更新店铺坐标失败,稍后再试");
}
});
接下来的代码,篇幅比较长,考虑到每个人的项目需求都不一样,就不贴具体的代码了,我把几个关键的代码,都提交到了CSDN的代码库 bd_lbs_yun ,可参照。
public ModelAndView updateShopLocation() {
Shops shop = mem.get("shop");
String lbs_point = getPara("lbs_point");
String lbs_address = getPara("lbs_address");
shop.setAddress(lbs_address);
if (StringUtils.isEmpty(shop.getLbs_point())) {
shop.setLbs_point(lbs_point);
// 增加坐标值
message = this.shopService.addLocation(shop);
} else {
shop.setLbs_point(lbs_point);
// 更新坐标值
message = this.shopService.updateLocation(shop);
}
}
增加坐标点和更新坐标点。
private Map<String, Object> createLBSParams(Shops shop) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("ak", Variables.baidu_map_key);
params.put("geotable_id", Variables.baidu_map_table_id);
params.put("title", shop.getPusername());// 店铺名称
String[] lbs_points = shop.getLbs_point().split(",");
// 经度
params.put("longitude", lbs_points[0]);
params.put("latitude", lbs_points[1]);// 店铺纬度
params.put("coord_type", "3");
return params;
}
public String addLocation(Shops shop) {
Map<String, Object> params = createLBSParams(shop);
// 自定义列
params.put("shop_id", shop.getPid());// 放入用户id,或者店铺仓库id用户后期检索
/*
* 参数名 参数含义 类型 备注 status 状态码 int32 0代表成功,其它取值含义另行说明 message 响应的信息
* string(50) 状态码描述 id 新增的数据的id string
*/
String jsonStr = BaiduLBSUtil.createPOI(params);// 返回
CreateResData resData = JSON.parseObject(jsonStr, CreateResData.class);
if (!resData.isSuccessed()) {
throw new OrderException(resData.getMessage());
}
return "店铺位置设置成功";// 返回新增列的id
}
BaiduLBSUtil的具体内容,可从CSDN的代码库 bd_lbs_yun 下载。
通过nearby方法检索。
// 获取列表信息
// http://api.map.baidu.com/geosearch/v3/nearby?ak=您的ak&geotable_id=****&location=116.395884,39.932154&radius=1000&tags=酒店&sortby=distance:1|price:1&filter=price:200,300
Map<String, Object> params = new HashMap<String, Object>();
params.put("ak", Variables.baidu_map_key);
params.put("geotable_id", Variables.baidu_map_table_id);
params.put("location", lbs_point);// 收货地址的坐标点
params.put("radius", 10000);// 检索半径
params.put("page_index", vo.getPageNum() - 1);// 百度从0开始
params.put("page_size", vo.getNumPerPage());// 百度默认为10,最多50
String jsonStr = BaiduLBSUtil.nearby(params);// 返回
NearbyResData resData = JSON.parseObject(jsonStr, NearbyResData.class);
ArrayList<ContentData> shop_ids = resData.getContents();
需要注意的是,百度LBS云的nearby方法本身提供了分页功能,并且下表从0开始,不是从1开始。
获取到shop_id后,表示大功告成了。
接下来就只需要将shop_id和自己的表进行关联,获取到对应的数据就可以了。
如果要显示距离,可通过ContentData中的distance字段来获取。
限于篇幅、以及各自项目的不同,本文提供的代码只能作为参照,如果还需要帮助,可以通过技术交流群和我联系。
不务正业的IT狗,喜欢读书和写作!
微信扫一扫下方二维码即可关注 沉默王二 公众号:
微信关注我们
转载内容版权归作者及来源网站所有!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。
Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。
Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。
Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。