8
votes

Utilisation de Google Street View avec un marqueur, comment pointez-vous le POV sur un marqueur?

J'ai une simple vue sur la rue qui travaille pour me montrer une vue sur la rue donnée une adresse: xxx

Comme vous pouvez le constater, j'ajoute un marqueur pour l'adresse sur la vue sur la rue. Ma question est que la vue de la rue est de pointe vers le nord et le marqueur est au sud. Pour une adresse non spécifique, comment puis-je désigner que la vue de rue doit pointer sur le marqueur pour l'adresse au lieu de pointer le nord par défaut?


0 commentaires

3 Réponses :


3
votes

Consultez Cet exemple . Même si c'est pour v2, vous pouvez réutiliser le code. Fondamentalement, vous devrez appeler ComputerAngle (MarkerLatlng, StreetviewPanoTlng) et définir la berce de Pano de la rue à la valeur renvoyée.

function computeAngle(endLatLng, startLatLng) {
  var DEGREE_PER_RADIAN = 57.2957795;
  var RADIAN_PER_DEGREE = 0.017453;

  var dlat = endLatLng.lat() - startLatLng.lat();
  var dlng = endLatLng.lng() - startLatLng.lng();
  // We multiply dlng with cos(endLat), since the two points are very closeby,
  // so we assume their cos values are approximately equal.
  var yaw = Math.atan2(dlng * Math.cos(endLatLng.lat() * RADIAN_PER_DEGREE), dlat)
         * DEGREE_PER_RADIAN;
  return wrapAngle(yaw);
}

function wrapAngle(angle) {
  if (angle >= 360) {
    angle -= 360;
  } else if (angle < 0) {
    angle += 360;
  }
  return angle;
 }


2 commentaires

Avoir le même problème ici. Cette réponse fonctionne dans l'exemple lié, mais ne résout pas le problème de l'OP. Le marqueur et le panorama sont définis sur la même position ( résultats [0] .geometry.location ), donc ComputerANGle retourne toujours 0 . Pourtant, sur le panorama réel, le marqueur est affiché pas exactement où la caméra est (qui est au milieu de la route), mais sur un côté de la route, contre un bâtiment réel.


Cela a également été demandé ici: groups.google.com/group/google-maps-js-api-v3/browse_thread/ ... avec une réponse pointant vers un exemple de travail à: GEOAPIS.Appot.com/agdnzw9hcglzchmleGTFEGFTCGXLQ29KZRJRIQIM



4
votes

La raison en est que la vue de la rue est, par défaut, la direction était confrontée lorsque l'image a été tournée (aller). Vous devez obtenir l'emplacement du camion et l'emplacement de la maison et calculer une "rubrique" du premier emplacement à la seconde, puis définissez votre emplacement de la rue sur celle du camion avec l'en-tête que vous venez de calculer : xxx

Une autre astuce / piège à l'aide de la vue sur la rue est que vous devez obtenir la vue de rue la plus proche de votre emplacement d'adresse en appelant à plusieurs reprises getpanoramabylocation avec un augmentation de la distance jusqu'à ce que vous soyez réussi ou atteignez une distance maximale. Je résous cela en utilisant ce code: xxx


0 commentaires

2
votes

Exemple simple basé sur votre code:

  1. Obtenez l'emplacement à regarder (en utilisant le géocodeur) li>
  2. Obtenez l'emplacement du Streetviewpanorama (en utilisant la goulotte ( ) Méthode Une fois son statut modifié, une alternative serait d'utiliser les résultats de la méthode d'obtention (). Li>
  3. Utilisez la méthode de calumheading de la Bibliothèque de géométrie pour calculer la position de la route de la caméra à l'adresse. li>
  4. définissez ce titre à l'aide de la méthode SETPOV (). LI>
  5. Délai de sorte que le marqueur passe au bon endroit (enlever cela, le marqueur dans le coin supérieur gauche). Pas nécessaire si pas d'utilisation des marqueurs. Li> ol> xxx pré>

    Fiddle de travail P>

    Code de travail Snippet: P>

    P>

    <script src="http://maps.google.com/maps/api/js?libraries=geometry&key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk"></script>
    <input id="address" type="text" value="344 Laguna Dr, Milpitas, CA  95035" />
    <input id="geoBtn" type="button" value="Go" />
    <div id="map_canvas"></div>


4 commentaires

Merci, cela a principalement travaillé pour moi, sauf les deux arguments à géométry.sphérical.computeheading besoin d'être des instances de letlng . mystreetview.getlocation (). Latlng renvoie un Latlng instance, mais vous devez également créer une nouvelle instance à partir de votre emplacement, nouveau Google.maps.latlng (résultats [0] .geométrie.Location) .


résultats [0] .GEOMETRYR.LOCATION est déjà déjà un Google.maps.Latlng objet


Oui, vous avez raison, si vous utilisez la bibliothèque de Geocoder pour obtenir l'emplacement, il renvoie un Letlng. Je frappais directement le point d'extrémité de l'API de géocode lorsque j'ai écrit ce commentaire, mais j'ai passé depuis l'utilisation du géocodeur.


La réponse utilise la bibliothèque Geocoder et non le service Web.