2016-11-07 8 views

答えて

0

は最後にこれは私が手動で順番にnavigator.geolocation.getCurrentPosition関数によって返される中央、与えられたマップの境界を計算するために管理する方法です。

この緯度度からkmsへの変換に基づくこの計算は、1度の緯度変化が約111.2kmに相当する。私は10km幅のlatLngから地図の境界を計算しています。あなたはまた、マップまでローダーまたはスピナーのために行くことができ

const geolocation = (
    navigator.geolocation ? 
     navigator.geolocation : 
     ({ 
      getCurrentPosition(success, failure) { 
      failure(`Your browser doesn't support geolocation.`); 
     }, 
    }) 
); 

geolocation.getCurrentPosition(
    (position) => { 
     if (this.isUnmounted) { return; } 
      this.setState({ 
      center: { 
       lat: position.coords.latitude, 
       lng: position.coords.longitude, 
      } 
      }); 

     // formula to find the South west and North East points from lat,lon between 10km. 
     let lat_change = 10/111; 
     let lon_change = Math.abs(Math.cos(this.state.center.lat *(Math.PI/180))); 
     let sw_lat = this.state.center.lat - lat_change; 
     let sw_lon = this.state.center.lng - lon_change; 
     let ne_lat = this.state.center.lat + lat_change; 
     let ne_lon = this.state.center.lng + lon_change; 

     console.log(sw_lat, sw_lon, ne_lat, ne_lon); 
     console.log(this.state.center); 
    }, 
    (reason) => { 
     if (this.isUnmounted) { return; } 
     this.setState({ 
      center: geoMap.INITIAL_CENTER, 
      zoom: 5 
     }); 
    } 
); 

は完全にロードされ、@FabianなどのgetBoundsは、コメントに記載されています。

1

最も簡単な方法は、Googleマップコンポーネントに5にデフォルトのズームを設定するには、次のようになります。

<GoogleMap 
    ref="map" 
    defaultZoom={5} 
    defaultCenter={{ lat: -25.363882, lng: 131.044922 }} 
> 

defaultCenterは、この形式でユーザのロケーションです。その後、

と、このような境界を取得:

let map = this.refs.map; 
let bounds = map.getBounds(); 

let geoBounds = { 
    swLat: bounds.getSouthWest().lat(), 
    swLng: bounds.getSouthWest().lng(), 
    neLat: bounds.getNorthEast().lat(), 
    neLng: bounds.getNorthEast().lng(), 
}; 
+0

これは、マップコンポーネントがロードされてマウントされた後にのみ実装でき、それ以外の場合は「未定義」エラーが発生します。私のユースケースは、地図の境界がパラメータであるnodejのバックエンドapiからフェッチされたマップされたデータを表示することです。 –

+0

V3のGoogle Maps APIには、このための機能は組み込まれていません。私があなただったら、どこかにロードインジケータを置き、マップが初期化された後にデータをロードします。ユーザーは、データが表示された直後にマップ上の位置を確認することができます。私見では。 –

+0

スピナーやローダーがいい考えです。おかげでトン@ファビアン。私は境界を手動で計算することに取り組んでおり、すぐに出てくるものを投稿します –

関連する問題