使用Java查找一组坐标的中心

4

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

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

有没有一种方法来计算该区域/多边形/边界的中心(或接近中心,或至少包含一个点)?是否有Java API可用?

是否有一个等同于这个JavaScript代码的Java版本,该代码来自于这个帖子

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

请问您的输入数据是什么样子的,它是如何存储的等等? - Anand S Kumar
2个回答

7

一个简单的方法是:

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

5

扩展saka的答案(它是边界框的中心),您还可以迭代所有坐标并计算纬度和经度的平均值。优点是异常值不会像使用bounding-box方法那样将中心移动太多。

如果异常值不是问题,另一种方法是先计算凸包,然后计算其center。您可以使用拓扑库(如JTS)轻松计算它:http://tsusiatsoftware.net/jts/javadoc/com/vividsolutions/jts/algorithm/ConvexHull.html

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

如果您的输入数据不是轴对称的,例如更像三角形而不是矩形或圆形,则使用此方法可以获得更好的结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接