2025年全国火车站经纬度信息数据

本文介绍了如何通过前端技术结合高德地图API,分批处理数据来获取全国火车站的经纬度和所属城市信息。作者分享了数据获取的步骤,包括数据预处理、批量与单个地理编码接口的使用,以及异常数据的处理方法。最后,提到了数据整合和获取完整数据集的途径。

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

说明

日常随记,若有问题之处欢迎大家指正,共同进步,BIUBIUBIU~~~
目标:获取全国火车站经纬度和火车站所属城市信息
有需要数据文件的,**注意看评论区获取。创作不易,请大家点赞收藏,给我定期更新的动力Biu~Biu~Biu~**
最新进展1:我已在2024年4月更新一次数据,本次相较于2023年11月,新增了63个站点数据。
最新进展2:我已在2025年2月17更新一次数据,本次相较于2024年4月,新增了94个站点数据。

步骤说明:

第一步:获取全国火车站名称数据

网上先找到全国火车站站点数据(百度资源挺多),我这边找到的站点数据:

第二步:火车站数据预处理

对火车站数据进行预处理,转换为便于后面获取经纬度的格式。这里是直接纯前端实现,加上高德地图对于个人开发者的免费配额限制(地理编码日调用量上限5000,并发30),另外了解到高德地理编码JS API支持批量和单个两种转换模式,批量模式是调用一次接口只能转10个地点,所以将火车站数据转换为三位数组,然后遍历三位数组,逐批次调批量转换接口获取经纬度后在浏览器控制台输出(没生成文件),开发者只需每次复制下控制台的输出内容再合并起来即可。大概结果如下:

//第3层,长度为11
[
	//第2层,长度为30,因为高德接口并发为30
	[
		//第1层,长度为10,因为高德批量接口,一次只能转10个
		["北京北","北京东","北京","北京南","北京大兴","北京西","北京朝阳","重庆北","重庆","重庆南"],
		["重庆西","上海","上海南","上海虹桥","上海西","天津北","天津","天津南","天津西","滨江"],
		["百浪","班猫箐","北营","长春","长春南","长春西","成都东","成都南","成都","成都西"],
		//...
	],
	//...
]

第三步:获取高德key及页面引入地图

1、先去高德开放平台注册申请个人key和安全密钥;注册好账号后,依次点击“右上角控制台-左边应用管理-我的应用-创建新应用-创建好后,选择添加Key-服务平台选择Web端(JS API)-提交”,即可获得key和安全密钥。

2、前端index.html页面内引入高德地图JS

    <!--高德JS-->
    <script type="text/javascript">
        window._AMapSecurityConfig = {
            securityJsCode:'填写申请的安全密钥',
        }
    </script>
    <script type="text/javascript" src="https://webapi.amap.com/maps?v=2.0&key=填写申请的key&plugin=AMap.Geocoder"></script>

第四步:获取火车站经纬度

1、遍历3维度数组,调用”批量地理编码“接口

//高德-批量-3维度数组,需依次调11次接口
function queryStationThree() {
  try{
    AMap.plugin('AMap.Geocoder', function() {
      const geocoder = new AMap.Geocoder({});
      let stationLL= [];
      let nowCur = 1;//依次将值设为1,2,3,4,5,6,7,8,9,10,11后,调11次此接口
      //THREE_DIM 就是三维数组
      let datas = THREE_DIM.slice(nowCur - 1,nowCur);
      console.log("第",nowCur, "批次地理位置");
      datas.forEach((twos, indexP) => {
        twos.forEach((names, indexT) => {
          const addresses = names.map(name => (`${name}`));//批量每次最多查询10个
          geocoder.getLocation(addresses, function(status, result) {
            if (status === 'complete' && result.info === 'OK') {
              // result中对应详细地理坐标信息,result.geocodes为批量地址地理编码数据
              result.geocodes.forEach((item, index) => {
                stationLL.push({
                  name: names[index],
                  lat:item?.location?.lat || '',
                  lng:item?.location?.lng || '',
                  gCode: item?.adcode || '',
                  gCity: item?.addressComponent?.city || '',
                  gCityCode:item?.addressComponent?.citycode || '',
                })
              });
            }
          })
        }) 
      })
     //延迟5s,待这批300个站点经纬度获取成功后,复制控制台输出的结果即可
      setTimeout(()=>{
        console.log(JSON.stringify(stationLL));
        console.log(stationLL.length);//前10次的长度都是300,第11次的长度为263
      }, 5000);
    })
  }catch(e) {
    console.error(e);
  }
}

2、406个异常数据处理
实际在通过“批量转换”全量数据后,有些站点没有转换成功,尝试过再调批量接口转换也失败,所以改成对这些数据通过“单个转换”模式,结果证明是可以获取到的。所以这里先是对全量数据筛选,找出一场数据集合,然后根据并发30限制,将这些数据按照30个为一组,组合成二位数组

[//第2层,长度为14
	[//第1层:长度为30
		{"name":"钢城","lat":"","lng":"","gCode":"","gCity":"","gCityCode":""},
		{"name":"广南卫","lat":"","lng":"","gCode":"","gCity":"","gCityCode":""},
		{"name":"金马村","lat":"","lng":"","gCode":"","gCity":"","gCityCode":""},
		//...
	],
	//...
]

然后遍历二维度数组,调用”单个地理编码“接口

//高德-单个-2维度数组14次
function queryStationSingle() {
  try{
    AMap.plugin('AMap.Geocoder', function() {
      const geocoder = new AMap.Geocoder({});
      let stationLL= [];
      let nowCur = 1;//依次将值设为1,2,3,4,5,6,7,8,9,10,11,12,13,14后,调14次此接口
      //TWO_DIM_SINGLE 就是二维数组
      let datas = TWO_DIM_SINGLE.slice(nowCur - 1,nowCur);
      console.log("第",nowCur, "批次地理位置");
      datas[0].forEach((itemS, indexP) => {
        geocoder.getLocation(`${itemS.name}`, function(status, result) {
          if (status === 'complete' && result.info === 'OK') {
            let item = result.geocodes[0];
            stationLL.push({
              name: itemS.name,
              lat:item?.location?.lat || '',
              lng:item?.location?.lng || '',
              gCode: item?.adcode || '',
              gCity: item?.addressComponent?.city || '',
              gCityCode:item?.addressComponent?.citycode || '',
            })
          }
        })
      })
      //延迟5s,待这批30个站点经纬度获取成功后,复制控制台输出的结果即可
      setTimeout(()=>{
        console.log(JSON.stringify(stationLL));
        console.log(stationLL.length);//前13次的长度都是30,第14次的长度为16
      }, 5000);
    })
  }catch(e) {
    console.error(e);
  }
}

3、将两轮处理的数据进行整合,即可得到3263个站点经纬度数据集合。
最总拿到的数据为:

[//3262个
	{"name":"北京北","lat":39.945258,"lng":116.353015,"gCode":"110102","gCity":"北京市","gCityCode":"010"},
	{"name":"北京东","lat":39.9028,"lng":116.484487,"gCode":"110105","gCity":"北京市","gCityCode":"010"},
	//...
]

总结

以上就是H5+高德地图获取到全国火车站经纬度信息的过程,处理形式上肯定非最优,仅是个人的经历记录。对于最终生成的数据文件,我已上传至网盘,如有需要的看评论区或者直接私聊我,我会尽快发送。

评论 80
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值