google-maps-drawing-tools
Version:
Unified drawing tools for Google Maps
21 lines • 3.94 kB
JavaScript
const d2r = Math.PI / 180; // degrees to radians
const r2d = 180 / Math.PI; // radians to degrees
const earthsRadius = 3963; // 3963 is the radius of the earth in miles
const metersToMilesMultiplier = 0.000621371;
export default function createCircle({ lat, lng, radius, points = 32, }) {
// radius in miles
radius = radius * metersToMilesMultiplier;
// find the raidus in lat/lon
let rlat = (radius / earthsRadius) * r2d;
let rlng = rlat / Math.cos(lat * d2r);
let path = [];
// one extra here makes sure we connect the
for (let i = 0; i < points + 1; i++) {
let theta = Math.PI * (i / (points / 2));
let ex = lng + rlng * Math.cos(theta); // center a + radius x * cos(theta)
let ey = lat + rlat * Math.sin(theta); // center b + radius y * sin(theta)
path.push(new google.maps.LatLng(ey, ex));
}
return path;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWNpcmNsZS5qcyIsInNvdXJjZVJvb3QiOiIvVXNlcnMvaXJhZGNoZW5rby93b3Jrc3BhY2UvZ29vZ2xlLW1hcHMtZHJhd2luZy10b29scy8iLCJzb3VyY2VzIjpbInV0aWxzL2NyZWF0ZS1jaXJjbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxxQkFBcUI7QUFDaEQsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxxQkFBcUI7QUFDaEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUMsMkNBQTJDO0FBQ3RFLE1BQU0sdUJBQXVCLEdBQUcsV0FBVyxDQUFDO0FBUzVDLE1BQU0sQ0FBQyxPQUFPLHVCQUF1QixFQUNuQyxHQUFHLEVBQ0gsR0FBRyxFQUNILE1BQU0sRUFDTixNQUFNLEdBQUcsRUFBRSxHQUNTO0lBQ3BCLGtCQUFrQjtJQUNsQixNQUFNLEdBQUcsTUFBTSxHQUFHLHVCQUF1QixDQUFDO0lBRTFDLDZCQUE2QjtJQUM3QixJQUFJLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDekMsSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUVkLDJDQUEyQztJQUMzQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNuQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekMsSUFBSSxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsbUNBQW1DO1FBQzFFLElBQUksRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLG1DQUFtQztRQUUxRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDM0M7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBkMnIgPSBNYXRoLlBJIC8gMTgwOyAvLyBkZWdyZWVzIHRvIHJhZGlhbnNcbmNvbnN0IHIyZCA9IDE4MCAvIE1hdGguUEk7IC8vIHJhZGlhbnMgdG8gZGVncmVlc1xuY29uc3QgZWFydGhzUmFkaXVzID0gMzk2MzsgLy8gMzk2MyBpcyB0aGUgcmFkaXVzIG9mIHRoZSBlYXJ0aCBpbiBtaWxlc1xuY29uc3QgbWV0ZXJzVG9NaWxlc011bHRpcGxpZXIgPSAwLjAwMDYyMTM3MTtcblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVDaXJjbGVPcHRpb25zIHtcbiAgbGF0OiBudW1iZXI7XG4gIGxuZzogbnVtYmVyO1xuICByYWRpdXM6IG51bWJlcjsgLy8gbWV0ZXJzXG4gIHBvaW50cz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlQ2lyY2xlKHtcbiAgbGF0LFxuICBsbmcsXG4gIHJhZGl1cyxcbiAgcG9pbnRzID0gMzIsXG59OiBDcmVhdGVDaXJjbGVPcHRpb25zKTogZ29vZ2xlLm1hcHMuTGF0TG5nW10ge1xuICAvLyByYWRpdXMgaW4gbWlsZXNcbiAgcmFkaXVzID0gcmFkaXVzICogbWV0ZXJzVG9NaWxlc011bHRpcGxpZXI7XG5cbiAgLy8gZmluZCB0aGUgcmFpZHVzIGluIGxhdC9sb25cbiAgbGV0IHJsYXQgPSAocmFkaXVzIC8gZWFydGhzUmFkaXVzKSAqIHIyZDtcbiAgbGV0IHJsbmcgPSBybGF0IC8gTWF0aC5jb3MobGF0ICogZDJyKTtcbiAgbGV0IHBhdGggPSBbXTtcblxuICAvLyBvbmUgZXh0cmEgaGVyZSBtYWtlcyBzdXJlIHdlIGNvbm5lY3QgdGhlXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzICsgMTsgaSsrKSB7XG4gICAgbGV0IHRoZXRhID0gTWF0aC5QSSAqIChpIC8gKHBvaW50cyAvIDIpKTtcbiAgICBsZXQgZXggPSBsbmcgKyBybG5nICogTWF0aC5jb3ModGhldGEpOyAvLyBjZW50ZXIgYSArIHJhZGl1cyB4ICogY29zKHRoZXRhKVxuICAgIGxldCBleSA9IGxhdCArIHJsYXQgKiBNYXRoLnNpbih0aGV0YSk7IC8vIGNlbnRlciBiICsgcmFkaXVzIHkgKiBzaW4odGhldGEpXG5cbiAgICBwYXRoLnB1c2gobmV3IGdvb2dsZS5tYXBzLkxhdExuZyhleSwgZXgpKTtcbiAgfVxuXG4gIHJldHVybiBwYXRoO1xufVxuIl19