1. Amap の公式チュートリアルに従って予備設定を実行します。 次に、まずレンダリングを見てみましょう。 1. マップを初期化するマップ コンテナーを作成した後、初期化中にいくつかのデフォルト パラメーターを構成する必要があります。ここでは、よく使用されるパラメーターをいくつか示します。他の効果を追加するには、API を参照できます。 DOM: <div id='map_container'> //マップコンテナ</div> //マップクラスを定義する class GeoMap { コンストラクタ() { this.el = 'マップコンテナ' this.defaultConfig = { //デフォルト設定 zoom: 16, //デフォルトのズームレベル touchZoomCenter: 1, //ズームレベルが1の場合、マップの中心がズームに使用されます resizeEnable: true, //マップコンテナのサイズ変更を監視します doubleClickZoom: true, //ダブルクリックするとマップが拡大します} this.map = null // マップインスタンス this.mapMove = false // マップは移動していますか this.centerPixel = { y: '-999', x: '-999' } // ポイントのデフォルトの位置 } // マップを初期化する initFn() { この.createMap() // ... } // インスタンスを作成する createMap() { this.map = 新しい AMap.Map(this.el、this.defaultConfig) // お気に入りのスタイル(背景色)をマップに追加します this.map.setMapStyle('amap://styles/28d5c5df182464d14316bfa41383096c') } // ... } デフォルトの新しい GeoMap() をエクスポートします 2. マップポイントまず、地図上に中心点を描きます。達成される効果は次のようになります。
マップ ボックスは親要素として使用され、最初のポイントに到達するように絶対配置されます。 Dom: <div id='map_container'> //マップ コンテナー<div id='center_icon' style={{left: `${instance.centerPixel.x}px`, top: `${instance.centerPixel.y}px` }}> <img src='扎点圖片' /> // 記事の最後に扎点アニメーションの紹介があります</div> </div> css: #map_container { フレックス: 1; 位置: 相対的; #センターアイコン { 位置: 絶対; zインデックス: 101; >画像{ 幅: 52px; 高さ: 64px; // --------以下のコードについては以下で詳しく説明します--------- 位置: 相対的; 上: -64px; 左: -26px; } } } 次に、ポイントの左と上の値を設定する必要があります。ポイントのピクセル値を動的に設定するにはどうすればよいでしょうか? ここでは、Gaode API、getCenter() を使用してマップの中心の経度と緯度の座標を取得し、lngLatToContainer() を使用してマップの経度と緯度の座標をマップ コンテナーのピクセル座標に変換します。 setCenterIcon() { lnglat = this.map.getCenter() とします。 ピクセルを this.map.lngLatToContainer(lnglat) とします。 this.centerPixel = ピクセル } 点線の画像は、自身の高さ(上:自身の高さ、左:自身の幅/2)で相対的に配置する必要があります。その理由は、配置ポイントがボックスの左上隅から中央(点線のボックス)に配置されているため、点の位置が正確になるように、(点線のボックス)を(実線のボックス)の位置に移動する必要があるためです。次の図をご覧ください。 3. 位置決めを有効にする実装する必要があるもの:
これらは両方とも比較的単純なAPIを通じて実装されており、位置決めが失敗した後に中国語のプロンプトが返されます。 位置情報を取得する() { const mapError = 新しいマップ([ ['ipLocation の取得に失敗しました。', 'IP の正確な位置特定に失敗しました'], ['ブラウザは HTML5 ジオロケーションをサポートしていません。', 'ブラウザはネイティブのポジショニング インターフェースをサポートしていません'], ['位置情報の許可が拒否されました。'、'ブラウザは安全でないドメインでの位置情報のリクエストを禁止しています']、 ['位置情報の取得がタイムアウトしました。'、'ブラウザの位置情報のタイムアウト']、 ['位置情報の取得に失敗しました。'、'位置特定に失敗しました'] ]) this.map.plugin('AMap.Geolocation', () => { const geolocation = 新しい AMap.Geolocation({ enableHighAccuracy: true, //高精度測位を使用するかどうか timeout: 30000, //n秒後に測位を停止する showButton: false, //測位ボタンを表示する showMarker: true, //測位に成功した後、測位した位置にポイントマークを表示する showCircle: false, //測位に成功した後、円を使用して測位精度の範囲を示す panToLocation: true, //測位に成功した後、測位した位置を地図の中心点として使用する --- zoomToAccuracy: true, // 測位位置と精度範囲が見えるようにマップの視野を調整します}) this.map.setZoom(16) // ズーム比の変更後に再配置する際の初期ズーム比を設定します this.map.addControl(geolocation) // コントロールを追加します geolocation.getCurrentPosition() // ページに入るときに自動的に配置します AMap.event.addListener(geolocation, 'complete', (result) => { // 返される緯度、経度、詳細な住所には大きな偏差があるため、ここではデータを取得しないでください --- 正確な住所を取得する方法については以下で説明します}) AMap.event.addListener(geolocation, 'error', (err) => { // 位置決め失敗のエラーメッセージ let msg = mapError.get(err.message) || err.message コンソールログ(メッセージ); }) }) } 4. マップの変更を監視する移動、移動終了、ズーム、ドラッグなど、API 呼び出しを通じてマップの変更を監視します。 マップ移動() { // * マップの移動 this.map.on('mapmove', () => { this.mapMove = false }) // * マップの移動が終了します this.map.on('moveend', () => { this.mapMove = true this.getCenterAddress() // アドレスを取得します --- 詳細は以下に記載されています}) } 5. 詳細な住所を取得する地図が移動した後、API を通じて詳細な住所が取得されます。まず、次の 2 つの API について説明します。
🤔2 番目の方法の方が 1 番目の方法よりも正確であるのは当然ですが、多くのテストを行った結果、1 番目の方法の方が正確であることがわかりました。2 つの方法は互換性を持たせることができます。ここでは、1 番目の方法のみを例として取り上げます。 取得センターアドレス() { lnglat = this.map.getCenter() とします。 AMap.service('AMap.PlaceSearch', () => { placeSearch = new AMap.PlaceSearch({ ページサイズ: 10, ページインデックス: 1, 子供: 1, 拡張子: 'すべて'、 タイプ:「アクセス施設|地名住所情報|政府機関および社会団体|建物|工業団地|景勝地|空港出発/到着|鉄道駅|港湾ターミナル|長距離バス停|地下鉄駅|ライトレール駅|バス停」, }) center = [lnglat.lng, lnglat.lat] とします。 placeSearch.searchNearBy('', center, 50, (sta, 結果) => { if (sta === 'complete' && result.info === 'OK') { // result.poiList.pois 配列の最初の項目は、取得された正確なアドレスです}) }) } 6. ドットアニメーション 😄マップが移動した後のポイントに上下ジャンプアニメーションを追加し、移動時にアニメーションをキャンセルします Dom: <img src='点点図形' className={Instance.mapMove ? 'pinAnima' : ''}/> css: .pinAnima{ アニメーション: バウンス 0.75 秒; } @keyframes バウンス { 0% { 変換: translateY(0) } 50% { 変換: translateY(-20px); } 100% { 変換: translateY(0) } } 7. 終了考え方はそれほど複雑ではありません。地図を箱の入れ物と考え、地図の中心点を箱の中心点と考えます。[地図の中心点]にくっついていれば、地図は動きません。地図を動かすときは、[地図の中心点]の経度と緯度を取得します。特定の場所を設定するときは、[地図の中心点]に経度と緯度を設定します。 他にも、おすすめの場所の設定、ルートの描画、経路計画、車の運転、レーダーアニメーションなどの機能もあります。興味のある方は、一緒に勉強してみてください。携帯電話の測位には、測位失敗や測位タイムアウトなどの問題がある可能性があり、これらも一緒に研究することができます。 上記は、React + Gaode Mapを使用して経度と緯度、位置アドレスをリアルタイムで取得する方法の詳細です。React位置アドレスの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: Centos7 ベースの Nginx Web サイト サーバーの構築の詳細説明 (仮想 Web ホストの構成を含む)
>>: CentOS8.0 で FTP サーバーをインストールして設定する方法
1. <a>タグを使用して完了します <a href="/user/te...
序文Linux では「すべてがファイル」であることは誰もが知っているので、ファイルのオープン状態を確...
汎用ロード/書き込みメソッドオプションを手動で指定するSpark SQL の DataFrame イ...
最近、Grover の Web サイトで楽しいホバー アニメーションを見つけ、自分自身のインスピレー...
エンジニアリング構造プロジェクトは2つの部分に分かれています。bilibili-apiはAPIインタ...
この記事では、Jingdong虫眼鏡を模倣したJavaScriptの具体的なコードを参考までに共有し...
目次URL モジュール1. 解析メソッド2. フォーマット方法3. 解決方法イベントモジュール(イベ...
1. 空のディレクトリを作成する $ cd /home/xm6f/dev $ mkdir myapp...
この記事では、例を使用して、MySQL 条件クエリ and or の使用方法と優先順位を説明します。...
ビジネスシナリオ: 訪問者の訪問状況を記録する必要があるが、繰り返し記録することはできない挿入する前...
序文以前、Docker の 2375 Remote API を有効にしていました。会社のセキュリティ...
序文Docker イメージは Dockerfile といくつかの必要な依存関係で構成され、Docke...
「読み取り専用」と「無効」はどちらも、ユーザーがフォーム フィールドの内容を変更できないようにします...
一部の MySQL テーブルには重複レコードが含まれている場合があります。重複データが存在することを...
Vue で SVG アイコンを導入する方法Vue で svg アイコンを導入する方法 1インストール...