WGS84-coordinate encoded as Integers
you can avoid stuffing everything in a one-liner:

private static int mapDoubleToInt(double value, double min, double max)
{
    long intRange = 1L &lt;&lt; 32; // ==((long)int.MaxValue - int.MinValue)
    double inputRange = max - min;
    return (int)(intRange * (value - min) / inputRange + int.MinValue);
}

private static double mapIntToDouble(int value, double min, double max)
{
    long intRange = 1L &lt;&lt; 32; // ==((long)int.MaxValue - int.MinValue)
    double inputRange = max - min;
    return inputRange * ((double)value - int.MinValue) / intRange + min;
} 


After reordering the operations it's now clearer that they are opposites. Especially after extracting the range as variables.