app/assets/javascripts/map_marker.js
window.map_marker = function (map, options) {
let marker;
if (options == null) {
options = {};
}
const pos = new google.maps.LatLng(options.lat, options.lng);
if (options.radius > 0) {
marker = new google.maps.Circle({
map,
strokeColor: "#FF0000",
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: "#FF0000",
fillOpacity: 0.35,
center: pos,
radius: options.radius,
});
return marker;
} else if (options.course) {
const p1 = new LatLon(pos.lat(), pos.lng());
const speed = options.speed != null ? options.speed : 1;
const p2 = p1.destinationPoint(options.course, Math.max(0.2, speed) * 0.1);
const lineCoordinates = [pos, new google.maps.LatLng(p2.lat(), p2.lon())];
const lineSymbol = { path: google.maps.SymbolPath.FORWARD_CLOSED_ARROW };
const arrow = new google.maps.Polyline({
map,
path: lineCoordinates,
icons: [
{
icon: lineSymbol,
offset: "100%",
},
],
});
return arrow;
} else {
marker = new google.maps.Marker({
map,
position: pos,
title: "Recorded Location",
});
return marker;
}
};