twtjudy1128
@twtjudy1128 (Juri Tawata)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【LINEbot】現在地情報を送ったら、スプレッドシートのデータから最寄りのスポットを抽出する方法【Javascript/node.js】

作りたいもの

スプレッドシートにスポットのデータを下図のようにまとめました。
Image from Gyazo

LINEbotで現在地情報を送ったら、経度緯度から近くのスポットを探して、
該当するスポット名や住所、詳細、カテゴリーを返すようにしたいです。

ただ、いまいちアプローチ方法が見えず、、、
なにか手がかりになるようなヒントをいただきたく投稿させていただきました。

使用言語

Javascriptしか使えません。
今回はNode.jsでコードを書いています。

今、LINEbotに繋ぐところまではできましたが、〆切が水曜日までという焦りからネクストアクションが見つけられずにいます・・・。

参考になる記事などでもいいので、お知恵いただけると幸いです。

宜しくお願いします。。。

0

2Answer

何が分からないかも分からない状態かと思いますので、手当たり次第にヒントになりそうなことを書きます。

  • LINE から送信された位置情報と決め打ちの目的地の距離を計算してレスポンスを返す bot の実装例 https://qiita.com/t0_inoue/items/41cc12403bf294fb0d7f
    • ここで使われている距離の計算式はかなりの概算のようです。地球は歪んだ球体ですので、表面上の2点間の距離を正確に計算するには複雑な公式が必要です。このへんは「緯度 経度 距離」などでググってください。

Google Sheets と Google Apps Script でスプレッドシートを操作して最寄り地点を抜き出す場合:

function getNearestLocation(lon, lat) {
    const sheet = SpreadsheetApp.openById(シートID).getSheetByName(シート名);
    const rows = sheet.getDataRange().getValues();
    const row = rows.min(row => 2点間の距離を計算する関数(lon, lat, row[0], row[1]);
    return { lon: row[0], lat: row[1] };
}

Node.js で Excel スプレッドシートを操作する場合に使えそうなモジュール: https://www.npmjs.com/package/xlsx

もしスプレッドシートを操作する方法が分からなくて、必ずしもスプレッドシートを使う必要がないなら、データを CSV や JSON ファイルに保存するとか、 JavaScript のオブジェクトとしてソースコードに書き込んでしまうのも手です。

const DATA = [
  { lon: 経度, lat: 経度, spot: スポット名, address: 住所, memo: 詳細, category: カテゴリー },
  ...
];
1Like

Comments

  1. @twtjudy1128

    Questioner

    @uasi さん 回答ありがとうございます。おっしゃる通りで、何がわからないかわからない状態でした…

    回答見させていただいて、スプレッドシート使う必要性がないので、無理に使わずにソースコードに書き込む手法でやることにしました!

    ・ソースコードにデータを入れる
    ・lonとlatから近いスポットを探す方法を考える
    ・↑の方法を決めたら、そのスポットのデータを取得するコードを書く

    の順番で取り組んでみようと思います。

    ありがとうございます!

Comments

  1. @twtjudy1128

    Questioner

    回答ありがとうございます!
    今は使えそうにないので精進します・・・!(´;ω;`)

    新しい手法を知れて嬉しいです!
    また何かあればぜひ教えてください!

Your answer might help someone💌