Quiero obtener los 5 marcadores principales que están más cerca de la ubicación de los usuarios (en orden) y colocarlos en un objeto useState. ¿Cómo puedo lograr eso?
Flujo de carga de la pantalla de mi mapa:
const fetchClosestRendelok = async () => { //Get markers in an area here and add to a json } const fetchRendeloData = async () => { const data = await fetchRendelok() setRendelok(data) } useEffect(() => { fetchRendeloData() fetchClosestRendelok() }, []); return ( <View style={styles.container}> <MapView style={styles.map} provider={PROVIDER_GOOGLE} region={mapRegion} showsUserLocation={true} onPress={() => setSelectedMarkerIndex("")} > { rendelok.map((rendelok) => { return ( <Marker key={rendelok.id} coordinate={{ latitude:parseFloat(rendelok.lat), longitude:parseFloat(rendelok.ltd) }} onPress={() => markerClick(rendelok)} tracksViewChanges={false} > <View> <MaterialCommunityIcons name="hospital-marker" size={selectedMarkerIndex === rendelok.id ? 80 : 30} color={selectedMarkerIndex === rendelok.id ? 'red' : color_theme_light.iconColor}/> </View> </Marker > ) }) } </MapView> </View> ); }Al final, esta fue mi solución, usé libary para ordenar mis marcadores por distancia https://github.com/manuelbieh/geolib , luego comparé las coordenadas con mi matriz original.
try { let coordsArray = [] rendelok.map((rendelok) => coordsArray.push({latitude:rendelok.lat, longitude:rendelok.ltd})) let closestRendelok = orderByDistance(userPosition.coords, coordsArray).slice(0,5); var result = rendelok.filter(function (o1) { return closestRendelok.some(function (o2) { return o1.lat === o2.latitude; }); }); setClosestRendelok(result) } catch (error) { console.log(error) }