feat: 🚧 Starting working on localized based api
This commit is contained in:
@ -8,7 +8,31 @@
|
||||
import SwiftUI
|
||||
|
||||
struct ContentView: View {
|
||||
@ObservedObject var locationManager = LocationManager()
|
||||
@State private var isLocationAuthorized = false
|
||||
var body: some View {
|
||||
VStack {
|
||||
var latitude = locationManager.userLocation?.latitude
|
||||
var longitude = locationManager.userLocation?.longitude
|
||||
if locationManager.isLocationAuthorized {
|
||||
// Afficher le contenu de l'application une fois que la localisation est autorisée
|
||||
Text("Latitude: \(locationManager.userLocation?.latitude ?? 0), Longitude: \(locationManager.userLocation?.longitude ?? 0)")
|
||||
} else {
|
||||
// Afficher un message ou un bouton pour demander l'autorisation de localisation
|
||||
Button("Autoriser la localisation") {
|
||||
locationManager.onLocationUpdate = {
|
||||
// Appel à la requête API lorsque la localisation est autorisée
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.onAppear {
|
||||
if locationManager.isLocationAuthorized {
|
||||
// Appel à la requête API lorsque la localisation est déjà autorisée
|
||||
fetchVelibDataLocation(lon: Double(locationManager.userLocation?.longitude ?? 0), lat: Double(locationManager.userLocation?.latitude ?? 0))
|
||||
print("State updated")
|
||||
}
|
||||
}
|
||||
NavigationView {
|
||||
ScrollView {
|
||||
ForEach(velibStations, id: \.stationcode) { station in
|
||||
@ -18,11 +42,13 @@ struct ContentView: View {
|
||||
}
|
||||
.navigationBarTitle("Stations Vélib")
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
struct ContentView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
ContentView()
|
||||
|
@ -1,52 +0,0 @@
|
||||
//
|
||||
// fetchVelibData.swift
|
||||
// velibtracker
|
||||
//
|
||||
// Created by Louis Gallet on 02/09/2023.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
|
||||
var velibStations: [VelibStation] = []
|
||||
|
||||
import Foundation
|
||||
|
||||
func fetchVelibData() {
|
||||
// L'URL de l'API Vélib
|
||||
let apiUrl = URL(string: "https://opendata.paris.fr/api/explore/v2.1/catalog/datasets/velib-disponibilite-en-temps-reel/records?select=stationcode,name,capacity,numdocksavailable,numbikesavailable,mechanical,ebike,coordonnees_geo")!
|
||||
|
||||
// Créez une session URLSession pour effectuer la requête
|
||||
let session = URLSession.shared
|
||||
|
||||
// Créez la tâche de requête
|
||||
let task = session.dataTask(with: apiUrl) { (data, response, error) in
|
||||
// Vérifiez s'il y a des erreurs
|
||||
if let error = error {
|
||||
print("Erreur de requête : \(error.localizedDescription)")
|
||||
return
|
||||
}
|
||||
|
||||
// Vérifiez si les données sont présentes
|
||||
guard let data = data else {
|
||||
print("Aucune donnée reçue.")
|
||||
return
|
||||
}
|
||||
|
||||
do {
|
||||
// Décodez les données en utilisant le décodeur JSON
|
||||
let decoder = JSONDecoder()
|
||||
let velibResponse = try decoder.decode(VelibResponse.self, from: data)
|
||||
|
||||
// Stockez les données dans la variable globale velibStations
|
||||
velibStations = velibResponse.results
|
||||
|
||||
print("Données Vélib récupérées avec succès.")
|
||||
} catch {
|
||||
print("Erreur lors du décodage JSON : \(error.localizedDescription)")
|
||||
}
|
||||
}
|
||||
|
||||
// Lancez la tâche de requête
|
||||
task.resume()
|
||||
}
|
32
velibtracker/utils/LocationManager.swift
Normal file
32
velibtracker/utils/LocationManager.swift
Normal file
@ -0,0 +1,32 @@
|
||||
//
|
||||
// LocationManager.swift
|
||||
// velibtracker
|
||||
//
|
||||
// Created by Louis Gallet on 02/09/2023.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
import CoreLocation
|
||||
|
||||
class LocationManager: NSObject, ObservableObject, CLLocationManagerDelegate {
|
||||
private var locationManager = CLLocationManager()
|
||||
@Published var userLocation: CLLocationCoordinate2D?
|
||||
@Published var isLocationAuthorized = false
|
||||
var onLocationUpdate: (() -> Void)?
|
||||
|
||||
override init() {
|
||||
super.init()
|
||||
locationManager.delegate = self
|
||||
locationManager.requestWhenInUseAuthorization()
|
||||
locationManager.startUpdatingLocation()
|
||||
}
|
||||
|
||||
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
|
||||
if let location = locations.last {
|
||||
userLocation = location.coordinate
|
||||
isLocationAuthorized = true
|
||||
onLocationUpdate?() // Appelé lorsque la localisation est mise à jour
|
||||
}
|
||||
}
|
||||
}
|
96
velibtracker/utils/fetchVelibData.swift
Normal file
96
velibtracker/utils/fetchVelibData.swift
Normal file
@ -0,0 +1,96 @@
|
||||
//
|
||||
// fetchVelibData.swift
|
||||
// velibtracker
|
||||
//
|
||||
// Created by Louis Gallet on 02/09/2023.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
|
||||
var velibStations: [VelibStation] = []
|
||||
|
||||
import Foundation
|
||||
|
||||
func fetchVelibData() {
|
||||
// L'URL de l'API Vélib
|
||||
let apiUrl = URL(string: "https://opendata.paris.fr/api/explore/v2.1/catalog/datasets/velib-disponibilite-en-temps-reel/records?select=stationcode,name,capacity,numdocksavailable,numbikesavailable,mechanical,ebike,coordonnees_geo")!
|
||||
|
||||
// Créez une session URLSession pour effectuer la requête
|
||||
let session = URLSession.shared
|
||||
|
||||
// Créez la tâche de requête
|
||||
let task = session.dataTask(with: apiUrl) { (data, response, error) in
|
||||
// Vérifiez s'il y a des erreurs
|
||||
if let error = error {
|
||||
print("Erreur de requête : \(error.localizedDescription)")
|
||||
return
|
||||
}
|
||||
|
||||
// Vérifiez si les données sont présentes
|
||||
guard let data = data else {
|
||||
print("Aucune donnée reçue.")
|
||||
return
|
||||
}
|
||||
|
||||
do {
|
||||
// Décodez les données en utilisant le décodeur JSON
|
||||
let decoder = JSONDecoder()
|
||||
let velibResponse = try decoder.decode(VelibResponse.self, from: data)
|
||||
|
||||
// Stockez les données dans la variable globale velibStations
|
||||
velibStations = velibResponse.results
|
||||
|
||||
print("Données Vélib récupérées avec succès.")
|
||||
} catch {
|
||||
print("Erreur lors du décodage JSON : \(error.localizedDescription)")
|
||||
}
|
||||
}
|
||||
|
||||
// Lancez la tâche de requête
|
||||
task.resume()
|
||||
}
|
||||
|
||||
|
||||
func fetchVelibDataLocation(lon: Double, lat: Double) {
|
||||
// L'URL de l'API Vélib
|
||||
print(lon, lat)
|
||||
let longitude = String(lon).replacingOccurrences(of: ",", with: ".")
|
||||
print(longitude)
|
||||
let apiUrl = URL(string: "https://opendata.paris.fr/api/explore/v2.1/catalog/datasets/velib-disponibilite-en-temps-reel/records?select=stationcode,name,capacity,numdocksavailable,numbikesavailable,mechanical,ebike,coordonnees_geo&where=distance(coordonnees_geo%2C%20geom%27POINT(\(lon)%20\(lat)%27%2C%2015km)")!
|
||||
|
||||
// Créez une session URLSession pour effectuer la requête
|
||||
let session = URLSession.shared
|
||||
|
||||
// Créez la tâche de requête
|
||||
let task = session.dataTask(with: apiUrl) { (data, response, error) in
|
||||
// Vérifiez s'il y a des erreurs
|
||||
if let error = error {
|
||||
print("Erreur de requête : \(error.localizedDescription)")
|
||||
return
|
||||
}
|
||||
|
||||
// Vérifiez si les données sont présentes
|
||||
guard let data = data else {
|
||||
print("Aucune donnée reçue.")
|
||||
return
|
||||
}
|
||||
|
||||
do {
|
||||
// Décodez les données en utilisant le décodeur JSON
|
||||
let decoder = JSONDecoder()
|
||||
let velibResponse = try decoder.decode(VelibResponse.self, from: data)
|
||||
|
||||
// Stockez les données dans la variable globale velibStations
|
||||
velibStations = velibResponse.results
|
||||
print(velibStations)
|
||||
|
||||
print("Données Vélib récupérées avec succès.")
|
||||
} catch {
|
||||
print("Erreur lors du décodage JSON : \(error.localizedDescription)")
|
||||
}
|
||||
}
|
||||
|
||||
// Lancez la tâche de requête
|
||||
task.resume()
|
||||
}
|
@ -16,5 +16,5 @@ struct velibtrackerApp: App {
|
||||
}
|
||||
init() {
|
||||
fetchVelibData()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user