Closed16

【ハッカソン】2024年 第1回 Qiitaハッカソン参加Memo🌟

まさぴょんまさぴょん

JavaScript で 現在地をGPSで取得する方法は?

JavaScriptで現在地を取得するには、getCurrentPosition()メソッドを使用します。

このメソッドは、ユーザーの現在位置を特定するための非同期通信を開始して、
位置取得デバイスから最新の情報を取得します。現在位置が特定されるとコールバック関数が実行されます。

また、getCurrentPosition()を呼び出して取得する方法と自動的に取得(位置情報を監視)し続ける方法があります。

Geolocation APIとは、JavaScriptで位置情報を取得するAPIのことです。

現在W3Cで仕様を策定中ではありますが、Firefox 3.5やGoogle Chrome 5、Safari 5など、いくつかのモダンなブラウザではすでに利用できます。

// 自分の位置情報を取得する
// export default
function myGeoLocation() {
  return new Promise((resolve, reject) => {
    navigator.geolocation.getCurrentPosition(
      (position) => {
        resolve(position);
      },
      (error) => {
        reject(error);
      }
    );
  });
}

const position = await myGeoLocation();
console.log(position);

https://developer.mozilla.org/ja/docs/Web/API/Geolocation_API/Using_the_Geolocation_API

https://developer.mozilla.org/ja/docs/Web/API/Geolocation/getCurrentPosition

https://into-the-program.com/javascript-get-location/

まさぴょんまさぴょん

現在の緯度経度などの位置情報から、近くの遊び場を取得するには?

  • Webスクレイピング
  • Google Map API
  • GPT

などかな?

JavaScriptのプログラムで、現在の緯度経度などの位置情報から、近くの遊び場を取得するには?
🗒️ Answer
JavaScriptで現在の位置情報を取得し、その情報を利用して近くの遊び場を探すには、次のステップに従います:

Geolocation APIを使用して位置情報を取得する:
navigator.geolocation.getCurrentPosition() メソッドを使用してユーザーの現在位置(緯度と経度)を取得しま​​】。

外部APIを使用して近くの遊び場を検索する:
取得した緯度と経度をパラメータとして、Google Places APIなどの外部地点情報サービスAPIを呼び出し、指定した範囲内の遊び場の情報を取得します。

結果を処理して表示する:
外部APIから得られた遊び場の情報(名前、住所、評価など)をユーザーに表示します。必要に応じて、地図上にピンを打つなどして視覚的に情報を提供することも可能です。

まさぴょんまさぴょん

OSMデータを活用して、無料で現在位置からの周辺情報を取得する

https://qiita.com/krohigewagma/items/e7cac8922c4ad058b50e

OSMデータとは?

OSMデータ(OpenStreetMapデータ)とは、地理空間情報の巨大なデータベースです。OpenStreetMapは、世界規模の共同プロジェクトで、誰でも自由に利用できる二次元の地図を作成しています。

OpenStreetMapは、GPS機能を持った携帯端末、空中写真、その他の無料機械からのデータをもとに作られています。
また、編集ツール上で道1本から手入力での追加も可能です。

OpenStreetMapはオープンデータとして活用でき、作成された地図は誰でも自由にダウンロードできます。
また、アカウントを作成することで誰でも簡単に地図を編集することもできます。

OpenStreetMapは、世界中の有志作業者(マッパー)が建物データや道路データを入力・編集しています。現在、マッパーは世界に190万人(日本には約1万人)存在しています。

OpenStreetMapの著作権は、OpenStreetMapと協力者を著作権表示すれば、いかなる目的でも無料で利用することができます。データを変更したり二次データを作成したりした場合も、同じライセンス条件下でのみ結果を配布できます。

まさぴょんまさぴょん

Pythonで、住所から座標情報・位置情報を取得するには?

  • Pythonで住所から座標情報や位置情報を取得する方法はいくつかあります。

以下は代表的な方法です:

  1. 国土地理院のAPIを使用する:

    • 国土地理院のAPIを利用して、住所から緯度経度を取得する方法があります。
    • このAPIは、住所を入力として、対応する緯度と経度の情報を返します。
  2. geopyライブラリを使用する:

    • geopyはPythonの地理的な計算を行うためのライブラリであり、住所から緯度経度を取得する機能を提供しています。
    • APIキーやアカウントは不要で、簡単に座標情報を取得できます。
  3. 他のサービスのAPIを使用する:

    • 例えば、Google Maps APIなど、他のサービスのジオコーディングAPIを使用して、住所から緯度経度を取得することも可能です。
    • これらのサービスは通常、APIキーが必要ですが、正確かつ詳細な情報を提供します。

