public static Vector2 ToGlobalXY(this GeoLocalizacao geoLocalizacao,
                                         PontoReferencia pontoInicial, PontoReferencia pontoFinal)
        {
            //Calculates x based on cos of average of the latitudes
            var x = EARTH_RADIUS * geoLocalizacao.Longitude
                    * Math.Cos((pontoInicial.Localizacao.Latitude + pontoFinal.Localizacao.Latitude) / 2);

            //Calculates y based on latitude
            var y = EARTH_RADIUS * geoLocalizacao.Latitude.ToSingle();

            return(new Vector2(x.ToSingle(), y));
        }
        public static IRenderer ToRenderer(this IPin pin,
                                           PontoReferencia pontoInicial,
                                           PontoReferencia pontoFinal,
                                           Vector2 pontoInicialGlobal,
                                           Vector2 pontoFinalGlobal,
                                           IEngine2D engine)

        {
            var geoPos = pin.GetGeolocalizacao();
            var pos    = geoPos.ToScreenXY(pontoInicial,
                                           pontoFinal,
                                           pontoInicialGlobal,
                                           pontoFinalGlobal);

            return(new PinRenderer(pos, engine)
            {
                Cor = Color.FromHex("#313639")
            });
        }
        public static Vector2 ToScreenXY(this GeoLocalizacao localizacao,
                                         PontoReferencia pontoInicial, PontoReferencia pontoFinal,
                                         Vector2 pontoInicialGlobal, Vector2 pontoFinalGlobal)
        {
            //Calculate global X and Y for projection point
            var pos = ToGlobalXY(localizacao, pontoInicial, pontoFinal);

            //Calculate the percentage of Global X position in relation to total global width
            var perX = ((pos.X - pontoInicialGlobal.X)
                        / (pontoFinalGlobal.X - pontoInicialGlobal.X));

            //Calculate the percentage of Global Y position in relation to total global height
            var perY = ((pos.Y - pontoInicialGlobal.Y)
                        / (pontoFinalGlobal.Y - pontoInicialGlobal.Y));

            var x = pontoInicial.Referencia.X +
                    (pontoFinal.Referencia.X - pontoInicial.Referencia.X) * perX;

            var y = pontoInicial.Referencia.Y +
                    (pontoFinal.Referencia.Y - pontoInicial.Referencia.Y) * perY;

            return(new Vector2(x, y));
        }