🌎

住所リストから緯度軽度を一括で出力する

2022/11/18に公開

準備

node-geocoder を使います。

nchaulet/node-geocoder: nodejs geocoding library

認証キー(GOOGLE_API_KEY) の取得

API キーを使用して認証する  |  Google Cloud

コード

getGeoCodes(addressList: string[]) 関数

const NodeGeocoder = require('node-geocoder')

const options = {
  provider: 'google',
  apiKey: process.env.GOOGLE_API_KEY,
  formatter: null,
}

const geocoder = NodeGeocoder(options)
const getGeoCode = (address) => geocoder.geocode(address)

const sleep = (msec) => new Promise((resolve) => setTimeout(resolve, msec))

async function getGeoCodes(addressList) {
  const geoCodes = new Map()

  for (const address of addressList) {
    await sleep(2000) // 制限回避
    const res = await getGeoCode(address)
    geoCodes.set(address, res[0])
  }
  return geoCodes
}

const addressList = `
東京都千代田区丸の内1丁目
東京都千代田区鍛冶町2丁目
東京都千代田区外神田1丁目
存在しない地名
`
  .trim()
  .split('\n')
  .filter(Boolean)

async function main() {
  const res = await getGeoCodes(addressList)

  for (const [address, entry] of res.entries()) {
    if (!entry) {
      console.log(address + '\t\t')
    } else {
      console.log(address + '\t' + entry.latitude + '\t' + entry.longitude)
    }
  }
}
main()

出力


東京都千代田区丸の内1丁目	35.6818718	139.7658469
東京都千代田区鍛冶町2丁目	35.6920527	139.7719172
東京都千代田区外神田1丁目	35.6986829	139.7712782
存在しない地名		
GitHubで編集を提案

Discussion