2015-06-16 67 views
2

我正在使用Twitter4J從他/她的個人資料中檢索用戶的位置。我有一組形成使用此調用多邊形範圍(通常爲4個或更多座標)的地理座標:使用Java查找座標集中心

// Status tweet 
Place place = tweet.getPlace(); 
GeoLocation[][] box = place.getBoundingBoxCoordinates(); 

有沒有一種方法來計算中心(或接近中心,或者至少一個點包含)這個地區/多邊形/邊界?有沒有用於此的Java API?

是否有一個Java相當於從這個post採取這段JavaScript代碼:

var bounds = new google.maps.LatLngBounds(); 
bounds.extend(results[0].geometry.location); 
var center = bounds.getCenter(); 
+0

你能否請教你的輸入是什麼樣子,它是如何存儲的,等等? –

回答

5

的簡單方法是:

centerLatitude = (min(latitude) + max(latitude))/2 
centerLongitude = (min(longitude) + max(longitude))/2 
2

擴展阪的回答(這是邊界框的中心)您也可以迭代所有座標並計算經度和緯度的平均值。優點是異常值不會像邊界框一樣移動中心。

如果異常值不是問題,另一種方法是首先計算convex hull,然後計算其中心。您可以輕鬆地與拓撲庫像JTS計算的話:http://tsusiatsoftware.net/jts/javadoc/com/vividsolutions/jts/algorithm/ConvexHull.html

Geometry hull = new ConvexHull(coordinates, new GeometryFactory()); 
Point center = hull.getCentroid(); 

這給出了一個更好的結果,如果你輸入的數據是不是軸對稱的,例如,而三角形不是矩形或圓形。