why is this formula for a circle giving me an ellipsoid in Javascript but a circle in Python?
Question: I adapted the following code for python found on this
[page](http://stackoverflow.com/a/15890673/2075859): for a Javascript
equivalent.

    
    
    import math
    
    # inputs
    radius = 1000.0 # m - the following code is an approximation that stays reasonably accurate for distances < 100km
    centerLat = 30.0 # latitude of circle center, decimal degrees
    centerLon = -100.0 # Longitude of circle center, decimal degrees
    
    # parameters
    N = 10 # number of discrete sample points to be generated along the circle
    
    # generate points
    circlePoints = []
    for k in xrange(N):
        # compute
        angle = math.pi*2*k/N
        dx = radius*math.cos(angle)
        dy = radius*math.sin(angle)
        point = {}
        point['lat']=centerLat + (180/math.pi)*(dy/6378137)
        point['lon']=centerLon + (180/math.pi)*(dx/6378137)/math.cos(centerLat*math.pi/180)
        # add to list
        circlePoints.append(point)
    
    print circlePoints
    

The distance between these points is constant, as it should be.

My JS version is, as far as I know, equivalent:

    
    
      var nodesCount = 8;
      var coords = [];
    
      for (var i = 0; i <= nodesCount; i++) {
        var radius = 1000;
        var angle = Math.PI*2*i/nodesCount;
        var dx = radius*Math.cos(angle);
        var dy = radius*Math.sin(angle);
    
        coords.push([(rootLongitude + (180 / Math.PI) * (dx / EARTH_RADIUS) / Math.cos(rootLatitude * Math.PI / 180)),(rootLatitude + (180 / Math.PI) * (dy / EARTH_RADIUS))]);
      }
    

But when I output this, the coordinates are not equidistant from the center.

This is enormously frustrating -- I've been trying to debug this for a day.
Can anyone see what's making the JS code fail?


Answer: You somehow got lat/lon reversed.

    
    
    var linkDistance = 10; //$('#linkDistance').val();
    var nodesCount = 8;
    var bandwidth = "10 GB/s";
    var centerLat = 35.088878;
    var centerLon = -106.65262;
    var EARTH_RADIUS = 6378137;
    
    var mymap = L.map('mapid').setView([centerLat, centerLon], 11);
    
    L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token=pk.eyJ1IjoibWFwYm94IiwiYSI6ImNpandmbXliNDBjZWd2M2x6bDk3c2ZtOTkifQ._QA7i5Mpkd_m30IGElHziw', {
      maxZoom: 18,
      attribution: 'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, ' +
        '<a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, ' +
        'Imagery © <a href="http://mapbox.com">Mapbox</a>',
      id: 'mapbox.streets'
    }).addTo(mymap);
    
    
    function drawNext(centerLat, centerLon) {
      var coords = [];
    
      for (var i = 0; i < nodesCount; i++) {
        var radius = linkDistance * 1000;
        var angle = Math.PI * 2 * i / nodesCount;
        var dx = radius * Math.cos(angle);
        var dy = radius * Math.sin(angle);
    
        var lat = centerLon + (180 / Math.PI) * (dy / 6378137);
        var lon = centerLat + (180 / Math.PI) * (dx / 6378137) / Math.cos(centerLon * Math.PI / 180);
    
        coords.push([lat, lon]);
      }
    
      for (var i = 0; i < coords.length; i++) {
        new L.Circle(coords[i], 500, {
          color: 'black',
          fillColor: '#f03',
          fillOpacity: 0.1
        }).addTo(mymap);
        console.log("added circle to: " + coords[i]);
      }
    
    }
    
    drawNext(centerLon, centerLat);
    
    
    var popup = L.popup();
    
    function onMapClick(e) {
      popup
        .setLatLng(e.latlng)
        .setContent("You clicked the map at " + e.latlng.toString())
        .openOn(mymap);
    }
    
    mymap.on('click', onMapClick);
    
    
    #mapid {
      height: 500px;
    }
    
    
    <script src="https://npmcdn.com/leaflet@1.0.0-rc.2/dist/leaflet-src.js"></script>
    <link href="https://npmcdn.com/leaflet@1.0.0-rc.2/dist/leaflet.css" rel="stylesheet"/>
    <div id="mapid"></div>

