[英]Convert Lat/Lon to Integer
我正在消費的服務要求我將lat / lon作為整數傳遞給地址。 目前,我的lat / lon存儲為雙打:
double lat = 38.898748;
double lon = -77.037684;
我已經用盡了Google-fu,無法找到將lat / lon轉換為整數表示的方法。 任何幫助,將不勝感激。
您需要知道您正在使用的Geodetic System以及API期望的內容。 例如WGS84,NAD83,OSGB36,ED50 ......(例如: Google Earth使用WGS84 )
如果他們需要一個整數,那么他們可能會使用與Google和其他提供商不同的東西。 有可能舍入一個double或其他整數轉換將無效。 您需要大地測量系統信息,然后在兩個值之間進行轉換。
有時它很簡單,只需乘以100萬。
乘以.000001轉換回來。
假設您只需要精確到小數的第6位。
我能看到這種情況的唯一方法就是移動小數點。
int lat = (int)(38.898748 * 1000000.0);
int lon = (int)(-77.037684 * 1000000.0);
如果您需要以秒為單位的坐標,只需乘以60 * 60
:
int latitude = (int)Math.Round(lat * 60.0 * 60.0);
int longitude = (int)Math.Round(lon * 60.0 * 60.0);
如果您需要更高分辨率的坐標,例如100秒,則再乘以100。
我將對此進行瘋狂的猜測並猜測你想要將純度轉換為度數:分鍾:以單個整數形式的秒數。
以下是將此轉換為整數的一種方法,但顯然您要確認這是他們使用的格式。
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一直在向下舍入)但它會給你經度/緯度。
double_lat = 38.898748;
double_lon = -77.037684;
將小數位置存儲為整數的簡單方法:
lat = (double_lat + 90) * 1000000;
lon = (double_lon + 180) * 1000000;
lat = 128898748;
lon = 102962316;
答案可能是,
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的期望。
后兩個選項將是無損但奇怪的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.