2016-06-16 3 views
0

ich dies tun und es funktioniert reizend:Radius um einen Punkt nicht zentrieren, wenn Schwimmer

  var radiusMi = parseFloat(obj[8]); 
      if (typeof radiusMi === 'undefined' || isNaN(radiusMi) || radiusMi == '') { 
       radiusMi = 2; 
      } 
      var radiusMeters = radiusMi * 1609.344; 
      var currentShape = new google.maps.Circle({ 
       map: map, 
       radius: radiusMeters, 
       strokeWeight: 0, 
       fillColor: '#eb278d', 
       fillOpacity: 0.25, 
       center: circleLatLng 
      }); 

Das Problem kommt, wenn die radiusMi ein Schwimmer oder unter 1 Meile, wird es aus der Mitte. Siehe Bild unten, um zu sehen, was ich meine (radiusMi wird auf 0,5 hier):

http://giodev.com/map-thing.png

Das kleine Haus-Symbol in der richtigen Stelle ist, aber es ist nicht der Mittelpunkt des Kreises, was soll ich tun falsch?

+2

Versuchen Sie, den Wert von circleLatLng zu überprüfen. Das kann anders sein, und wenn Sie Rundungsfehler haben, könnte es um ein paar Prozentpunkte abweichen. – Tschallacka

+1

@MichaelDibbets Ich bin ein Idiot. Du hattest Recht. Einer der Jungs, mit denen ich arbeite, hatte etwas Code, der mit 'circleLatLng' verkehrt. Danke für die Hilfe! Ich weiß nicht, wie ich es verpasst habe. Bitte posten Sie als Antwort, damit ich Ihnen den Kredit geben kann. – user2287474

+0

Zu wissen, wie Sie den Wert von CircleLatLng einstellen, würde wahrscheinlich sehr hilfreich sein. – Loufylouf

Antwort

1

Längen und Längen sind sehr genaue Gleitkommazahlen. Wenn Sie Berechnungen mit diesen Zahlen durchführen, können Rundungsfehler aufgrund von Aufrufen zu Runden, Floor, Ceil oder durch einfaches Senden an den Server und Abrufen auftreten.

Viele Dinge können dazu führen, dass die Genauigkeit beispielsweise von 8 Ziffern hinter dem Punkt zu 6 Ziffern hinter dem Punkt wechselt, was je nach Genauigkeitsverlust zu einer Differenz von einigen Zehn Metern oder sogar Hunderten von Metern führt .

Ich schlage vor, dass Sie alle Stellen überprüfen, an denen Ihre circleLatLng im Code verwendet wird, bevor Sie hier verwendet werden. weil es im Spiel Rundungsfehler geben könnte.

Stellen Sie sicher, dass die circleLatLng keine Rundungsfehler enthält, die die Kreismitte von ihrem ursprünglichen Platz entfernen könnten. Am besten wäre es am Anfang Ihres Codes, eine Kopie davon für die explizite Verwendung in diesem Teil des Codes zu erstellen und eine andere Kopie bereit zu haben, die für beliebige Berechnungen geeignet ist.