Экспо - нужна помощь для определения радиуса вокруг данных о местоположении API - PullRequest
0 голосов
/ 29 марта 2019

Попытка привязать радиус для текущего местоположения к API, у которого есть местоположения.В настоящее время новый EXPO SDK теперь запустил геозону наряду с использованием taskManager для управления запросом.

Это подтверждение концепции, и действительно ли новый SDK действительно работает для требований.

Может получитьтекущее местоположение.Возможность отображать все данные из API (с широтой и долготой)

Теперь это позволяет текущему местоположению отображать только местоположения от API до определенного радиуса.

Пока мне не нужнозапускать фоновые задачи и обновлять текущее местоположение - это больше о том, чтобы находиться в одном месте, а затем перетаскивать местоположения в радиусе от API.

Любая помощь или онлайн-уроки помогут.

Запуск этогов EXPO Snack для доказательства концепции.

Поскольку параметры геозонирования являются очень новыми для SDK - интерактивные учебные пособия недоступны и при большом количестве поиска большинство пользователей не получают окончательных результатов.

import React, {Component} from 'react';
import { AppRegistry, Text, View, StyleSheet, FlatList, Image } from 'react-native';
import { Constants, MapView, Location, TaskManager, Permissions } from 'expo';

TaskManager.defineTask('geoTask', ({ data: { eventType, region }, error }) => {
  if (error) {
    console.log("geoTaskError", {error});
    return;
  }
  if (eventType === Location.GeofencingEventType.Enter) {
    console.log("geoTaskEnter", { eventType, region });
  } 
  else if (eventType === Location.GeofencingEventType.Exit) {
    console.log("geoTaskExit", { eventType, region });
  }
});


export default class App extends Component {
  constructor() {
    super ()
    this.state = {
      dataSource: []
    }
  }

  state = {
    mapRegion: null,
    hasLocationPermissions: false,
    locationResult: null
  };

  _handleMapRegionChange = mapRegion => {
    console.log(mapRegion);
    this.setState({ mapRegion });
  };

  _getLocationAsync = async () => {
   let { status } = await Permissions.askAsync(Permissions.LOCATION);
   if (status !== 'granted') {
     this.setState({
       locationResult: 'Permission to access location was denied',
     });
   } else {
     this.setState({ hasLocationPermissions: true });
   }

  let location = await Location.getCurrentPositionAsync({});
    this.setState({ locationLat: (location.coords.latitude) });
    this.setState({ locationLon: (location.coords.longitude) });
    this.setState({ locationResult: JSON.stringify(location) });

   // Center the map on the location we just fetched.
  this.setState({mapRegion: { latitude: location.coords.latitude, longitude: location.coords.longitude, latitudeDelta: 0.0922, longitudeDelta: 0.0421 }});
  };

  _startGeofencingAsync = async (geoTask, regions) => {
  this.setState ({ regions: {radius: 4000}})
  };

  renderItem = ({item}) => {
    return (
    <View>
      <View>
        <Text>CODE: {item.code}
        <Text> AIRPORT NAME: {item.name}
        <Text> LAT: {item.lat}
        <Text> LONG: {item.lon} 
        </Text>
        </Text>
        </Text>
        </Text>
      </View>
    </View>
  )}

  componentDidMount() {
    this._getLocationAsync();
    //const url = 'https://www.json-generator.com/api/json/get/ccLAsEcOSq?indent=1'
    const url = 'https://gist.githubusercontent.com/tdreyno/4278655/raw/7b0762c09b519f40397e4c3e100b097d861f5588/airports.json'
    fetch(url)
    .then((repsonse) => repsonse.json())
    .then((responseJson) => {
      this.setState({
        dataSource: responseJson
      })
    })
    .catch((error) => {
        console.log(error)    
    });

    let onPress = async () => {
    await Location.startLocationUpdatesAsync('geoTask', {
      accuracy: Location.Accuracy.Balanced,
    });
  };
  }

  render() {
    return (
      <View style={styles.container}>

        <Text>Latitude: {this.state.locationLat}</Text>
        <Text>Longitude: {this.state.locationLon}</Text>
        <Text>Location: {this.state.locationResult}</Text>

      <View style={styles.container}>
        <FlatList
          data={this.state.dataSource}
          renderItem={this.renderItem}
          />
      </View>
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    paddingTop: Constants.statusBarHeight,
    backgroundColor: '#ecf0f1',
    padding: 8,
  },
  paragraph: {
    margin: 24,
    fontSize: 18,
    fontWeight: 'bold',
    textAlign: 'center',
  },
});

Текущее местоположение -> имеет радиус -> геозона тянет окружающие места в радиусе от API

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...