내 firebase 데이터베이스에서 모든 주석 위치를 검색하고 있습니다. 그때 사용자의 위치를 아래모든 CLlocations CLLocationCoordinate2D를 배열에 저장하는 방법
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let location = locations[0]
let myLocation:CLLocationCoordinate2D = CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude)
ILocation = myLocation
self.map.showsTraffic = true
self.map.isZoomEnabled = true
self.map.showsUserLocation = true
let span:MKCoordinateSpan = MKCoordinateSpanMake(0.1, 0.1)
let region:MKCoordinateRegion = MKCoordinateRegionMake(myLocation, span)
map.setRegion(region, animated: true)
geoCoder.reverseGeocodeLocation(location, completionHandler: { placemarks, error in
guard let addressDict = placemarks?[0].addressDictionary else {
return
}
if let city = addressDict["City"] as? String {
self.CityLocation.text = "\(city)"
// print("City is: \(city)")
}
})
코드를 얻기 위해이을 locationManager를 사용
var ILocation = CLLocationCoordinate2D()
let manager = CLLocationManager()
var UserName = String()
var C1 = CLLocation()
func allLocationAnnotations() {
let databaseRef = FIRDatabase.database().reference()
databaseRef.child("Locations").queryOrderedByKey().observe(.childAdded, with: { (snapshot) in
let value = snapshot.value as? NSDictionary
let longitude = value?["Longitude"] as! String
let latitude = value?["Latitude"] as! String
let name = value?["Location Shared By"] as! String
let annotationCityName = value?["Annotation_City"] as! String
self.allAnnotationLocations.insert(annotationStruct(Longitude: longitude, Latitude: latitude), at: 0)
// print("\(name) - Location of Longitude \(longitude), Latitude: \(latitude)")
let annotation = MKPointAnnotation()
annotation.title = "\(name)"
annotation.subtitle = "around this location"
annotation.coordinate.latitude = Double(latitude)!
annotation.coordinate.longitude = Double(longitude)!
self.map.addAnnotation(annotation)
self.addRadiusCircle(location: annotation)
self.TotalInUserCity += 1
self.SpottedNum.text = "\(self.TotalInUserCity)"
self.C1 = CLLocation(latitude: Double(latitude)!, longitude: Double(longitude)!)
})
}
(새로운 아이가 데이터베이스에 추가 된 후에 만 실행) 아래의 코드는 동일을 locationManager 기능에 - 바로 그때 이 코드 아래에서 모든 사용자의 현재 위치가 얼마나 많은지에 관계없이 모든 위치에 있는지 확인하기 위해 모든 위치를 파악하려고합니다. 하지만 그 대신에 단 하나의 주석 위치를 얻는 이유는 위의 C1 변수에 저장할 때 하나의 값만 가질 수 있기 때문입니다. 그러나 배열을 만들고 내부에서 잡으려고 할 때 ' 난 단지 이전 한 주석 위치를 얻을 I 추가 할 때 t이
var ILocation = CLLocationCoordinate2D()
let manager = CLLocationManager()
var UserName = String()
var C1 = CLLocation()
func allLocationAnnotations() {
let databaseRef = FIRDatabase.database().reference()
databaseRef.child("Locations").queryOrderedByKey().observe(.childAdded, with: { (snapshot) in
let value = snapshot.value as? NSDictionary
let longitude = value?["Longitude"] as! String
let latitude = value?["Latitude"] as! String
let name = value?["Location Shared By"] as! String
let annotationCityName = value?["Annotation_City"] as! String
self.allAnnotationLocations.insert(annotationStruct(Longitude: longitude, Latitude: latitude), at: 0)
// print("\(name) - Location of Longitude \(longitude), Latitude: \(latitude)")
let annotation = MKPointAnnotation()
annotation.title = "\(name)"
annotation.subtitle = "around this location"
annotation.coordinate.latitude = Double(latitude)!
annotation.coordinate.longitude = Double(longitude)!
self.map.addAnnotation(annotation)
self.addRadiusCircle(location: annotation)
self.TotalInUserCity += 1
self.SpottedNum.text = "\(self.TotalInUserCity)"
self.C1 = CLLocation(latitude: Double(latitude)!, longitude: Double(longitude)!)
})
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let location = locations[0]
let myLocation:CLLocationCoordinate2D = CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude)
ILocation = myLocation
self.map.showsTraffic = true
self.map.isZoomEnabled = true
self.map.showsUserLocation = true
let span:MKCoordinateSpan = MKCoordinateSpanMake(0.1, 0.1)
let region:MKCoordinateRegion = MKCoordinateRegionMake(myLocation, span)
map.setRegion(region, animated: true)
geoCoder.reverseGeocodeLocation(location, completionHandler: { placemarks, error in
guard let addressDict = placemarks?[0].addressDictionary else {
return
}
if let city = addressDict["City"] as? String {
self.CityLocation.text = "\(city)"
// print("City is: \(city)")
}
})
let C2 = CLLocation(latitude: Double(self.ILocation.latitude), longitude: Double(self.ILocation.longitude))
let distanceInMeters = C1.distance(from: C2) // result is in meters
if(distanceInMeters <= 1609)
{
print("Your are close to a Location Shared by:---------------")
}
else
{
// out of 1 mile
}
}
또한 한 조각에
let C2 = CLLocation(latitude: Double(self.ILocation.latitude), longitude: Double(self.ILocation.longitude))
let distanceInMeters = C1.distance(from: C2) // result is in meters
if(distanceInMeters <= 1609)
{
print("Your are close to a Location Shared by:---------------")
}
else
{
// out of 1 mile
}
}
여기
입니다 코드 사전에 도움을 CLLocationCoordinate2D :(덕분에 Cllocation을 변환합니다. 감사 다시 당신을 도울 수 있기를 바랍니다 :)
그 조언을 해주셔서 감사합니다 :)하지만, 데이터베이스베이스 (MemoryRef.child)에서 데이터를 가져 오는 코드부터 queryOrderedByKey(). observe (.childAdded, with : {(snapshot) is 이 함수는 루프로 작동하며, firebase 데이터베이스에있는 모든 자식 수만큼 실행됩니다. 새로운 자식이 데이터베이스에 추가 될 때마다 실행됩니다. Firebase는 실시간 데이터베이스로 작동합니다. 기본적으로 추가하면 그 기능으로 그것은 영원히 반복한다. –