地址是否在某区域范围内--基于百度地图

文章介绍了如何使用百度地图API进行地址到经纬度的转换,以及如何判断一个经纬度是否在用户自定义的区域范围内。首先,通过地理编码将地址转为经纬度,然后进行坐标转换以适应百度地图系统。最后,通过算法判断点是否在多边形区域内,实现点是否在用户绘制的区域内的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

功能描述

项目需要判断某个地点是否在某个区域范围内,区域范围需要支持用户编辑,所以不能直接对地址进行解析。本文采用的技术方案是利用百度地图将地址进行编码成经纬度,然后判断经纬度是否在用户绘制的区域范围内即可。

前期准备

申请百度地图账号,获取对应的key,此流程用户自行百度,操作非常简便,就不对此进行详细说明了。

技术实现

地理编码

将地址信息进行地理编码,由实际地理位置转化为经纬度信息,百度地图每天有5000额度的免费转化,如果用户量大需要用户申请额度。

@Value("${map.baidu.key}")
private String key;

@Value("${map.baidu.coordinateUrl:https://api.map.baidu.com/geocoding/v3/?address=%s&output=json&ak=%s}")
private String coordinateUrl;

/**
 * 输入地址信息, 返回该地址的经纬度信息
 * 地址编码
 *
 * @param address 地址参数
 * @return 经纬度参数
 */
public CoordinateDTO getCoordinate(String address) {
   

    String requestUrl = String.format(coordinateUrl, address, key);
    String response = restTemplate.getForObject(requestUrl, String.class);
    if (response == null) {
   
        log.error("百度地图地址解析错误,解析地址是:{}, 请求结果为空", address);
        throw new BizException("百度地图地址解析错误,请求地址是" + address, GlobalErrorInfo.THIRD_ERROR);
    }
    JSONObject jsonObject = JSONObject.parseObject(response);
    if (jsonObject.getInteger("status") != 0) {
   
        log.error("百度地图地址解析错误,解析地址是:{}, 请求结果是:{}", address, jsonObject.toJSONString());
        throw new BizException("百度地图地址解析错误,请求地址是" + address, GlobalErrorInfo.THIRD_ERROR);
    }

    // 百度地图有精确度字段,但同一地址多次请求返回值一致,所以精确度导致的问题需要人工处理
    JSONObject result = jsonObject.getJSONObject("result");
    return result.getObject("location", CoordinateDTO.class);
}

坐标位置转化

如果地址信息是其他地图的经纬度,可以将其经纬度信息转化为百度地图的经纬度信息,然后再进行判断点是否在区块范围内。

/**
 * 坐标装换, 将坐标进行转换
 *
 * @param coordinate 需要转换的坐标
 * @param from       需要转换坐标的类型
 * @param to         转换后的坐标类型
 * @return 转换后的坐标值
 */
public CoordinateDTO geoConv(CoordinateDTO coordinate, BaiduMapEnums from, BaiduMapEnums to) {
   
    String params = coordinate.getLng() + "," + coordinate.getLat
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值