Mehr

Leafletjs erhalten die Latlng-Mittelposition der Polylinie

Leafletjs erhalten die Latlng-Mittelposition der Polylinie


Nach dem Zeichnen einer Polylinie möchte ich aus der Mitte dieser Linie einen Kreis zeichnen, dessen Radius die gesamte Linie umfasst.

Für Polylinien mit mehr als 2 Punkten kann ich den Mittelpunkt grob so erhalten:

// Hole den mittleren LatLng auf der Polylinie var streetLatLngs = layer.getLatLngs(); var numPoints = streetLatLngs.length; var MiddleIndex = Math.round(numPoints / 2); var centerPoint = streetLatLngs[middleIndex]; var circle = L.circle(centerPoint, 100); Kreis.addTo(Karte);

Was produziert:

Wie Sie jedoch sehen können, wenn es nur 2 Punkte gibt, kann ich die mittlere Latlng nicht berechnen und ich kann nicht garantieren, dass der MiddleIndex tatsächlich der Mittelpunkt ist.

Sobald ich das habe, kann ich den Radius erhalten mit:

Math.round(streetLatLngs[0].distanceTo(streetLatLngs[numPoints - 1]) / 2);

was korrekt den Kreisradius erzeugt:


Berechnen Sie den Begrenzungsrahmen der Linie (mitgetBounds()in der Broschüre), setzen Sie einen Kreis mit dem Mittelpunkt in die Mitte des Begrenzungsrahmens und wählen Sie den Radius als halbe Breite oder Höhe des Begrenzungsrahmens aus, je nachdem, welcher Wert größer ist.


Um mathematisch streng zu sein, wird der Mittelpunkt der Polylinie nicht im Durchschnitt der LatLng-Koordinaten des Start- und Endpunkts platziert (wie in den anderen Antworten vorgeschlagen oder verwendetgetCenter()Methode).

Polylinie in Leaflet zeichnet eine gerade Linie über eine Mercator-Projektion, sodass Breitengrade verformt werden. Wenn Sie in kleinem Maßstab arbeiten, wie im Beispiel in diesem Beitrag, werden die Unterschiede nicht erheblich sein, aber wenn Ihre Polylinie von Argentinien nach Russland verläuft, können Sie sehen, dass der Mittelpunkt (mit LatLng-Koordinaten, dh (lat_1/2+lat_2/ 2, lng_1/2+lng_2/2)) liegt nicht auf der Polylinie.

Wenn Sie den Breiten- und Längengrad des Punkts, der genau in der Mitte Ihrer Polylinie liegt, genau ermitteln möchten, müssen Sie die Gleichungen berücksichtigen, die die Mercator-Projektion beschreiben. Die folgenden Zeilen sollten die Aufgabe erfüllen:

sei srcLatRad = srcLat * (Math.PI / 180); sei dstLatRad = dstLat * (Math.PI / 180); let MiddleLatRad = Math.atan(Math.sinh(Math.log(Math.sqrt( (Math.tan(dstLatRad)+1/Math.cos(dstLatRad))*(Math.tan(srcLatRad)+1/Math.cos (srcLatRad)))))); let middleLat = middleLatRad * (180 / Math.PI) let middleLng = (srcLng + dstLng) / 2;

12. Februar 2018 - Live-Standort. var map var mark var initialize = function() < map = new google. Karten. Map(document. getElementById('map-canvas'), <>,zoom:12>) mark = neues google. Karten. Marker(<>, Karte:Karte>) > Fenster. initialisieren = initialisieren

28.07.2019 - So implementieren Sie Kartenmarkierungen mit der JavaScript Google Maps API und PubNub für das Web Um mit der Funktionalität zu beginnen, platzieren wir eine einzelne Kartenmarkierung auf unserer Karte und definieren einen Radius (in Grad lat/lng). .


24. September 2019 - Eine einfache Anleitung zur Verwendung des Geolocator-Plugins in Flutter, um den aktuellen Breitengrad zu erhalten. Anschließend müssen wir Berechtigungen sowohl für Android als auch für iOS hinzufügen, indem Sie sie bearbeiten. if (_currentPosition != null) Text( "LAT: $<_currentPosition.latitude>, LNG: $<_currentPosition.longitude>"), FlatButton( child: Text("Get location"),

14. Juni 2011 - Safari bittet den Benutzer um Erlaubnis, seine Geolocation-Informationseinstellungen abzurufen, informiert die Anwendung darüber, wie nützlich der zurückgegebene Breiten-/Längengrad-Wert tatsächlich ist. 2) In Mobile (Android, Firefox, GPS war an) Zeitüberschreitungsfehler.


Schau das Video: Leaflet-Layer dan Kontrol Layer