使用swift在谷歌地图中的当前位置

时间:2016-01-22 21:26:24

标签: ios swift google-maps google-maps-sdk-ios currentlocation

我正在尝试在谷歌地图上显示用户的当前位置,但在下面的情况下,地图甚至不会显示。我该怎么改变来解决这个问题?

var locationManager = CLLocationManager()

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.

    //user location stuff
    locationManager.delegate = self
    locationManager.requestWhenInUseAuthorization()
    locationManager.desiredAccuracy = kCLLocationAccuracyBest
    locationManager.startUpdatingLocation()
}

func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
    print("Error" + error.description)
}

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    let userLocation = locations.last
    let center = CLLocationCoordinate2D(latitude: userLocation!.coordinate.latitude, longitude: userLocation!.coordinate.longitude)

    let camera = GMSCameraPosition.cameraWithLatitude(userLocation!.coordinate.latitude,
        longitude: userLocation!.coordinate.longitude, zoom: 8)
    let mapView = GMSMapView.mapWithFrame(CGRectZero, camera: camera)
    mapView.myLocationEnabled = true
    self.view = mapView

    let marker = GMSMarker()
    marker.position = center
    marker.title = "Current Location"
    marker.snippet = "XXX"
    marker.map = mapView

    locationManager.stopUpdatingLocation()
}

6 个答案:

答案 0 :(得分:3)

你可以试试这个波纹管代码工作正常

import UIKit
import GoogleMaps
import GooglePlaces

class SearchMapsViewController: UIViewController,
     UINavigationBarDelegate, GMSAutocompleteFetcherDelegate, 
     LocateOnTheMap, UISearchBarDelegate, CLLocationManagerDelegate 
{

   @IBOutlet var googleMapsContainerView: UIView!
   var searchResultController: SearchResultsController!
   var resultsArray = [String]()
   var googleMapsView:GMSMapView!
   var gmsFetcher: GMSAutocompleteFetcher!
   var locationManager = CLLocationManager()

override func viewDidAppear(animated: Bool) {        
    locationManager.delegate = self
    locationManager.requestWhenInUseAuthorization()
    locationManager.desiredAccuracy = kCLLocationAccuracyBest
    locationManager.startUpdatingLocation()

    self.googleMapsView = GMSMapView (frame: self.googleMapsContainerView.frame)
    self.googleMapsView.settings.compassButton = true
    self.googleMapsView.myLocationEnabled = true
    self.googleMapsView.settings.myLocationButton = true
    self.view.addSubview(self.googleMapsView)
    searchResultController = SearchResultsController()
    searchResultController.delegate = self
    gmsFetcher = GMSAutocompleteFetcher()
    gmsFetcher.delegate = self
}
func locationManager(manager: CLLocationManager, didFailWithError error: NSError) 
{
    print("Error" + error.description)
}

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) 
{
    let userLocation = locations.last
    let center = CLLocationCoordinate2D(latitude: userLocation!.coordinate.latitude, longitude: userLocation!.coordinate.longitude)

    let camera = GMSCameraPosition.cameraWithLatitude(userLocation!.coordinate.latitude, longitude: userLocation!.coordinate.longitude, zoom: 15);
    self.googleMapsView.camera = camera
    self.googleMapsView.myLocationEnabled = true

    let marker = GMSMarker(position: center)

    print("Latitude :- \(userLocation!.coordinate.latitude)")
    print("Longitude :-\(userLocation!.coordinate.longitude)")
    marker.map = self.googleMapsView

    marker.title = "Current Location"
    locationManager.stopUpdatingLocation()
}

答案 1 :(得分:1)

在infoPlist上进行requier设置,然后尝试这个

@IBOutlet weak var your "name of view which show map": GMSMapView!

override func viewDidLoad(){
        super.viewDidLoad()

  placesClient = GMSPlacesClient.shared()
  locationManager.requestAlwaysAuthorization()
     if CLLocationManager.locationServicesEnabled(){     
        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyKilometer
        locationManager.distanceFilter = 500
        locationManager.requestWhenInUseAuthorization()
        locationManager.requestAlwaysAuthorization()
        locationManager.startUpdatingLocation()  
  }   
    mapView.settings.myLocationButton = true
    mapView.settings.zoomGestures = true
    mapView.animate(toViewingAngle: 45)
    mapView.delegate = self  }

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
     let newLocation = locations.last // find your device location
     mapView.camera = GMSCameraPosition.camera(withTarget: newLocation!.coordinate, zoom: 14.0) // show your device location on map
     mapView.settings.myLocationButton = true // show current location button
     var lat = (newLocation?.coordinate.latitude)! // get current location latitude
     var long = (newLocation?.coordinate.longitude)! //get current location longitude

}

