将Lat / Lon转换为整数

时间:2011-11-07 17:43:56

标签: c# latitude-longitude

我正在使用的服务要求我将lat / lon作为整数传递给地址。目前,我的lat / lon存储为双打:

double lat = 38.898748;
double lon = -77.037684;

我已经用尽了Google-fu,找不到将lat / lon转换为整数表示的方法。任何帮助将不胜感激。

7 个答案:

答案 0 :(得分:7)

您需要知道您正在使用的Geodetic System以及API所期望的内容。例如。 WGS84,NAD83,OSGB36,ED50 ...(示例:Google Earth uses WGS84

如果他们需要一个整数,那么他们可能会使用与Google和其他提供商不同的东西。有可能舍入一个double或其他整数转换是行不通的。您需要大地测量系统信息,然后在两个值之间进行转换。

答案 1 :(得分:6)

有时它很简单,只需乘以100万。

乘以.000001转换回来。

当然这假设您只需要精确到小数的第6位。

答案 2 :(得分:3)

我能看到这种情况的唯一方法就是移动小数点。

int lat = (int)(38.898748 * 1000000.0);
int lon = (int)(-77.037684 * 1000000.0);

答案 3 :(得分:1)

如果您需要以秒为单位的坐标,只需乘以60 * 60

int latitude = (int)Math.Round(lat * 60.0 * 60.0);
int longitude = (int)Math.Round(lon * 60.0 * 60.0);

如果您需要更高分辨率的坐标,例如100秒,则再乘以100。

答案 4 :(得分:1)

我将采取狂野的方式,并猜测你想要将纯度转换为度数:分钟:以单个整数形式的秒数。

以下是将此转换为整数的一种方法,但显然您要确认这是他们使用的格式。

double originalLat = 38.898748,
    TEMPdecimal;

int degrees = (int)originalLat;

TEMPdecimal = (originalLat - degrees) * 60;

int minutes = (int)TEMPdecimal;

TEMPdecimal = (TEMPdecimal - minutes) * 60;

int seconds = (int)TEMPdecimal;

int lat = (degrees * 10000) + (minutes * 100) + seconds;

在这种情况下,返回是385355或38度53分55秒。对不起,如果这看起来有点草率,类型转换可能不是最有效(肯定需要确保它正确舍入,我认为类型转换为int一直在向下舍入)但它会给你经度/纬度。

答案 5 :(得分:0)

答案可能是,

int FactorConversion(double degrees)
{
    return (int) degrees * MagicConversionFactor 
    //You supply this number, a likely candidate is 360 since
    //this converts degrees to seconds 
}

 int BinaryConversion32(float degrees)
 {
     return BitConvetor.ToInt32(BitConvertor.GetBytes(degrees))
 }

long BinaryConversion64(double degrees)
{
    return BitConvetor.ToInt64(BitConvertor.GetBytes(degrees))
}

请注意,double是8字节类型。正如我和其他人之前所说,这完全取决于API的期望。

后两个选项将是无损但奇怪的。

答案 6 :(得分:0)

double_lat = 38.898748;

double_lon = -77.037684;

将小数位置存储为整数的简单方法:

lat = (double_lat + 90) * 1000000;

lon = (double_lon + 180) * 1000000;

lat = 128898748;
lon = 102962316;