美文网首页纵横研究院VU...
解决vue调用百度地图API时地址解析api(Geocoder)

解决vue调用百度地图API时地址解析api(Geocoder)

作者: 北风吹_yfy | 来源:发表于2019-10-31 16:37 被阅读0次

基础应用

<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的密钥"></script>

<script type="text/javascript">
    // 百度地图API功能
    var map = new BMap.Map("map");
    var point = new BMap.Point(116.331398,39.897445);
    map.centerAndZoom(point,12);
    // 创建地址解析器实例
    var myGeo = new BMap.Geocoder();
    // 将地址解析结果显示在地图上,并调整地图视野
    myGeo.getPoint("重庆市", function(point){
        if (point) {
            map.centerAndZoom(point, 16);
            map.addOverlay(new BMap.Marker(point));
        }else{
            alert("您选择地址没有解析到结果!");
        }
    }, "北京市");
</script>

一个月前我开发时这样写是没问题的,写入省份名称也可定位到该省的省会城市的位置,但是前几天就出现奇奇怪怪的问题,突然无法定位到了,后来在省份后面精确到城市也可以解决部分定位问题,但是例如重庆市这样的直辖市依然无法定位到,除非再将地址精确,后来让后端添加了每个省份的经纬度,但是针对城市数量多,数据库变动大,于是想到调用百度地图省市的json文件,在本地存一份百度地图部分信息文档,自己再手动解析匹配后端请求接口拿到对应数据进行渲染。

解析json文件(用node脚本)

//parseJson.js
const path = require("path");
const fs = require("fs");

const files = fs.readdirSync(path.resolve(__dirname, "./province"));

const result = [];

files.forEach(file => {
  const content = fs.readFileSync(
    path.resolve(__dirname, "./province/" + file),
    "utf-8"
  );
  const obj = JSON.parse(content);
  const cities = obj.features.map(item => ({
    name: item.properties.name,
    point: item.properties.cp
  }));
  result.push({
    province: file.split(".")[0],
    cities
  });
});
fs.writeFileSync("data.json", JSON.stringify(result), "utf-8");

//解析的data.json部分
[{
    "province": "云南",
    "cities": [{
        "name": "昆明市",
        "point": [102.712251, 25.040609]
    }, {
        "name": "曲靖市",
        "point": [103.797851, 25.501557]
    }, {
        "name": "玉溪市",
        "point": [102.543907, 24.350461]
    }
},{
    "province": "吉林",
    "cities": [{
        "name": "长春市",
        "point": [125.3245, 43.886841]
    }, {
        "name": "吉林市",
        "point": [126.55302, 43.843577]
    }, {
        "name": "四平市",
        "point": [124.370785, 43.170344]
    }
}]

vue中引用json文件

//index.vue
import cityLocalData from "../data.json";

const p = '湖南';
const currentCities = cityLocalData.find(v => v.province.startsWith(p)).cities;
currentCities.forEach(city => {
      if (city.name === item.city) {
           let poi = new BMap.Point(city.point[0], city.point[1]);
            let timer = null;
            let mk = new BMap.Marker(poi, {
                offset: new BMap.Size(0, 15)
            });
            this.myMap.addOverlay(mk);
      }
}

ok,问题完美解决,hai~

相关文章

网友评论

    本文标题:解决vue调用百度地图API时地址解析api(Geocoder)

    本文链接:https://www.haomeiwen.com/subject/ygytbctx.html