function geoSquare(){
let center = [0, 0];
let area = 10e3;
function square(d){
const [ lon, lat ] = typeof center === "function" ? center(d) : center;
const sideKm = Math.sqrt(typeof area === "function" ? area(d) : area);
const sideDegLat = (sideKm * 0.5) / 111.1329527778;
const sideDegLon = sideDegLat / Math.cos(lat / 180 * Math.PI);
return {
type: "Feature",
geometry: {
type: "Polygon",
coordinates: [
[
[lon - sideDegLon, lat + sideDegLat],
[lon + sideDegLon, lat + sideDegLat],
[lon + sideDegLon, lat - sideDegLat],
[lon - sideDegLon, lat - sideDegLat],
[lon - sideDegLon, lat + sideDegLat]
]
]
}
}
}
square.center = function(array){
return array ? (center = array, square) : center;
}
square.area = function(number){
return number ? (area = number, square) : area;
}
return square;
}