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