Método para calcular la distancia entre 2 coordenadas en C#.

namespace WebApiClient.App_Code
{
    #region [Bibliotecas de clases]
    using System;
    #endregion

    /// <summary>
    /// Clase que encapsula un conjunto de funciones para calculos de distancia entre coordenadas.
    /// </summary>
    public class Distancia
    {
        #region [Variables y constantes]
        /// <summary>
        /// Variable constante que encapsula el radio de la tierra.
        /// </summary>
        public const int _RADIO_TIERRA = 6371;
        #endregion

        #region [Constructor]
        /// <summary>
        /// Constructor de la clase.
        /// </summary>
        public Distancia() { }
        #endregion

        #region [Método para obtener la distancia en metros entre dos coordenadas]
        /// <summary>
        /// Método para obtener la distancia en metros entre dos coordenadas.
        /// </summary>
        /// <param name="latitud1">Latitud de la primera coordenada.</param>
        /// <param name="longitud1">Longitud de la primera coordenada.</param>
        /// <param name="latitud2">Latitud de la segunda coordenada.</param>
        /// <param name="longitud2">Longitud de la segunda coordenada.</param>
        /// <returns>Distancia en metros.</returns>
        public int ObtenDistanciaEnMetros(double latitud1, double longitud1, double latitud2, double longitud2)
        {
            double _distancia = 0;

            try
            {
                double _latitud = (latitud2 - latitud1) * (Math.PI / 180);
                double _longitud = (longitud2 - longitud1) * (Math.PI / 180);
                double _a = Math.Sin(_latitud / 2) * Math.Sin(_latitud / 2) + Math.Cos(latitud1 * (Math.PI / 180)) * Math.Cos(latitud2 * (Math.PI / 180)) * Math.Sin(_longitud / 2) * Math.Sin(_longitud / 2);
                double _c = 2 * Math.Atan2(Math.Sqrt(_a), Math.Sqrt(1 - _a));

                _distancia = (_RADIO_TIERRA * _c) * 1000;
            }
            catch (Exception)
            {
                _distancia = -1;
            }

            return (int)Math.Round(_distancia, MidpointRounding.AwayFromZero);
        }
        #endregion

        #region [Destructor de la clase]
        /// <summary>
        /// Destructor de la clase.
        /// Invoca al Garbage Collector para liberar el objeto de memoria.
        /// </summary>
        ~Distancia() { GC.Collect(); }
        #endregion
    }
}

 

Concatenar valores de una columna en SQL Server.

begin
	--Tabla temporal que se crea y llena para simular una tabla de la base de datos.
	declare @TablaOrigen table(Id int, Color varchar(10));

	insert into @TablaOrigen(Id,Color) values(1,'Azul');
	insert into @TablaOrigen(Id,Color) values(2,'Purpura');
	insert into @TablaOrigen(Id,Color) values(3,'Negro');
	insert into @TablaOrigen(Id,Color) values(4,'Cafe');
	insert into @TablaOrigen(Id,Color) values(5,'Violeta');
	insert into @TablaOrigen(Id,Color) values(6,'Naranja');
	insert into @TablaOrigen(Id,Color) values(7,'Rojo');
	insert into @TablaOrigen(Id,Color) values(8,'Verde');
	insert into @TablaOrigen(Id,Color) values(9,'Cian');
	insert into @TablaOrigen(Id,Color) values(10,'Amarillo');

	--Variables utilizadas para la concatenación.
	declare @TablaTemporal table(Elemento varchar(10));
	declare @TotalElementos int=0;
	declare @Elemento varchar(10)='';
	declare @Resultado varchar(max)='';
	declare @EsPrimerElemento bit=1;

	--Se inserta en la tabla temporal '@TablaTemporal' todos los elementos de la tabla origen '@TablaOrigen'.
	insert into @TablaTemporal(Elemento) select Color from @TablaOrigen;

	--Se asigna a la variable '@TotalElementos' el número total de registros almacenados en la tabla temporal '@TablaTemoral'.
	set @TotalElementos= (select count(Elemento) from @TablaTemporal);

	--Se recorre la tabla temporal '@TotalElementos' con el fin de ir concatenando cada uno de sus valores en la variable '@Resultado'.
	while @TotalElementos > 0
		begin				
			set @Elemento= (select top 1 Elemento from @TablaTemporal);

			if(@EsPrimerElemento=1)
				begin
					set @Resultado= @Elemento;
					set @EsPrimerElemento=0;		
				end
			else
				begin
					set @Resultado= concat(@Resultado,',',@Elemento);
				end

			delete top(1) from @TablaTemporal;

			set @TotalElementos= @TotalElementos - 1;
		end

		--Se lleva a cabo la selección de la variable '@Resultado' para visualizar el resultado del proceso de la concatenación.
		select @Resultado as 'Resultado';
end

 Resultado: