Giter Club home page Giter Club logo

lbs-spring-boot's Introduction

author Maven Central Spring Boot LICENSE

star star star

简介

腾讯地图 WebService API 是基于 HTTPS/HTTP 协议的数据接口。

开发者可以使用任何客户端、服务器和开发语言,按照腾讯地图 WebService API 规范,按需构建 HTTPS 请求,并获取结果数据(目前支持JSON/JSONP方式返回)。

lbs-spring-boot-starter 是基于上述封装成 Java SDK 版本,可以帮助你更快地在 Spring Boot 之上构建 WebService API 应用。

lbs-spring-boot-starter 目前集成了地点搜索、IP定位等接口。

快速开始

引入依赖

<dependency>
  <groupId>com.starimmortal</groupId>
  <artifactId>lbs-spring-boot-starter</artifactId>
  <version>1.0.1</version>
</dependency>

参数配置

# 腾讯位置服务
lbs:
  # 开发者密钥
  key: OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77
  # 签名校验
  sg: ER1w0iqvajsow4a5tAC7OPfBVboHzMe

申请开发者密钥

1)注册账号;如果您已经是腾讯位置服务开发者,请登录,并进入控制台。

2)控制台-应用管理-我的应用中创建应用,并在相应的应用中创建Key。

启用服务与安全设置

与授权IP方式比较,使用SN校验稍有开发量,但不必担心服务器换IP的问题。

选中SN校验后,会生成SecretKey (SK),用于请求地图WebServiceAPI时计算签名,将签名做为参数(sig)附带到请求中,腾讯服务器会在收到请求后,使用相同的方式生成签名,并与请求中附带的签名进行比对,当一致时即为校验通过,反之则拒绝。

SecretKey (SK) 要注意保密,如有泄漏应尽快重新重成。

签名校验

基本使用

@SpringBootTest
@Slf4j
public class LbsClientTest {

    @Autowired
	private LbsClient lbsClient;

    @Test
    void nearbyPlaceSearch() {
        NearbyBoundaryRequest nearbyBoundaryRequest = NearbyBoundaryRequest.builder()
                .lat(28.681114)
                .lng(115.918377)
                .radius(1000)
                .autoExtend(1)
                .build();
        FilterRequest filterRequest = FilterRequest.builder().key("tel").condition("<>").value("null").build();
        NearbySearchRequest nearbySearchRequest = NearbySearchRequest.builder()
                .keyword("酒店")
                .boundary(nearbyBoundaryRequest)
                .getSubpois(1)
                .filter(filterRequest)
                .orderby("_distance")
                .build();
        PlaceSearchResponse response = lbsClient.nearbyPlaceSearch(nearbySearchRequest);
        log.info(response.toString());
    }
}
@SpringBootTest
@Slf4j
public class LbsClientTest {

    @Autowired
	private LbsClient lbsClient;

    @Test
    void regionPlaceSearch() {
        RegionBoundaryRequest regionBoundaryRequest = RegionBoundaryRequest.builder()
                .cityName("北京")
                .lat(40.040493)
                .lng(116.273545)
                .autoExtend(1)
                .build();
        FilterRequest filterRequest = FilterRequest.builder().key("category").condition("=").value("公交站").build();
        RegionSearchRequest regionSearchRequest = RegionSearchRequest.builder()
                .keyword("酒店")
                .boundary(regionBoundaryRequest)
                .getSubpois(1)
                .filter(filterRequest)
                .build();
        PlaceSearchResponse response = lbsClient.regionPlaceSearch(regionSearchRequest);
        log.info(response.toString());
    }
}
@SpringBootTest
@Slf4j
public class LbsClientTest {

    @Autowired
	private LbsClient lbsClient;

    @Test
    void rectanglePlaceSearch() {
        RectangleBoundaryRequest rectangleBoundaryRequest = RectangleBoundaryRequest.builder()
                .southwestLat(39.907293)
                .southwestLng(116.368935)
                .northeastLat(39.914996)
                .northeastLng(116.379321)
                .build();
        FilterRequest filterRequest = FilterRequest.builder().key("category").condition("=").value("公交站").build();
        RectangleSearchRequest rectangleSearchRequest = RectangleSearchRequest.builder()
                .keyword("美食")
                .boundary(rectangleBoundaryRequest)
                .filter(filterRequest)
                .build();
        PlaceSearchResponse response = lbsClient.rectanglePlaceSearch(rectangleSearchRequest);
        log.info(response.toString());
    }
}
@SpringBootTest
@Slf4j
public class LbsClientTest {

