使用Java查找坐标集的中心

时间:2015-06-16 04:36:34

标签: java geocoding twitter4j

我正在使用Twitter4J从他/她的个人资料中检索用户的位置。我有一组地理坐标使用这个调用形成一个多边形边界(通常是4个或更多个坐标):

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

有没有办法计算这个区域/多边形/边界的中心(或近中心,或至少包含一个点)?是否有Java API?

是否有来自此post的此JavaScript代码的Java等效项:

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

2 个答案:

答案 0 :(得分:5)

一个简单的方法是:

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

答案 1 :(得分:4)

扩展saka的答案(这是边界框的中心),您还可以迭代所有坐标并计算纬度和经度的平均值。优点是异常值不会像边界框一样移动中心。

如果异常值不是问题,另一种方法是首先计算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();

如果您的输入数据不是轴对称的,例如三角形而不是矩形或圆形,则会产生更好的结果。