Amap を使用した React 実装例 (react-amap)

Amap を使用した React 実装例 (react-amap)

React の PC 版は Amap を使用するようにリファクタリングされました。情報を検索したところ、React 用にカプセル化されたマップ プラグイン react-amap を見つけました。公式サイト: https://elemefe.github.io/react-amap/components/map。ご興味があれば、API をチェックしてみてください。

react-amap のインストール

1. npm を使用してインストールします。現在のバージョンは 1.2.8 です。

cnpm と react-amap

2. SDNを直接使用して導入する

<script src="https://unpkg.com/[email protected]/dist/react-amap.min.js"></script>

React-amap の使用

React をインポートします。{Component} を 'react' からインポートします。
'react-amap' から {Map,Marker} をインポートします。
const mapKey = '1234567809843asadasd' //Amapの公式サイトで申請する必要があります class Address extends Component {
	コンストラクタ(プロパティ){
        スーパー(小道具)
        この状態 = {  
        }
    }
	与える(){
		戻る (
			<div スタイル = {{幅: '100%', 高さ: '400px'}}>
				<マップ amapkey={mapKey} 
				     ズーム={15}></マップ>
			</div>
		)
	}
}

デフォルトアドレスをエクスポート

この場合、単純なマップが初期化されます。

ここに画像の説明を挿入

実際の開発プロセスでは、より複雑な使用シナリオが発生します。たとえば、ポイントをマークしたり、地図を拡大/縮小したり、現在の場所を特定したり、場所を検索したりする必要があります。要件はおおよそ次の図のようになります。

ここに画像の説明を挿入

この場合、プラグインとコンポーネントの概念を導入する必要があります。
ツールバー、スケールプラグイン

<Map plugins={["ToolBar", 'Scale']}></Map>

マーカーマップマーカー

<地図>
	<マーカー位置={['lng','lat']}></マーカー>
</マップ>

情報ウィンドウフォームコンポーネント

<地図>
	<情報ウィンドウ
            位置 = {この状態の位置}
            可視 = {この状態が可視}
            isCustom={false}
            コンテンツ={html}
            サイズ={this.state.size}
            オフセット = {this.state.offset}
            イベント = {this.windowEvents}
          />
</マップ>

created イベントは、より高度な使用要件を実現するために使用されます。これは、Amap ネイティブ インスタンスが正常に作成された後に呼び出されます。パラメータは created インスタンスです。インスタンスを取得したら、Amap ネイティブ メソッドに従ってインスタンスを操作できます。

定数イベント = {
    作成されました: (インスタンス) => { console.log(instance.getZoom())},
    クリック: () => { console.log('マップをクリックしました') }
}
<マップイベント={イベント} />

より複雑な住所検索、住所マーキング、逆地理解析コードを実装します。

React をインポートし、{ Component } を 'react' からインポートします。
'antd' から { Modal 、 Input } をインポートします。
'./index.scss' からスタイルをインポートします
'classnames' からクラス名をインポートします
'react-amap' から { Map 、Marker、InfoWindow} をインポートします。
'SRC/statics/images/signin/marker2.png' からマーカーをインポートします

定数マップキー = '42c177c66c03437400aa9560dad5451e'