    @Autowired
	private LbsClient lbsClient;

    @Test
    void placeExplore() {
        NearbyBoundaryRequest nearbyBoundaryRequest = NearbyBoundaryRequest.builder()
                .lat(40.040589)
                .lng(116.273543)
                .radius(1000)
                .autoExtend(1)
                .build();
        PlaceExploreRequest placeExploreRequest = PlaceExploreRequest.builder()
                .boundary(nearbyBoundaryRequest)
                .policy(SearchPolicyEnum.LOCATION_CHECK_IN_SCENE.getPolicy())
                .orderby("_distance")
                .addressFormat("short")
                .build();
        PlaceSearchResponse response = lbsClient.placeExplore(placeExploreRequest);
        log.info(response.toString());
    }
}
@SpringBootTest
@Slf4j
public class LbsClientTest {

    @Autowired
	private LbsClient lbsClient;

    @Test
    public void placeDetail() {
        PlaceSearchResponse response = lbsClient.placeDetail("6621879543162709731");
        log.info(response.toString());
    }
}
@SpringBootTest
@Slf4j
public class LbsClientTest {

    @Autowired
	private LbsClient lbsClient;

    @Test
    public void placeSuggestion() {
        FilterRequest filterRequest = FilterRequest.builder().key("category").condition("=").value("公交站").build();
        PlaceSuggestionRequest placeSuggestionRequest = PlaceSuggestionRequest.builder()
                .keyword("美食")
                .region("北京")
                .policy(SearchPolicyEnum.LOCATION_CHECK_IN_SCENE.getPolicy())
                .filter(filterRequest)
                .addressFormat("short")
                .build();
        PlaceSearchResponse response = lbsClient.placeSuggestion(placeSuggestionRequest);
        log.info(response.toString());
    }
}
@SpringBootTest
@Slf4j
public class LbsClientTest {

    @Autowired
	private LbsClient lbsClient;

    @Test
    public void reverseGeocoder() {
        LocationRequest locationRequest = LocationRequest.builder()
                .lat(39.984154)
                .lng(116.307490)
                .build();
        ReverseGeocoderRequest reverseGeocoderRequest = ReverseGeocoderRequest.builder()
                .location(locationRequest)
                .build();
        ReverseGeocoderResponse response = lbsClient.reverseGeocoder(reverseGeocoderRequest);
        log.info(response.toString());
    }
}
@SpringBootTest
@Slf4j
public class LbsClientTest {

    @Autowired
	private LbsClient lbsClient;

    @Test
    public void geocoder() {
        GeocoderResponse response = lbsClient.geocoder("北京市海淀区彩和坊路海淀西大街74号");
        log.info(response.toString());
    }
}

level(解析级别)取值表:

解析级别
1 城市
2 区、县
3 乡镇、街道
4 村、社区
5 开发区
6 热点区域、商圈
7 道路
8 道路附属点:交叉口、收费站、出入口等
9 门址
10 小区、大厦
11 POI点
@SpringBootTest
@Slf4j
public class LbsClientTest {

    @Autowired
	private LbsClient lbsClient;

	@Test
	public void coordTranslate() {
		List<LocationRequest> locations = new ArrayList<>();
		locations.add(new LocationRequest(39.12, 116.83));
		locations.add(new LocationRequest(30.21, 115.43));
		CoordTranslateRequest request = new CoordTranslateRequest();
		request.setLocations(locations);
		request.setType(LocationTypeEnum.BAIDU.getType());
		CoordTranslateResponse response = lbsClient.coordTranslate(request);
		log.info(response.toString());
	}
}
@SpringBootTest
@Slf4j
public class LbsClientTest {

    @Autowired
	private LbsClient lbsClient;

	@Test
	public void ipLocation() {
		IpLocationResponse response = lbsClient.ipLocation("221.224.9.195");
		log.info(response.toString());
	}
}

TODO

  • 地点搜索
  • 关键词输入提示
  • 逆地址解析(坐标位置描述)
  • 地址解析(地址转坐标)
  • 地址标准化/纠错/补全/验真(暂不支持)
  • 路线规划(驾车/公交/步骑)
  • 批量距离计算(矩阵)
  • 货车路线规划 & 距离矩阵
  • 行政区划
  • 坐标转换
  • IP定位
  • 智能硬件定位(暂不支持)

参考资料

项目趋势

Stargazers over time

开源协议

Apache License

Copyright (c) 2023 ElanYoung

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.