これらの方法を使用する際には、利用規約やAPIの使用制限を確認し、適切に対応することが重要です。

参考になる情報

https://zenn.dev/yamadamadamada/articles/3fb198003c5428

https://qiita.com/paulxll/items/7bc4a5b0529a8d784673

https://chantastu.hatenablog.com/entry/2023/04/22/230203

https://self-development.info/【apiキー・アカウント不要】pythonで住所から緯度経度/

https://qiita.com/daifuku10/items/0cd4a409417d3a7b7297

まさぴょんまさぴょん

位置情報(GPS)の取得の許可 ボタンを Reactで作成するには?

import React from 'react';

const LocationButton = () => {
  const getLocation = () => {
    if (navigator.geolocation) {
      navigator.geolocation.getCurrentPosition(showPosition, showError);
    } else { 
      alert("Geolocation is not supported by this browser.");
    }
  };

  const showPosition = (position) => {
    console.log("Latitude: " + position.coords.latitude + " Longitude: " + position.coords.longitude);
  };

  const showError = (error) => {
    switch(error.code) {
      case error.PERMISSION_DENIED:
        alert("User denied the request for Geolocation.");
        break;
      case error.POSITION_UNAVAILABLE:
        alert("Location information is unavailable.");
        break;
      case error.TIMEOUT:
        alert("The request to get user location timed out.");
        break;
      case error.UNKNOWN_ERROR:
        alert("An unknown error occurred.");
        break;
    }
  };

  return <button onClick={getLocation}>Get Location</button>;
};

export default LocationButton;
まさぴょんまさぴょん

ReactでGoogleMapAPIの使い方

yarn add @react-google-maps/api
yarn add @googlemaps/js-api-loader

React Component

import React, { useEffect, useState } from 'react';
import { Loader } from '@googlemaps/js-api-loader';

const GeolocationComponent = () => {
  const [address, setAddress] = useState('');

  useEffect(() => {
    if (navigator.geolocation) {
      navigator.geolocation.getCurrentPosition(success, handleError, options);
    } else {
      alert('あなたの端末では、現在位置を取得できません。');
    }

    function success(position) {
      const { latitude, longitude } = position.coords;
      const googleMapsLoader = new Loader({
        apiKey: 'XXXXX', // Set your API key here
        version: 'weekly',
      });

      googleMapsLoader.load().then(() => {
        const geocoder = new google.maps.Geocoder();
        const latlng = new google.maps.LatLng(latitude, longitude);
        geocoder.geocode({ latLng: latlng }, (results, status) => {
          if (status === google.maps.GeocoderStatus.OK) {
            setAddress(results[0].formatted_address);
          } else {
            alert('エラー' + status);
          }
        });
      });
    }

    function handleError(error) {
      const errorMessage = {
        0: '原因不明のエラーが発生しました。',
        1: '位置情報が許可されませんでした。',
        2: '位置情報が取得できませんでした。',
        3: 'タイムアウトしました。',
      };
      alert(errorMessage[error.code]);
    }

    const options = {
      enableHighAccuracy: false,
      timeout: 10000,
      maximumAge: 0,
    };
  }, []);

  return <div id="address">{address}</div>;
};

export default GeolocationComponent;

参考・引用

https://www.npmjs.com/package/@react-google-maps/api

https://www.npmjs.com/package/react-google-maps-loader

https://qiita.com/shunp110/items/3ccfc168924cde76de5a

https://classic.yarnpkg.com/en/package/@react-google-maps/api

https://qiita.com/fukurou0922/items/54ecc4063a1954f9d78e

https://note.com/suzukyu1201/n/nf1dd7731a5be

まさぴょんまさぴょん

React で Reafletを使用する

yarn add leaflet react-leaflet

# 型定義ファイル
yarn add -D @types/leaflet

https://zenn.dev/micronn/articles/776c702089f16e

Next.js で Leaflet を使用する

  • Frontで動的に生成する。
  • つまり、SSR対応できていないので、注意して使う必要がある。

https://dev.classmethod.jp/articles/tried-react-leaflet-with-nextjs/

https://stackoverflow.com/questions/68178127/next-js-with-react-leaflet-window-is-not-defined-when-refreshing-page

このスクラップは2024/02/12にクローズされました