簡體   English   中英

從GPS坐標獲取區域

[英]Getting area from GPS coordinates

因此,我有一個方法可以返回由其點定義的形狀區域(按CCW或CW順序,這並不重要)。 我用一些形狀對其進行了測試,它似乎可以正常工作。

問題是,我想將此方法與GPS坐標一起使用,並且我想以m²或km²為單位返回結果,但是絕對不會發生這種情況。 實際上,我什至不知道將這種方法與那種坐標一起使用時的結果是哪個單位。

所以問題是,如何將我得到的結果轉換為m²或km²? 我嘗試了一些方法,但是它不起作用或不正確。

這是我的方法,如果您要檢查:

public static double getArea(List<Vector2D> points) {

    double firstSum = 0, secondSum = 0;

    for (int i = 0 ; i < points.size()-1 ; i++) {
        firstSum += points.get(i).x * points.get(i+1).y;
        secondSum += points.get(i).y * points.get(i+1).x;
    }
    firstSum += points.get( points.size()-1 ).x * points.get(0).y;
    secondSum += points.get( points.size()-1 ).y * points.get(0).x;

    return Math.abs((firstSum-secondSum)/2);

}

Vector2D是我用於點的類,其中x為緯度, y為經度)

問題在於您沒有考慮地球的(近似)球形性質。 首先,您需要考慮地球的半徑-在較小(或較大)的行星上可以具有相同的緯度和經度列表,但是半徑會有所不同,因此面積也將有所不同。

您可以在此問題中使用該方法。 將其轉換為Java很簡單:

public static double CalculatePolygonArea(List<Vector2D> coordinates)
{
    double area = 0;

    if (coordinates.size() > 2)
    {
        for (int i = 0; i < coordinates.size()-1; i++)
        {
            Vector2D p1, p2;
            p1 = coordinates.get(i);
            p2 = coordinates.get(i + 1);
            area += Math.toRadians(p2.x - p1.x) * (2 + Math.sin(Math.toRadians(p1.y))
               + Math.sin(Math.toRadians(p2.y)));

        }
        area = area * R * R / 2;
    }

    return Math.abs(area);
}

(假設Vector2D.x是經度, Vector2D.y是緯度)。

R是地球的半徑。 在您要面積結果使用的單位中使用一個值(例如,6_371_000米為平方米,6_371 km為平方公里,3_959英里為平方英里...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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