答案 2 :(得分:0)

问题是您将mapView的框架设置为 CGRectZero 。这会导致地图的高度为零,零宽度,难怪它不显示!

尝试将其设置为 CGRectMake(0,0,200,200),例如,这将为您提供屏幕左上角的地图,大小为200 x 200。

之前我从未使用过Swift,因此CGRectMake()的语法可能略有不同

答案 3 :(得分:0)

您的viewDidLoad函数似乎没有创建地图。您可能想尝试移动它,看看会发生什么。

答案 4 :(得分:0)

将适当的属性添加到List<jd_records> result = jddt.Rows .GroupBy(jd => jd.invoiceNo) .Select(jd => new jd_records { invoiceNo = jd.invoiceNo, totalTax = jd.Sum(d => d.tax) }).ToList(); 中。

您应该确保信息属性列表中包含info.plistlocationalwaysusagedescription的NS属性。这允许询问当前位置的权限。

答案 5 :(得分:0)

 $(document).ready(function () {


    var rowcount, addBtn, tableBody;

    addBtn = $('#addNew');
    rowcount = $('#autocomplete_table tbody tr').length + 1;
    tableBody = $('#autocomplete_table');
    addBtn.click(function () {


        $.ajax({
            method: "get",
            url: "book/getDepartment/" ,
            success: function (data) {
            console.log(data)

                //rowcount=rowcount+1;
                console.log(rowcount);
                html = '<tr id="row_' + rowcount + '">';
                html += '<td><button type="button" id="delete_' + rowcount + '"  class=" btn btn-danger btn-sm remove delete_row"><i class="glyphicon glyphicon-remove-sign"></i></button></td>';
                html += '<td><input type="text" data-field-name="book_name" name="book_name[]" id="book_name_' + rowcount + '" class=" form-control input-sm "></td>';

                html += '<td><input type="text" data-field-name="edition" name="edition[]" id="edition_' + rowcount + '" class="form-control input-sm "></td>';
                html += '<td><input type="text" required data-field-name="number" name="number[]" id="number_' + rowcount + '" class="form-control input-sm   number"></td>';

                html += '<td><input type="text" data-field-name="by_price" name="by_price[]" id="by_price_' + rowcount + '" class="form-control input-sm  by_price"></td>';
                html += '<td><input type="text" data-field-name="sell_price" name="sell_price[]" id="sell_price_' + rowcount + '" class="form-control input-sm  sell_price"></td>';
                html += '<td><input type="text" data-field-name="total_payment" name="total_payment[]" id="total_payment_' + rowcount + '" class="form-control input-sm  total_payment"></td>';
                html += '<td><select  data-field-name="department" name="department[]" id="department_' + rowcount + '" class=" form-control input-sm department">';
                html += '<option> انتخاب کنید...</option>';
                $.each(data, function (i, item) {
                    html += '<option value="' + item.department_id + '">' + item.department_name + '</option>';

                });
                html += '</select></td>';
                html += '</tr>';
                rowcount++;
                tableBody.append(html);


            },
            error: function () {

            }
        })
    })


    function delete_Row() {


        var rowNo;
        id = $(this).attr('id');
        //console.log(id);
        id_arr = id.split("_");
        // console.log(id_arr);
        rowNo = id_arr[id_arr.length - 1];
        if (rowNo > 1) {
            $('#row_' + rowNo).remove();

        } else {
            alert("شما نمی توانداین سطر را جذف کندید");
        }

        //console.log($(this).parent());
        // $(this).parent().parent().remove();

    }


    function registerEvent() {

        $(document).on('click', '.delete_row', delete_Row);


    }

    registerEvent();


});

导入谷歌地图 导入 GooglePlaces 导入核心位置

类 MapsViewController:UIViewController、CLLocationManagerDelegate、GMSMapViewDelegate {

import UIKit

}