node通过arcMap获取高德地图poi数据

最终经过一番周折,基于网上资料进行了整理

  1. 注册高德账号,获取高德key
  2. 下载安装ArcMap/ArcGIS
  3. 将抓取区域等距分割并导出多边形经纬度
  4. 基于切割后的经纬度重新轮高德api

先通过高德行政区域查询,获取城市的坐标点

# 行政区域查询

在示例下的"districts"–>“0”–>“polyline”;得到边界坐标值

image.png

复制出polyline,用任何一个现代化编辑器(vs code,notepad++等)将 ; 替换成换行符,在第一行插入 x,y 保存成 sz.csv

根据 ArcMap 0 (ArcGIS10.2安装(完善版–能解决常见问题)) 下载并安装ArcMap 10.2,并破解,但别汉化(后边点集转线的时候会报错)

arcMap 10.2具体教程

第二步,通过arcmap 10.2获得深圳的对角线坐标

image.png

image.png

第三步,对每一个网格爬取POI

这里使用高德地图的多边形搜索API,具体参数可以查看https://lbs.amap.com/api/webservice/guide/api/search

这里需要介绍一下这一API的限制。高德地图规定每一个KEY每天只能调用5000次,经过测试,每一个账号可以申请10个KEY;在每一次调用“多边形搜索”API时,每一页最多返回25条数据,这意味着每天一个账号最多可获取50万条POI,这是最理想的情况,因为一页不可能总是满的。

同时,“多边形搜索”API最多只能返回一个多边形小于900的数据量;保险起见,当遇到某一个网格的POI数据量大于850的时候,需要再次划分网格进行递归查询。这一部分需要简单的调用requests和json库,构建URL参考请参考高德地图API文档-搜索POI中的“多边形搜索”,不多解释,完整代码如下。

const router = require("koa-router")(),
    util = require("../utils/util"),
    query = require('../controllers/mysqlConfig'),
    fs = require('fs'),
    neatCsv = require('neat-csv'),
    superagent = require('superagent'),
    readline = require('readline')

router.prefix("/poi")

const aMapBase = {
    keys: ['x', 'a', 'b', 'c', 'd'],
    nodeIndex: 0, // 当前使用的key下标
    count: 0, // 计数,单独key的api限制使用5000次
    poiType: '010000|020000|030000|040000|050000|060000|070000|080000|090000|100000|110000|120000|130000|140000|150000|160000|170000|180000|190000|200000', // 搜索的poi类,具体参考:https://lbs.amap.com/api/webservice/download
    csvData: new Array() // csv数据
}

router.get('/toProcess', async ctx => {
    const r1 = await readline.createInterface({
        input: await fs.createReadStream("./common/lph.csv")
    })
    let i = 1
    await r1.on('line', async line => { //事件监听
        searchFn(line, 1)
        i += 1
    })
})

// 封装的递归函数
const searchFn = (polygon, page) => {
    const url = "https://restapi.amap.com/v3/place/polygon?key=" + aMapBase.keys[aMapBase.nodeIndex] + '&polygon=' + polygon +'&types=' + aMapBase.poiType + '&extensions=all&output=json&offset=25&page=' + page
    let arr = new Array()
    superagent.get(url).timeout({
        response: 500
    })
    .end((err, res) => {
        if (err) {
            console.log(err)
        } else {
            // 结果集
            console.log(res)
        }
})
console.log(arr)
}

module.exports = router
  • 这是半成品,arcMap 10.2导出渔网坐标应该是有问题的,有大佬有空麻烦教教我

最后

公众号:小何成长,佛系更文,都是自己曾经踩过的坑或者是学到的东西

有兴趣的小伙伴欢迎关注我哦,我是:何小玍。大家一起进步鸭

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值