import React, {useState, useEffect, useRef} from "react"; import { View, Text, StyleSheet, Alert, TouchableOpacity, Image, Pressable, FlatList, LogBox, StatusBar, TextInput } from "react-native"; import MapLibreGL from '@maplibre/maplibre-react-native'; import { MapView,ShapeSource,Camera,UserLocation,PointAnnotation,FillLayer,LineLayer,VectorSource } from "@maplibre/maplibre-react-native"; import Geolocation from "@react-native-community/geolocation"; import AsyncStorage from '@react-native-async-storage/async-storage'; // import { TextInput } from "react-native-paper"; import adminCountry from '../../assets/geojson/admKabKota.json'; import Modal from "react-native-modal"; // MapLibreGL.setAccessToken(null); type MapCollectProps = {route: any,navigation: any} function MapCollectScreen({route,navigation}:MapCollectProps):React.JSX.Element{ const apiKey = "JoJs2pcDv5o0yQlQLMfI"; const [basemap, setBasemap] = useState("streets"); const styleURL = `https://api.maptiler.com/maps/${basemap}/style.json?key=${apiKey}`; const [currentPosition, setCurrentPosition] = useState<[number,number] | []>([0,0]); const [FixCoor, setFixCoor] = useState<{long:Number,lat:Number} | {}>({}); const [delayRender, setDelayRender] = useState(true); const [long,setLong] = useState(0); const [lat,setLat] = useState(0); const [modalInputLocation, setmodalInputLocation] = useState(false); const [modalBasemap, setmodalBasemap] = useState(false); const [modalLayerList, setmodalLayerList] = useState(false); const getLocation = () => { Geolocation.getCurrentPosition( position => { const {latitude, longitude } = position.coords; setFixCoor({long:longitude,lat:latitude}) setCurrentPosition([longitude,latitude]) setLat(latitude) setLong(longitude) }, error => { console.log('Error Getting current position', error); }, {enableHighAccuracy: false, timeout: 15000, maximumAge: 10000}, ); }; useEffect(()=> { getLocation() const timeoutId = setTimeout(()=> { setDelayRender(false) }, 2000) return ()=> clearTimeout(timeoutId); },[]); const SelectPosition = () => { navigation.navigate('PJU Collecting', { screen: 'PJU Collecting', fixCoordinate: FixCoor}) }; const [zoom, setZoom] = useState(15); const MAX_ZOOM_LEVEL = 20; const MIN_ZOOM_LEVEL = 5; const handleZoom = (isZoomIn = false) => { let currentZoomLevel = zoom; if (!isZoomIn && currentZoomLevel === MAX_ZOOM_LEVEL) { currentZoomLevel -= 1; } else if (isZoomIn && currentZoomLevel === MIN_ZOOM_LEVEL) { currentZoomLevel += 1; } if ( currentZoomLevel >= MAX_ZOOM_LEVEL || currentZoomLevel <= MIN_ZOOM_LEVEL ) { return; } currentZoomLevel = isZoomIn ? currentZoomLevel + 1 : currentZoomLevel - 1; setZoom(currentZoomLevel); } const gotoCoordinate = () => { setCurrentPosition([long,lat]) setFixCoor({long:long,lat:lat}) } return ( {/* Longitude Latitude */} {/* { const props = e.features[0].properties Alert.alert(props.NAME_2) } } > */} {!delayRender ? <> } style={{zIndex:-1}} id={"pjuCoordinate"} coordinate={currentPosition!} draggable={true} onDrag={(e)=> { setFixCoor({long:e.geometry.coordinates[0].toFixed(6),lat:e.geometry.coordinates[1].toFixed(6)}) console.log(e.geometry); setLong(e.geometry.coordinates[0].toFixed(6)) setLat(e.geometry.coordinates[1].toFixed(6)) }} /> { Alert.alert('aaa') }}> } /> : } setmodalBasemap(true)} style={{position:'absolute',backgroundColor:'#FFFFFF',width:50,height:50,borderRadius:25,alignItems:'center',justifyContent:'center',top:'7%',left:'4%'}}> setmodalLayerList(true)} style={{position:'absolute',backgroundColor:'#FFFFFF',width:50,height:50,borderRadius:25,alignItems:'center',justifyContent:'center',top:'15%',left:'4%'}}> getLocation()} style={{position:'absolute',backgroundColor:'#FFFFFF',width:50,height:50,borderRadius:25,alignItems:'center',justifyContent:'center',top:'23%',left:'4%'}}> { setmodalInputLocation(true) }} style={{position:'absolute',backgroundColor:'#FFFFFF',width:50,height:50,borderRadius:25,alignItems:'center',justifyContent:'center',top:'7%',right:'4%'}}> {!delayRender ? Select Position : Waiting Get Position } setmodalInputLocation(false)} style={{top:'18%',alignSelf:'center'}}> Input Point setmodalInputLocation(false)} style={{alignSelf:'flex-end',padding:10}}> Longitude Latitude Ok setmodalBasemap(false)} style={{top:'18%',alignSelf:'center'}}> Basemap Gallery setmodalBasemap(false)} style={{alignSelf:'flex-end',padding:10}}> setmodalLayerList(false)} style={{top:'18%',alignSelf:'center'}}> Layer List setmodalLayerList(false)} style={{alignSelf:'flex-end',padding:10}}> {/* Widget Map */} {/* handleZoom(true)}> handleZoom()}> { getLocation() }}> */} ) } const styles = StyleSheet.create({ buttonImageIconStyle: { padding: 10, margin: 5, height: 25, width: 25, resizeMode: 'stretch', }, gotoLocate: { opacity: 0.6, position: 'absolute', top:120, right: 5, borderRadius:8, paddingHorizontal:7, width: 50, // height: 50, backgroundColor: "white", flexDirection: 'column', gap: 10 } }); export default MapCollectScreen;