在Google地图上获取当前位置

时间:2012-12-08 18:38:30

标签: google-maps google-maps-api-3

当我想获得当前位置时,我遇到了一些麻烦。

这是我第一次使用这个GM API,还有很多我不理解的东西。

这是我的代码,我想要

var geocoder = new google.maps.Geocoder();

function initialize() {
  var latLng = new google.maps.LatLng(-7.7801502, 110.3846387);
  var map = new google.maps.Map(document.getElementById('mapCanvas'), {
    zoom: 15,
    center: latLng,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  });

  var marker = new google.maps.Marker({
    position: latLng,
    title: 'Ambarrukmo Plaza Yogyakarta',
    map: map,
    draggable: true
  });
}

问题是,我想根据用户的当前位置自动更改-7.7801502和110.3846387值。我可以这样做吗?

先前感谢您的帮助和解释。

另一个问题: - >如果我要根据嵌入GPS的设备更改这些值会怎样?

4 个答案:

答案 0 :(得分:33)

您无法通过Google地图获取当前用户的位置信息。但是,如果您使用Google Loader获取Google地图,则可以使用google.loader.CurrentLocation获取基于IP的位置。

另一种方法是使用HTML5 GeoLocation API

function getLocation() {
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(showPosition);
  } else {
    alert("Geolocation is not supported by this browser.");
  }
}
function showPosition(position) {
  var lat = position.coords.latitude;
  var lng = position.coords.longitude;
  map.setCenter(new google.maps.LatLng(lat, lng));
}

答案 1 :(得分:7)

对于未来寻求解决方案的人来说,Google现在在Google地图页面上有一个地理位置示例> https://developers.google.com/maps/documentation/javascript/examples/map-geolocation

答案 2 :(得分:2)

如果你想留在谷歌地图API的世界,并假设你有可以使用的地图变量,

var map = new google.maps.Map(document.getElementById("map-canvas"),
        mapOptions);

var myLat = map.center.k;
var myLng = map.center.B;

或者你可以使用,

alert("Lat="+map.center.k);
alert("Lng="+map.center.B);

答案 3 :(得分:0)

import UIKit
import GoogleMaps
import GooglePlaces
import CoreLocation

class ViewController: UIViewController,CLLocationManagerDelegate,GMSMapViewDelegate {

@IBOutlet weak var currentlocationlbl: UILabel!


var mapView:GMSMapView!

var locationManager:CLLocationManager! = CLLocationManager.init()

var geoCoder:GMSGeocoder!

var marker:GMSMarker!

var initialcameraposition:GMSCameraPosition!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    self.mapView = GMSMapView()
    self.geoCoder = GMSGeocoder()
    self.marker = GMSMarker()
    self.initialcameraposition = GMSCameraPosition()

    // Create gms map view------------->
    mapView.frame = CGRect(x: 0, y: 150, width: 414, height: 667)
    mapView.delegate = self
    mapView.isMyLocationEnabled = true
    mapView.isBuildingsEnabled = false
    mapView.isTrafficEnabled = false
    self.view.addSubview(mapView)

    // create cureent location label---------->

    self.currentlocationlbl.lineBreakMode = NSLineBreakMode.byWordWrapping
    self.currentlocationlbl.numberOfLines = 3
    self.currentlocationlbl.text = "Fetching address.........!!!!!"

    locationManager.delegate = self
    locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
    if locationManager.responds(to: #selector(CLLocationManager.requestAlwaysAuthorization))
    {
        self.locationManager.requestAlwaysAuthorization()
    }
    self.locationManager.startUpdatingLocation()

    if #available(iOS 9, *)
    {
    self.locationManager.allowsBackgroundLocationUpdates = true
    }
    else
    {
        //fallback earlier version
    }
    self.locationManager.startUpdatingLocation()


    self.marker.title = "Current Location"
    self.marker.map = self.mapView


    // Gps button add mapview

    let gpbtn:UIButton! = UIButton.init()
    gpbtn.frame = CGRect(x: 374, y: 500, width: 40, height: 40)
    gpbtn.addTarget(self, action: #selector(gpsAction), for: .touchUpInside)
    gpbtn.setImage(UIImage(named:"gps.jpg"), for: .normal)
    self.mapView.addSubview(gpbtn)
    }

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
{
    var location123 = CLLocation()

    location123 = locations[0]

    let coordinate:CLLocationCoordinate2D! = CLLocationCoordinate2DMake(location123.coordinate.latitude, location123.coordinate.longitude)

    let camera = GMSCameraPosition.camera(withTarget: coordinate, zoom: 16.0)

    self.mapView.camera = camera
    self.initialcameraposition = camera
    self.marker.position = coordinate
    self.locationManager.stopUpdatingLocation()

}


func mapView(_ mapView: GMSMapView, idleAt position: GMSCameraPosition)
{
    self.currentAddres(position.target)
}

func currentAddres(_ coordinate:CLLocationCoordinate2D) -> Void
{
    geoCoder.reverseGeocodeCoordinate(coordinate) { (response, error) in

        if error == nil
        {
            if response != nil
            {

                let address:GMSAddress! = response!.firstResult()

                if address != nil
                {
                   let addressArray:NSArray! = address.lines! as NSArray

                    if addressArray.count > 1
                    {
                        var convertAddress:AnyObject! = addressArray.object(at: 0) as AnyObject!
                        let space = ","
                        let convertAddress1:AnyObject! = addressArray.object(at: 1) as AnyObject!
                        let country:AnyObject! = address.country as AnyObject!

                        convertAddress = (((convertAddress.appending(space) + (convertAddress1 as! String)) + space) + (country as! String)) as AnyObject

                        self.currentlocationlbl.text = "\(convertAddress!)".appending(".")
                    }
                    else
                    {
                        self.currentlocationlbl.text = "Fetching current location failure!!!!"
                    }

                }


            }
        }
    }
}

...