簡體   English   中英

將Lat / Lon轉換為整數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM