Untitled
unknown
swift
2 years ago
8.9 kB
7
Indexable
// // GoogleMapsView.swift // Garageworks-iOS-Revamp // // Created by mac on 16/11/22. // import SwiftUI import GoogleMaps import Combine struct GoogleMapsView: UIViewRepresentable { // Listen to changes on the locationManager @ObservedObject var locationManager = LocationManager() var currentPosition:CLLocationCoordinate2D? // var camera = GMSCameraUpdate() @Binding var zoom: Float @Binding var location : Location @Binding var showCurrentLocation : Bool @Binding var placeAddress : String @Binding var placePincode : String @Binding var placeCity : String @Binding var placeArea : String @Binding var currentLocation : Location func makeUIView(context: Self.Context) -> GMSMapView { //let camera = GMSCameraPosition.camera(withTarget: CLLocationCoordinate2D(latitude: location.latitude, longitude: location.longitude), zoom: 15.0) let camera = GMSCameraPosition(latitude: currentPosition?.latitude ?? 0, longitude: currentPosition?.longitude ?? 0, zoom: 10) var mapView = GMSMapView(frame: CGRect.zero, camera: camera) // mapView.frame = CGRect.zero // mapView.camera = camera mapView.settings.compassButton = true mapView.isMyLocationEnabled = true mapView.settings.scrollGestures = true mapView.settings.zoomGestures = true mapView.settings.rotateGestures = true mapView.settings.tiltGestures = true mapView.delegate = context.coordinator let marker = GMSMarker() marker.position = CLLocationCoordinate2D(latitude: currentPosition?.latitude ?? 0, longitude: currentPosition?.longitude ?? 0) marker.map = mapView return mapView } func updateUIView(_ mapView: GMSMapView, context: Self.Context) { mapView.clear() let tappedLocation = CLLocationCoordinate2D(latitude: location.latitude, longitude: location.longitude) let tappedLocationCam = GMSCameraUpdate.setTarget(tappedLocation) mapView.animate(with: tappedLocationCam) mapView.animate(toZoom: zoom) let marker = GMSMarker() marker.position = tappedLocation marker.map = mapView if(showCurrentLocation){ // // location = currentLocation // mapView.settings.myLocationButton.toggle() // mapView.settings.myLocationButton = false location = Location(latitude: UserDefaultsManager.fetchCurrentLat(), longitude: UserDefaultsManager.fetchCurrentLong()) showCurrentLocation = false } } func makeCoordinator() -> Coordinator { return Coordinator(self) } final class Coordinator: NSObject, GMSMapViewDelegate { var parent: GoogleMapsView init(_ parent: GoogleMapsView) { self.parent = parent } func mapView(_ mapView: GMSMapView, didTapAt coordinate: CLLocationCoordinate2D) { print("You tapped at \(coordinate.latitude), \(coordinate.longitude)") parent.location.latitude = coordinate.latitude parent.location.longitude = coordinate.longitude fetchAddressFromLatLong(lat: coordinate.latitude, long: coordinate.longitude) } func locationManager() { } func fetchAddressFromLatLong(lat: Double,long: Double) { var addressString : String = "" var postalString : String = "" var cityString : String = "" var areaString : String = "" let geoCoder = CLGeocoder() let location = CLLocation(latitude: lat , longitude: long) geoCoder.reverseGeocodeLocation(location, completionHandler: { (placemarks, error) -> Void in // print("Response GeoLocation : \(placemarks?[0])") var placeMark: CLPlacemark! placeMark = placemarks?[0] if placeMark.subThoroughfare != nil { addressString = addressString + placeMark.subThoroughfare! + ", " } if placeMark.thoroughfare != nil { addressString = addressString + placeMark.thoroughfare! + ", " } if placeMark.subLocality != nil { addressString = addressString + placeMark.subLocality! + ", " } if placeMark.locality != nil { addressString = addressString + placeMark.locality! + ", " } if placeMark.administrativeArea != nil { addressString = addressString + placeMark.administrativeArea! + ", " } if placeMark.country != nil { addressString = addressString + placeMark.country! + ", " } if placeMark.postalCode != nil { addressString = addressString + placeMark.postalCode! + " " } if placeMark.postalCode != nil { postalString = postalString + placeMark.postalCode! + " " } if placeMark.locality != nil { cityString = placeMark.locality ?? "" } if placeMark.subLocality != nil { areaString = placeMark.subLocality ?? "" } self.parent.placeAddress = addressString print("\n",addressString,"\n","*********") self.parent.placePincode = postalString // print("\n",postalString,"\n","******") self.parent.placeCity = cityString self.parent.placeArea = areaString print("\n",areaString,"***areaString") // Country // if let country = placeMark.addressDictionary!["Country"] as? String { // print("Country :- \(country)") // // City // if let city = placeMark.addressDictionary!["City"] as? String { // print("City :- \(city)") // // State // if let state = placeMark.addressDictionary!["State"] as? String{ // print("State :- \(state)") // // Street // if let street = placeMark.addressDictionary!["Street"] as? String{ // print("Street :- \(street)") // let str = street // let streetNumber = str.components( // separatedBy: NSCharacterSet.decimalDigits.inverted).joined(separator: "") // print("streetNumber :- \(streetNumber)" as Any) // // // ZIP // if let zip = placeMark.addressDictionary!["ZIP"] as? String{ // print("ZIP :- \(zip)") // // Location name // if let locationName = placeMark?.addressDictionary?["Name"] as? String { // print("Location Name :- \(locationName)") // // Street address // if let thoroughfare = placeMark?.addressDictionary!["Thoroughfare"] as? NSString { // print("Thoroughfare :- \(thoroughfare)") // // } // } // } // } // } // } // } }) } } func addCurrentUserPosition(currentPosition: CLLocationCoordinate2D){ let marker = GMSMarker(position: currentPosition) print("marker Current position: \(marker)") marker.title = "Current Location" marker.rotation = Double.random(in: -10...10) } }
Editor is loading...