クラス Address は Component を拡張します {
    コンストラクタ(プロパティ){
        スーパー(小道具)
        この状態 = {
            署名アドレスリスト:{
                名前:''、
                住所:''、
                経度: 0,
                緯度: 0
            },
            ジオコーダ:''、
            検索コンテンツ:''、
            isChose:false
        }
    }

    //データ変更一般メソッド(単層)

    changeData = (値、キー) => {
        {signAddrList} = this.stateとする
        signAddrList[キー] = 値
        this.setState({
            署名アドレスリスト:署名アドレスリスト
        })
    }

    場所検索 = (e) => {
        this.setState({searchContent:e})
    }

    検索場所 = (e) => {
        コンソールログ(1234,e)
    }





    コンポーネントマウント() {
    
    }

    与える() {
        {changeModal、saveAddressDetail} = this.propsとします
        {signAddrList} = this.stateとする
        定数selectAddress = {
            作成されました:(e) => {
                自動で
                ジオコーダを使う
                window.AMap.plugin('AMap.Autocomplete',() => {
                    auto = 新しいウィンドウ.AMap.Autocomplete({input:'tipinput'});
                })

                window.AMap.plugin(["AMap.Geocoder"],function(){
                    ジオコーダ = 新しい AMap.Geocoder({
                        radius:1000, // 既知の座標を中心点、半径を半径として使用して、範囲内の興味のあるポイントと道路情報を返します extensions: "all" // 住所の説明と近くの興味のあるポイントと道路情報を返します。デフォルトは "base" です
                    });
                });

                window.AMap.plugin('AMap.PlaceSearch',() => {
                    place = new window.AMap.PlaceSearch({}) とします。
                    _this = this とします
                    window.AMap.event.addListener(auto,"select",(e) => {
                        place.search(e.poi.name)
                        geocoder.getAddress(e.poi.location,function(status,result) {
                            if (ステータス === '完了'&&result.regeocode) {
                                address = result.regeocode.formattedAddress とします。
                                データを result.regeocode.addressComponent とします。
                                名前 = data.township + data.street + data.streetNumber とします。
                                _this.changeData(アドレス、'addr')
                                _this.changeData(名前、'名前')
                                _this.changeData(e.poi.location.lng,'経度')
                                _this.changeData(e.poi.location.lat, '緯度')
                                _this.setState({isChose:true})
                            }
                        })
                    })
                })
            },
            クリック:(e) => {
                const _this = これ
                var ジオコーダ
                var 情報ウィンドウ
                var lnglatXY = new AMap.LngLat(e.lnglat.lng,e.lnglat.lat);
                let content = '<div>配置....</div>'

                window.AMap.plugin(["AMap.Geocoder"],function(){
                    ジオコーダ = 新しい AMap.Geocoder({
                        radius:1000, // 既知の座標を中心点、半径を半径として使用して、範囲内の興味のあるポイントと道路情報を返します extensions: "all" // 住所の説明と近くの興味のあるポイントと道路情報を返します。デフォルトは "base" です
                    });
                    geocoder.getAddress(e.lnglat,function (status,result) {
                        if (ステータス === '完了'&&result.regeocode) {
                            address = result.regeocode.formattedAddress とします。
                            データを result.regeocode.addressComponent とします。
                            名前 = data.township + data.street + data.streetNumber とします。
                          
                            _this.changeData(アドレス、'addr')
                            _this.changeData(名前、'名前')
                            _this.changeData(e.lnglat.lng,'経度')
                            _this.changeData(e.lnglat.lat,'緯度')
                            _this.setState({isChose:true})
                        }
                    })
                });
                
            }
        }
        戻る (
            <div>
                <モーダル表示={true}
                       title="オフィス所在地"
                       中央揃え={true}
                       onCancel={() => changeModal('addressStatus',0)}
                       onOk = {() => saveAddressDetail(signAddrList)}
                       幅={700}>
                    <div className={styles.serach}>
                        <input id="ヒント入力"
                               クラス名={styles.searchContent}
                               onChange={(e) => this.placeSearch(e.target.value)}
                               onKeyDown={(e) => this.searchPlace(e)} />
                        <i className={classname(styles.serachIcon,"iconfont icon-weibiaoti106")}></i>
                    </div>
                    <div className={styles.mapContainer} id="コンテンツ" >
                        {
                            this.state.isChose ? <Map amapkey={mapKey}
                                                      plugins={["ツールバー", 'スケール']}
                                                      イベント={選択アドレス}
                                                      中心 = { [ signAddrList.経度、signAddrList.緯度] }
                                                      ズーム={15}>
                                <マーカーの位置={[signAddrList.longitude,signAddrList.latitude]}/>
                            </Map> : <Map amapkey={mapKey}
                                          plugins={["ツールバー", 'スケール']}
                                          イベント={選択アドレス}
                                          ズーム={15}>
                                <マーカーの位置={[signAddrList.longitude,signAddrList.latitude]}/>
                            </マップ>
                        }
                    </div>
                    <div className="mar-t-20">詳細住所:
                        {署名アドレスリスト.addr}
                    </div>
                </モーダル>
            </div>
        )
    }
}

