Code Example
Childhood is like being drunk, everyone remembers what you did, except you.
This is part of the code to compute for paths and positions:
var routeWeight = 1;
function isDrawAntimeridian(latLngA1: LatLng, latLngA2: LatLng, latLngB1: LatLng, latLngB2: LatLng) {
return Math.abs(latLngA1.lng - latLngB1.lng) >= 180;
var meas1 =
(latLngA2.distanceTo(latLngA1) + latLngB2.distanceTo(latLngB1)) / 1000;
var meas2 = latLngA1.distanceTo(latLngB1) / 1000;
return meas1 < meas2 && isCrossMeridian(latLngA1, latLngB1);
}
function sign(x: any) {
return typeof x === "number" ? (x ? (x < 0 ? -1 : 1) : 0) : NaN;
}
function isCrossMeridian(latLngA: LatLng, latLngB: LatLng) {
return sign(latLngA.lng) * sign(latLngB.lng) < 0;
}
function calculateAntimeridianLat(latLngA: LatLng, latLngB: LatLng) {
if (latLngA.lat > latLngB.lat) {
var temp = latLngA;
latLngA = latLngB;
latLngB = temp;
}
var A = 360 - Math.abs(latLngA.lng - latLngB.lng);
var B = latLngB.lat - latLngA.lat;
var a = Math.abs(180 - Math.abs(latLngA.lng));
return latLngA.lat + (B * a) / A;
}
export function computePaths(latlngs0: LatLng, latlngs1: LatLng, color = 'black') {
var new_lat = calculateAntimeridianLat(latlngs0, latlngs1);
var isWestward = latlngs0.lng > latlngs1.lng;
var new_latlng1 = latLng(new_lat, isWestward ? 180 : -180);
var new_latlng2 = latLng(new_lat, isWestward ? -180 : 180);
if (isDrawAntimeridian(latlngs0, new_latlng1, latlngs1, new_latlng2)) {
var firstpolyline = new Polyline([latlngs0, new_latlng1], {
color: color,
weight: routeWeight,
dashArray: "4 4",
});
var secondpolyline = new Polyline([latlngs1, new_latlng2], {
color: color,
weight: routeWeight,
dashArray: "4 4",
});
var retVal_paths = [new PathObject(latlngs0, new_latlng1),
new PathObject(new_latlng2, latlngs1)];
return { paths: retVal_paths, polylines: [firstpolyline, secondpolyline] };
} else {
var firstpolyline = new Polyline([latlngs0, latlngs1], {
color: color,
weight: routeWeight,
smoothFactor: 1,
dashArray: "4 4",
});
retVal_paths = [new PathObject(latlngs0, latlngs1)]
return { paths: retVal_paths, polylines: [firstpolyline] };
}
}
Last updated