高德地图API-通过经纬度获取当前位置附近的建筑

一、需求说明

现在公司有一个新的需求,前端传入经纬度,后端计算出附近的医院、派出所等等,通过查阅高德地图的Web服务开发文档,找到了以下接口:

https://restapi.amap.com/v3/place/around?location=经纬度&key=web服务类型的key&keywords=派出所&types=130501&radius=5000&offset=20&page=1

二、这里是参数的介绍

参数
location逗号分割的经纬度,例如117.167688,27.469837
key创建的web类型的key 点击跳转去申请key
keywords周边搜索的关键词
types检索目标的分类(POI类型) 参考高德API官方文档
radius查询半径 0-50000
offset每一页返回查询结果的个数
page第几页

三、 接口返回结果

{
    "status": "1",
    "info": "OK",
    "infocode": "10000",
    "count": "1",
    "suggestion": {
        "keywords": [],
        "cities": []
    },
    "pois": [
        {
            "id": "B025705MII",
            "parent": [],
            "childtype": [],
            "name": "止马镇中心卫生院",
            "type": "医疗保健服务;综合医院;卫生院",
            "typecode": "090102",
            "biz_type": [],
            "address": "止马镇止马中路1号",
            "location": "117.169901,27.471023",
            "tel": "0599-7771221;0599-7772778",
            "pname": "福建省",
            "cityname": "南平市",
            "adname": "光泽县",
            "importance": [],
            "shopid": [],
            "shopinfo": "2",
            "poiweight": [],
            "distance": "255",
            "biz_ext": {
                "rating": [],
                "cost": []
            },
            "photos": [
                {
                    "title": [],
                    "url": "http://store.is.autonavi.com/showpic/beceaa81b666376821c4c7819160742a"
                }
            ]
        }
    ]
}

四、代码分享

这里的HttpUtils和JSONObject都是Hutools工具包的,大家可以直接引入Hutools即可

String resultStr = HttpUtils.get("https://restapi.amap.com/v3/place/around?location=" + location + "&key=你的key&keywords=派出所&types=130501&radius=5000&offset=20&page=1");
JSONObject resultJson = JSONObject.parseObject(resultStr);
JSONArray pois = resultJson.getJSONArray("pois");
String tel = pois.getJSONObject(0).getString("tel");
String name= pois.getJSONObject(0).getString("name");
String location= pois.getJSONObject(0).getString("location");
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
首先,你需要使用高德地图 JavaScript API的`AMap.Geocoder`类来获取经纬度对应的地址信息。可以使用`AMap.Geocoder`的`getAddress`方法,然后在回调函数中获取到市、区、街道等详细地址信息。代码示例如下: ```javascript // 初始化地图 var map = new AMap.Map('mapContainer', { zoom: 13, center: [116.397428, 39.90923] }); // 创建地址解析器实例 var geocoder = new AMap.Geocoder(); // 获取经纬度对应的地址信息 geocoder.getAddress([116.397428, 39.90923], function(status, result) { if (status === 'complete' && result.regeocode) { var addressComponent = result.regeocode.addressComponent; var province = addressComponent.province; // 省份 var city = addressComponent.city; // 城市 var district = addressComponent.district; // 区县 var township = addressComponent.township; // 街道 console.log(province, city, district, township); } }); ``` 获取到市、区、街道等详细地址信息后,你可以使用该信息来获取三级市区联动。具体实现方式可能因前端框架和具体需求而有所不同,以下是一种基本的实现思路: 1. 在HTML中创建三个下拉框,分别用于显示省、市、区信息。 2. 使用AJAX发送请求,获取省份信息列表,并填充到对应的下拉框中。 3. 监听省份下拉框的`change`事件,当省份改变时,根据省份信息获取对应的城市信息列表,并填充到城市下拉框中。 4. 监听城市下拉框的`change`事件,当城市改变时,根据城市信息获取对应的区县信息列表,并填充到区县下拉框中。 代码示例如下: ```html <!-- HTML代码 --> <select id="province"></select> <select id="city"></select> <select id="district"></select> ``` ```javascript // 获取省份信息列表并填充到下拉框中 $.ajax({ url: 'http://localhost:8080/provinces', success: function(data) { var options = ''; for (var i = 0; i < data.length; i++) { options += '<option value="' + data[i].id + '">' + data[i].name + '</option>'; } $('#province').html(options); // 初始化城市和区县下拉框 getCityList(data[0].id); getDistrictList(data[0].id, 1); }, error: function() { alert('获取省份信息失败'); } }); // 监听省份下拉框的change事件,获取对应的城市信息列表并填充到下拉框中 $('#province').change(function() { var provinceId = $(this).val(); getCityList(provinceId); getDistrictList(provinceId, 1); }); // 监听城市下拉框的change事件,获取对应的区县信息列表并填充到下拉框中 $('#city').change(function() { var cityId = $(this).val(); getDistrictList(cityId, 2); }); // 获取城市信息列表并填充到下拉框中 function getCityList(provinceId) { $.ajax({ url: 'http://localhost:8080/cities?provinceId=' + provinceId, success: function(data) { var options = ''; for (var i = 0; i < data.length; i++) { options += '<option value="' + data[i].id + '">' + data[i].name + '</option>'; } $('#city').html(options); }, error: function() { alert('获取城市信息失败'); } }); } // 获取区县信息列表并填充到下拉框中 function getDistrictList(parentId, level) { $.ajax({ url: 'http://localhost:8080/districts?parentId=' + parentId, success: function(data) { var options = ''; for (var i = 0; i < data.length; i++) { options += '<option value="' + data[i].id + '">' + data[i].name + '</option>'; } $('#district').html(options); if (level === 1) { // 如果是省份改变触发的获取区县信息列表,要将区县下拉框重置为空 $('#district').val(''); } }, error: function() { alert('获取区县信息失败'); } }); } ``` 在上面的代码中,`getCityList`和`getDistrictList`函数分别用于获取城市和区县信息列表,并将获取到的信息填充到对应的下拉框中。其中,`parentId`参数表示上级地区的ID,`level`参数表示当前下拉框的级别,用于判断是否需要将下拉框重置为空。你需要根据实际情况修改这些函数的实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天吃八顿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值