【问题标题】:Finding center of set of coordinates using Java使用Java查找坐标集的中心
【发布时间】:2015-06-16 04:36:34
【问题描述】:

我正在使用 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();

【问题讨论】:

  • 能否请您告知您的输入是什么样的,如何存储等?

标签: java geocoding twitter4j


【解决方案1】:

一个简单的方法是:

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

【讨论】:

    【解决方案2】:

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

    如果异常值不是问题,另一种方法是先计算convex hull,然后计算它的center。可以用 JTS 之类的拓扑库轻松计算:http://tsusiatsoftware.net/jts/javadoc/com/vividsolutions/jts/algorithm/ConvexHull.html

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

    如果您的输入数据不是轴对称的,例如,而不是三角形而不是矩形或圆形,这将提供更好的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-04
      • 2017-06-22
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      • 2019-03-12
      • 1970-01-01
      • 2016-08-25
      相关资源
      最近更新 更多