Die beste Möglichkeit, die Suche in einem bestimmten Bereich zu beschränken, besteht darin, einen Pfad zu erstellen und zu überprüfen, ob die angeforderten Lat- oder Lng-Werte darin enthalten sind oder nicht. Auch dieser Ansatz kann für die automatische Vervollständigung der API verwendet werden. Sobald der Benutzer ein Ergebnis aus der Zeile ausgewählt hat, können wir dessen lat, lng ermitteln und prüfen, ob sich diese in unserem Stadt/Land-Pfad befinden. Unten ist ein Code zum besseren Verständnis. Zum Beispiel möchte ich, dass Benutzer in UAE einschränken. Zuerst erhalten Sie die Grenzkoordinaten der UAE und speichern diese in der Liste. Der folgende Code kann verwendet werden, um Grenzkoordinaten zu erhalten.
func mapView(_ mapView: GMSMapView, didTapAt coordinate: CLLocationCoordinate2D) {
self.view.endEditing(true)
if(isDrawing == true)
{
self.viewMap.clear()
path.add(coordinate)
let polyline = GMSPolyline(path: path)
polyline.strokeColor = .blue
polyline.strokeWidth = 3.0
polyline.map = self.viewMap
points.add(String(format:"%f,%f",coordinate.latitude,coordinate.longitude))
}
}
Sobald Sie ganze Grenzpunkte markiert haben, dann können diese wie diese
let strPoints:String! = points.componentsJoined(by: "|")
print(strPoints)
speichern, die Sie in der Konsole so etwas wie dieses
"26.050692,56.086607|26.117957,54.749640|25.901079,53.631803|24.620641,51.447101|24.274502,51.575709|22.926947,52.593388|22.777518,53.985706|22.645116,55.149715|22.701870,55.227998|23.016172,55.222406|23.375945,55.401338|23.698908,55.574679|23.842193,55.524355|23.949552,55.501988|24.046609,55.787162|24.061928,56.010827|24.184407,55.982869|24.220108,55.966095|24.204809,55.837486|24.255799,55.764795|24.403556,55.848670|24.540967,55.775979|24.637573,55.809528|24.759496,55.837486|24.916802,55.820711|24.967504,55.871037|24.987778,55.960503|24.967504,56.061152|24.876227,56.072336|24.886372,55.977278|24.754418,56.066744|24.769651,56.206535|24.835637,56.234493|24.932015,56.351918|24.972573,56.379876|25.256102,57.028506|25.896649,56.732150|26.368532,56.687416|26.488706,56.268043|26.348491,55.943728|26.388570,55.233589|26.413612,54.322151|26.183019,54.350110|26.107726,54.355701|26.027361,54.361293"
Kopieren Sie es sehen und in Ihrem Code speichern
path = GMSMutablePath()
points = NSMutableArray()
let pointsStr:String! = "26.050692,56.086607|26.117957,54.749640|25.901079,53.631803|24.620641,51.447101|24.274502,51.575709|22.926947,52.593388|22.777518,53.985706|22.645116,55.149715|22.701870,55.227998|23.016172,55.222406|23.375945,55.401338|23.698908,55.574679|23.842193,55.524355|23.949552,55.501988|24.046609,55.787162|24.061928,56.010827|24.184407,55.982869|24.220108,55.966095|24.204809,55.837486|24.255799,55.764795|24.403556,55.848670|24.540967,55.775979|24.637573,55.809528|24.759496,55.837486|24.916802,55.820711|24.967504,55.871037|24.987778,55.960503|24.967504,56.061152|24.876227,56.072336|24.886372,55.977278|24.754418,56.066744|24.769651,56.206535|24.835637,56.234493|24.932015,56.351918|24.972573,56.379876|25.256102,57.028506|25.896649,56.732150|26.368532,56.687416|26.488706,56.268043|26.348491,55.943728|26.388570,55.233589|26.413612,54.322151|26.183019,54.350110|26.107726,54.355701|26.027361,54.361293"
let pp = pointsStr.components(separatedBy: "|")
for item in pp {
let coor = item.components(separatedBy: ",")
let lat:Double! = (coor[0] as AnyObject).doubleValue
let lng:Double! = (coor[1] as AnyObject).doubleValue
let coordinate:CLLocationCoordinate2D! = CLLocationCoordinate2D(latitude: lat, longitude: lng)
path.add(coordinate)
}
if(self.isCoordinateInside(coordinate: CLLocationCoordinate2D(latitude: selectedPlace.lat, longitude: selectedPlace.lng)) == true)
{
}
func isCoordinateInside(coordinate: CLLocationCoordinate2D)->Bool{
if (GMSGeometryContainsLocation(coordinate, path, true) == true)
{
print("locationPoint is in polygonPath.")
return true
}
else
{
print("locationPoint is NOT in polygonPath.")
return false
}
}