我正在使用的服务要求我将lat / lon作为整数传递给地址。目前,我的lat / lon存储为双打:
double lat = 38.898748;
double lon = -77.037684;
我已经用尽了Google-fu,找不到将lat / lon转换为整数表示的方法。任何帮助将不胜感激。
答案 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;