腾讯地图api学习笔记

申请密钥流程:

控制台->应用管理->我的应用->创建应用->添加Key

API Key安全策略:

  1. 设置域名白名单:对输入的域名及其子域名授权,默认情况下所有域名授权
  2. 授权IP:支持单一或多IP授权(多IP段可通过”起始IP-结束IP”配置),默认情况下所有IP授权
  3. 签名校验:发送请求时会对某些参数加密生成sig放到请求路径中。腾讯服务器在收到请求后,会使用相同的方式生成sig,并与请求中附带的sig进行比对,一致则通过

地理编码:将具体地址转换成经纬度

逆地理编码:将经纬度转化成具体地址

根据请求所需的参数封装包

@Data
public class LocationRequest {

    /**
     * 详细地址
     */
    private String address;

    /**
     * 纬度
     */
    private String lat;

    /**
     * 经度
     */
    private String lng;

}

根据返回的参数封装包(便于接收参数)

@Data
public class ResponseResult {

    private String body;

    private String statusCode;

    private int statusCodeValue;

}

@Data
public class LeadingResultBody implements Serializable {

    private String message;

    private Integer status;

    private Object result;

}

@Data
public class ResultDetail {

    private LocationEntity location;

    private String address;

    private String title;

}

@Data
public class LocationEntity {

    private String lat;

    private String lng;

}

Service层

@Slf4j
@Service
public class LocationService {

    @Autowired
    RestTemplate restTemplate;

    public final static String BASE_URL =
        "https://apis.map.qq.com/ws/geocoder/v1/?key=TP2BZ-6A5CQ-*****&";//key对应密钥

    public String setAddress(String address) {
        return BASE_URL + "address=" + address;
    }

    public String setAddress(String lat, String lng) {
        return BASE_URL + "location=" + lat + "," + lng;
    }

    public Object getLocation(LocationRequest locationRequest) {
        if (StringUtils.isNoneBlank(locationRequest.getAddress())) {
            return getLocationSingle(locationRequest.getAddress());
        } else {
            return getLocationList(locationRequest);
        }
    }

    /**
     * 通过地址获得经纬度信息
     *
     * @param address
     * @return
     */
    public Map<String, Object> getLocationSingle(String address) {
        Map<String, Object> map = new HashMap<>();
        String url = setAddress(address);
        String response = JSONObject.toJSONString(sendRequest(url));
        ResultDetail resultDetail = JSONObject.parseObject(response, ResultDetail.class);
        String location = JSONObject.toJSONString(resultDetail.getLocation());
        LocationEntity locationEntity = JSONObject.parseObject(location, LocationEntity.class);
        log.debug(resultDetail.toString());
        log.debug(locationEntity.toString());
        map.put("address", resultDetail.getTitle());
        map.put("lat", locationEntity.getLat());
        map.put("lng", locationEntity.getLng());
        return map;
    }

    /**
     * 通过经纬度获得周围地理信息(目前只实现获取当前坐标下的信息)
     *
     * @param locationRequest
     * @return
     */
    public List<Map<String, Object>> getLocationList(LocationRequest locationRequest) {
        List<Map<String, Object>> result = new ArrayList<>();
        String url = setAddress(locationRequest.getLat(), locationRequest.getLng());
        String response = JSONObject.toJSONString(sendRequest(url));
        ResultDetail resultDetail = JSONObject.parseObject(response, ResultDetail.class);
        String location = JSONObject.toJSONString(resultDetail.getLocation());
        LocationEntity locationEntity = JSONObject.parseObject(location, LocationEntity.class);
        //目前只获取当前坐标下的信息
        Map<String, Object> map = new HashMap<>();
        map.put("address", resultDetail.getAddress());
        map.put("lat", locationEntity.getLat());
        map.put("lng", locationEntity.getLng());
        result.add(map);
        return result;
    }

    public Object sendRequest(String url) {
        Object result = new Object();
        HttpHeaders headers = new HttpHeaders();
        headers.set(HttpHeaders.AUTHORIZATION, null);
        ResponseEntity<String> entity;
        try {
            entity = restTemplate.exchange(url, HttpMethod.GET, new HttpEntity<String>(headers), String.class);
            String response = JSONObject.toJSONString(entity);
            ResponseResult resultTemp = JSONObject.parseObject(response, ResponseResult.class);
            LeadingResultBody resultBody = JSONObject.parseObject(resultTemp.getBody(), LeadingResultBody.class);
            System.out.println(resultBody);
            if (resultBody.getStatus().equals(0)) {
                result = resultBody.getResult();
                System.out.println(result);
            }
        } catch (Exception e) {
            log.info("腾讯地图开放平台调用失败,错误信息" + e);
        }
        return result;
    }
    
}

Controller层

@RestController
@RequestMapping("/location")
public class LocationController {

    @Autowired
    LocationService locationService;

    @PostMapping
    public CommonResponse getLocation(@RequestBody LocationRequest locationRequest) {
        return CommonResponse.success(locationService.getLocation(locationRequest));
    }

}

完成之后可以测试一下(若同时输入地址和经纬度,默认根据地址查经纬度)

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信小程序可以通过调用腾讯地图API实现一些地图相关的功能。首先,在小程序开发过程中,需要先在微信公众平台申请开通腾讯地图API的权限。然后,开发者可以使用小程序的开发工具,在相关的页面中引入腾讯地图API的SDK。 在小程序中调用腾讯地图API可以实现一些功能,如地图显示、定位、搜索、导航等。开发者可以在小程序中创建一个地图容器,通过调用腾讯地图API的相关方法,将地图显示在小程序中的指定位置上。用户可以通过手势操作地图进行缩放、平移等操作。 同时,通过腾讯地图API的定位功能,小程序可以获取用户的地理位置信息。开发者可以在小程序中调用相关接口,实现用户位置的定位和显示。此外,小程序还可以通过调用腾讯地图API的搜索功能,实现地点、位置、路线的搜索。用户可以通过输入关键词,获取相关的地点信息,并在地图上显示。 另外,小程序还可以调用腾讯地图API的导航功能,实现路线规划和导航功能。用户可以通过输入起始点和终点,获取最佳的交通路线,并在地图上显示导航路线。开发者可以通过调用腾讯地图API提供的导航接口,实现小程序的导航功能。 总之,微信小程序可以通过调用腾讯地图API实现地图显示、定位、搜索和导航等功能,为用户提供更好的地理信息服务。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值