2012-12-08 22 views
18

Ho qualche problema quando voglio ottenere la posizione corrente.Ottieni la posizione attuale su Google Map

Questa è la mia prima volta che uso questa API GM e ci sono così tante cose che non capisco.

Ecco il mio codice, e voglio

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 
    }); 
} 

Il problema è, voglio cambiare -7,7801502 e 110,3846,387 mila valore basato automaticamente in posizione corrente dell'utente. Posso farlo?

Grazie per l'aiuto e la spiegazione.

Un'altra domanda: -> Cosa succede se cambierò quei valori in base a un dispositivo incorporato con GPS?

risposta

27

Non è possibile ottenere la posizione dell'utente corrente con Google Maps. Tuttavia, se ricevi Google Maps con Google Loader, puoi utilizzare lo google.loader.CurrentLocation per ottenere una posizione basata su IP.

Un altro modo è utilizzare 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)); 
} 
+0

Per la maggior parte dei browser protocollo sicuro HTTPS è ora richiesto per l'API HTML5 GeoLocation – ZimSystem

1

Se si vuole rimanere nel mondo di Google Maps API, e ammesso che abbiate la variabile mappa è possibile utilizzare,

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

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

o si potrebbe usare,

alert("Lat="+map.center.k); 
alert("Lng="+map.center.B); 
-1
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!!!!" 
        } 

       } 


      } 
     } 
    } 
} 

...

+0

Anche se questo frammento di codice potrebbe risolvere la questione, [tra cui una spiegazione] (http://meta.stackexchange.com/ domande/114762/spiegazione-interamente-risposte basate su codice) aiuta davvero a migliorare la qualità del tuo post. Ricorda che stai rispondendo alla domanda per i lettori in futuro, e queste persone potrebbero non conoscere le ragioni del tuo suggerimento sul codice. – Isma

Problemi correlati