Пример #1
0
    public MeterCoordinate FindMeterCoordinateFromOrigin(MeterCoordinate originM, GeoCoordinate origin, GeoCoordinate point)
    {
        MeterCoordinate result = new MeterCoordinate();

        decimal dlon = point.Longitude - origin.Longitude;
        decimal dlat = point.Latitude - origin.Latitude;

        decimal latitudeCircumference = 40075160 * Convert.ToDecimal(Math.Cos(Convert.ToDouble(ToRad(origin.Latitude))));

        result.X = dlon * latitudeCircumference / 360;
        result.Y = dlat * 40008000 / 360;

        result.X += originM.X;
        result.Y += originM.Y;

        return(result);
    }
Пример #2
0
    /// <summary>
    /// ryals special sauce. not sure if its working or not.
    /// </summary>
    /// <param name="end"></param>
    /// <param name="originMeter"></param>
    /// <param name="originGeo"></param>
    /// <returns></returns>
    private decimal FindLongitude(MeterCoordinate end, MeterCoordinate originMeter, GeoCoordinate originGeo)
    {
        //int earthRadius = 63781370; //meters
        //double complimentAngle = 90 - Math.Abs(originGeo.Latitude);
        //double radius = Math.Sin(complimentAngle) * earthRadius;
        //double circumference = Math.PI * 2 * radius;
        //double deltaY = end.Y - originMeter.Y;
        //return (deltaY / circumference) * 360 + originGeo.Longitude;

        end.X -= originMeter.X;

        decimal latC = 40075160 * (decimal)Math.Cos(Convert.ToDouble(ToRad(originGeo.Latitude)));
        decimal dLon = end.X * (360 / latC);
        decimal pLon = dLon + originGeo.Longitude;

        return(pLon);
    }
    public void Export()
    {
        // init variables
        string              firstLine;       // stores the first line
        string              secondLine;      // stores second line
        StringBuilder       lineBuilder = new StringBuilder();
        int                 lineNum     = 1; // keeps track of the line number
        string              line;
        MeterCoordinate     xy = new MeterCoordinate();
        decimal             z;
        GeoCoordinate       latlon      = new GeoCoordinate();
        MeterCoordinate     originMeter = new MeterCoordinate(Convert.ToDecimal(originPoint.transform.position.x), Convert.ToDecimal(originPoint.transform.position.z));
        CoordinateConverter converter   = new CoordinateConverter();

        // infile/outfile
        System.IO.StreamReader inFile =
            new System.IO.StreamReader(@"SloanTest.waypoints");
        System.IO.StreamWriter outFile = new System.IO.StreamWriter(@"SloanTestOutput.waypoints");


        //Ignoring header
        if ((firstLine = inFile.ReadLine()) == null)
        {
            print("Blank File!!!");
        }

        //Ignoring sealevel?
        if ((secondLine = inFile.ReadLine()) == null)
        {
            print("Blank File!!!");
        }

        outFile.WriteLine(firstLine);
        outFile.WriteLine(secondLine);

        print("Exported:");
        foreach (Waypoint point in points.points)
        {
            outFile.WriteLine(point.export());
            print(point.export());
        }
        inFile.Close();
        outFile.Close();
    }
Пример #4
0
    /// <summary>
    /// the main function to find lat long from a geo coordinate
    /// </summary>
    /// <param name="originGeo"></param>
    /// <param name="originMeter"></param>
    /// <param name="end"></param>
    /// <returns></returns>
    public GeoCoordinate MeterCoordtoGeoCoord(GeoCoordinate originGeo, MeterCoordinate originMeter, MeterCoordinate end)
    {
        /*
         * δ = distance r / Earth radius(both in the same units)
         *
         * lat_P2 = asin(sin lat_O ⋅ cos δ + cos lat_O ⋅ sin δ ⋅ cos θ)
         * lon_P2 = lon_O + atan((sin θ ⋅ sin δ ⋅ cos lat_O) / (cos δ − sin lat_O ⋅ sin lat_P2))
         */
        GeoCoordinate result = new GeoCoordinate();

        result.Latitude  = FindLatitude(end, originMeter, originGeo);
        result.Longitude = FindLongitude(end, originMeter, originGeo);



        Console.WriteLine(result.Latitude.ToString());
        Console.WriteLine(result.Longitude.ToString());
        return(result);
    }
Пример #5
0
    /// <summary>
    /// ryals special sauce. not sure if its working or not
    /// </summary>
    /// <param name="end"></param>
    /// <param name="originMeter"></param>
    /// <param name="originGeo"></param>
    /// <returns></returns>
    private decimal FindLatitude(MeterCoordinate end, MeterCoordinate originMeter, GeoCoordinate originGeo)
    {
        //int earthRadius = 63781370; //meters
        //double complimentAngle = 90 - Math.Abs(originGeo.Longitude);
        //double radius = Math.Sin(complimentAngle) * earthRadius;
        //double circumference = Math.PI * 2 * radius;
        //double deltaX = end.X - originMeter.X;
        //return (deltaX / circumference) * 360 + originGeo.Latitude;

        end.Y -= originMeter.Y;

        Console.WriteLine(Convert.ToString(end.Y));
        decimal dlat = (360 * end.Y) / 40008000;

        Console.WriteLine(Convert.ToString(dlat));

        decimal plat = dlat + originGeo.Latitude;

        return(plat);
    }