使用 Java 寻找一组坐标的中心
Finding center of set of coordinates using Java
我正在使用 Twitter4J 从 his/her 个人资料中检索用户的位置。我有一组地理坐标使用此调用形成多边形边界(通常为 4 个或更多坐标):
// Status tweet
Place place = tweet.getPlace();
GeoLocation[][] box = place.getBoundingBoxCoordinates();
有没有办法计算这个区域/多边形/边界的中心(或近中心,或至少包含一个点)?这个有JavaAPI吗?
是否有 Java 等效于此 Java 脚本代码取自此 post:
var bounds = new google.maps.LatLngBounds();
bounds.extend(results[0].geometry.location);
var center = bounds.getCenter();
一个简单的方法是:
centerLatitude = ( min(latitude) + max(latitude) ) / 2
centerLongitude = ( min(longitude) + max(longitude) ) / 2
扩展saka的答案(边界框的中心)你也可以遍历所有坐标并计算纬度和经度的平均值。优点是异常值不会像 bounding-box
方法那样移动中心。
如果异常值不是问题,另一种方法是先计算 convex hull and then its center
. You can easily calculate it with a topology library like JTS: http://tsusiatsoftware.net/jts/javadoc/com/vividsolutions/jts/algorithm/ConvexHull.html
Geometry hull = new ConvexHull(coordinates, new GeometryFactory());
Point center = hull.getCentroid();
如果您的输入数据不是轴对称的,例如三角形而不是矩形或圆形,这会提供更好的结果。
我正在使用 Twitter4J 从 his/her 个人资料中检索用户的位置。我有一组地理坐标使用此调用形成多边形边界(通常为 4 个或更多坐标):
// Status tweet
Place place = tweet.getPlace();
GeoLocation[][] box = place.getBoundingBoxCoordinates();
有没有办法计算这个区域/多边形/边界的中心(或近中心,或至少包含一个点)?这个有JavaAPI吗?
是否有 Java 等效于此 Java 脚本代码取自此 post:
var bounds = new google.maps.LatLngBounds();
bounds.extend(results[0].geometry.location);
var center = bounds.getCenter();
一个简单的方法是:
centerLatitude = ( min(latitude) + max(latitude) ) / 2
centerLongitude = ( min(longitude) + max(longitude) ) / 2
扩展saka的答案(边界框的中心)你也可以遍历所有坐标并计算纬度和经度的平均值。优点是异常值不会像 bounding-box
方法那样移动中心。
如果异常值不是问题,另一种方法是先计算 convex hull and then its center
. You can easily calculate it with a topology library like JTS: http://tsusiatsoftware.net/jts/javadoc/com/vividsolutions/jts/algorithm/ConvexHull.html
Geometry hull = new ConvexHull(coordinates, new GeometryFactory());
Point center = hull.getCentroid();
如果您的输入数据不是轴对称的,例如三角形而不是矩形或圆形,这会提供更好的结果。