web-dev-qa-db-ja.com

反応ネイティブマップを使用して現在位置を取得する方法

Androidデバイス、反応ネイティブマップを使用して、現在のユーザーの位置情報でマップをレンダリングしようとしています。

これが私がこれまでに得たものです:

import React, { Component } from 'react';

import {
  View,
  StyleSheet,
  Dimensions,
} from 'react-native';

import MapView from 'react-native-maps';

const {width, height} = Dimensions.get('window')

const SCREEN_HEIGHT = height
const SCREEN_WIDTH = width
const ASPECT_RATIO = width / height
const LATITUDE_DELTA = 0.0922
const LONGITUDE_DELTA = LATITUDE_DELTA * ASPECT_RATIO

class MapComponent extends Component {
  constructor() {
    super()
    this.state = {
      initialPosition: {
        latitude: 0,
        longitude: 0,
        latitudeDelta: 0,
        longitudeDelta: 0,
      },
    }
  }

  componentDidMount() {
    navigator.geolocation.getCurrentPosition((position) => {
      var lat = parseFloat(position.coords.latitude)
      var long = parseFloat(position.coords.longitude)

      var initialRegion = {
        latitude: lat,
        longitude: long,
        latitudeDelta: LATITUDE_DELTA,
        longitudeDelta: LONGITUDE_DELTA,
      }

      this.setState({initialPosition: initialRegion})
    },
    (error) => alert(JSON.stringify(error)),
    {enableHighAccuracy: true, timeout: 20000, maximumAge: 1000});
  }


  renderScreen = () => {
      return (
        <View style={styles.container}>
          <MapView
            style={styles.map}
            initialRegion={this.state.initialPosition}/>
        </View>
      );
  }

  render() {
    return (
      this.renderScreen()
    );
  }
}

const styles = StyleSheet.create({
  container: {
    position: 'absolute',
    top: 0,
    left: 0,
    right: 0,
    bottom: 0,
    justifyContent: 'flex-end',
    alignItems: 'center',
  },
  map: {
    position: 'absolute',
    top: 0,
    left: 0,
    right: 0,
    bottom: 0,
  },
});

export default MapComponent;

予想どおり、マップはレンダリングされますが、現在のデバイスの地理位置情報ではレンダリングされません。 (それは海の真ん中にレンダリングされます)

権限はすでにAndroidManifest.xmlで次のように設定されています。

<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION" />

20秒後、「ロケーションリクエストがタイムアウトしました」、「コード3」という警告が表示されます

私は何を間違っているのですか?

6
MacFlyer

よくわかりませんが、関連があるように見える issue( "Geolocation timed out、code 3") があります

Androidでこの問題に苦労している人は、maximumAge:2000オプションパラメータを削除してみてください。このオプションにより、地理位置情報がタイムアウトするか、アプリがクラッシュしていました。

5
Xeningem

私の中で完全に機能しています。私が行った変更のみがStyleSheetにありました。

container: {
    position: 'absolute',
    height : SCREEN_HEIGHT,
    width : SCREEN_WIDTH,
    justifyContent: 'flex-end',
    alignItems: 'center',
}

その後、それは私の場所をレンダリングします。その後、マーカーを追加して現在地を表示できます。

1
Harsh Vishnoi

これは私のために働いたものです。 3番目のオプションは、確率を作成していたものです。

navigator.geolocation.getCurrentPosition() =>{

},
 err => {

},
{ enableHighAccuracy: false, timeout: 20000}, //this worked for me
0
Speedy11