デフォルトアドレスをエクスポート

ReactでAmapを使った実装例(react-amap)については以上です。React Amapに関するより詳しい内容は、123WORDPRESS.COMの過去記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも123WORDPRESS.COMをよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Java環境でAmap APIを使用する方法
  • Android Gaode マップマーカーカスタムポップアップウィンドウ
  • WeChatアプレットAmapマルチポイントルート計画プロセス例の詳細な説明
  • SpringBoot と Mybatis を統合して Amap ポジショニングを実現し、データベースにデータを保存する詳細な手順
  • フロントエンドVueでAmapを使用する方法
  • WeChatアプレットはAmap APIに基づいて天気コンポーネント(動的効果)を実装します
  • vue+Amapは地図検索とクリック位置決め操作を実現します
  • React+Amapは緯度と経度をリアルタイムで取得し、住所を特定します

<<:  Nginx リバース プロキシと負荷分散の実践

>>:  mysql の追加、削除、変更、クエリの基本ステートメント

推薦する

Nodejsはgitee実装コードに自動的に同期するドキュメント同期ツールを作成します

本来の意図このツールを作った理由は、コンピューターを使用しているときにいつでも毎日の仕事や生活を記録...

ウェブページのCSSの優先順位について詳しく説明します

CSS の優先順位について話す前に、CSS とは何か、CSS が何に使用されるのかを理解する必要があ...

HTMLでマスクレイヤーを実装する方法 HTMLでマスクレイヤーを使用する方法

Web ページでマスク レイヤーを使用すると、繰り返しの操作を防ぎ、読み込みを促進できます。また、ポ...

Linux で scp コマンドを使用してファイルをリモートでコピーする方法の詳細な説明

序文scp は secure copy の略です。scp は、Linux システムの ssh ログイ...

MySQL マルチインスタンス構成ソリューション

1.1 MySQL マルチインスタンスとは何ですか?簡単に言うと、MySQL マルチインスタンスとは...

実用的な基本的な Linux sed コマンドのサンプルコード

Linux ストリーム エディターは、データ センターでスクリプトを実行するのに便利な方法です。これ...

HTML における Div と table の違い (あらゆる側面から詳細に説明)

1: 速度と読み込み方法の違いdivとtableの違いは速度ではなく、読み込み方法です。速度はネット...

レスポンシブ Web をデザインするにはどうすればいいですか?レスポンシブウェブデザインのメリットとデメリット

最近レスポンシブ デザインについて学んでいて、これについていくつか整理してみました。写真の一部はイン...

レスポンシブフレームワークのテーブルヘッダーの自動改行問題に対する簡単な解決策

最近、Bootstrap を使って Web サイトを開発しています。表を処理していたところ、PC で...

RedisとMySQLの違いを簡単に説明してください

MySQL はディスクに保存される永続的なストレージであり、取得には一定の IO が伴うことはご存じ...

最新の MySQL 5.7.23 のインストールと設定のグラフィックチュートリアル

2018 年の最新 MySQL 5.7 の詳細なインストールと設定は 4 つのステップに分かれており...

Linux スケジュールタスクの関連操作の概要

皆様の参考と操作を容易にするために、様々な主要ウェブサイトを検索し、関連するスケジュールされたタスク...

IE 環境での css-vars-ponyfill の使用に関する詳細な説明 (nextjs ビルド)

css-vars-ポニーフィルCSS 変数を使用して Web ページのスキニングを実現すると、互換...

CSSを使用して特別なロゴやグラフィックを実装する

1. はじめに画像は多くのスペースを占め、画像の数が増えるほど管理が難しくなるため、シンプルなラベル...

JSはクリックドロップ効果を実装します

jsはクリックとドロップの特殊効果を実現します。まずは効果画像を見てみましょうさっそく始めましょう。...