首页 > 解决方案 > 手机在android中的当前位置

问题描述

他们是否有任何付费或免费应用程序可以告诉我手机当前位置的经度和纬度。我在我当前的反应本机代码中使用 GeoDist,但没有在 android 上获得手机的确切当前位置。如果有人可以向我推荐付费或免费代码以获取手机的当前位置,我将不胜感激。下面是我的代码,它没有给我正确的计算:

componentDidMount() {
    navigator.geolocation.getCurrentPosition(
      (position) => {
        this.setState({
          latitude: position.coords.latitude,
          longitude: position.coords.longitude,
          error: null,
        });
      },
      (error) => this.setState({ error: error.message }),
      { enableHighAccuracy: true, timeout: 20000, maximumAge: 1000 },
    );
  }

 var geodist = require('geodist')
    var sLat= this.state.latitude;
    var sLong =  this.state.longitude;

    var dist = geodist({lat: sLat, lon: sLong}, {lat: item.LatL, lon: item.Long2}, 'mi'

)

谢谢你。

标签: androidreact-native

解决方案


通过查看您的代码,我想建议对您的代码进行一些更改:

如果您想要精确的位置,请使用parseFloat()来获取纬度和经度,因为 float 将始终为您提供精确的值。

在AndroidManifest.xml中提供这些权限

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

然后在您的 .js 文件中进行以下更改:

const { width, height } = Dimensions.get('window');
const ASPECT_RATIO = width / height
const LATITUDE_DELTA = 0.0922
const LONGITUDE_DELTA = LATITUDE_DELTA * ASPECT_RATIO

this.state中的一个状态为

initialPosition: {
   latitude: 0,
   longitude: 0,
   latitudeDelta: 0,
   longitudeDelta: 0,
 },

componentDidMount()中执行此操作

 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,});
}

然后你可以在你的 MapView 中使用这个 initialPosition 状态。


推荐阅读