将多边形形状转换为圆形会生成不同大小的形状

问题描述

我目前正在开发一种使用 here maps javascript sdk 的产品。作为项目的一部分,我们要求用户“绘制”圆形并将它们作为多边形存储在数据库中。

我们遇到了一个问题,即尝试将圆形转换为多边形然后再转换回圆形实际上会生成一个比之前更大的形状。 (我们这样做的原因是因为用户画了一个圆,我们把它作为多边形保存在数据库中,然后我们重新转换为一个圆,以防用户想要编辑它)。

我将尝试提供更多背景信息:

以下代码生成一个具有以下边界框的形状:

  geoShape = new H.map.polygon(linestring,polygonoptions);

  boundingBox.getLeft()
  -86.292043018
  boundingBox.getRight()
  -86.025404636
  boundingBox.getTop()
  39.90279254
  boundingBox.getBottom()
  39.697939603
  boundingBox.getCenter().distance(new H.geo.Point(boundingBox.getTop(),boundingBox.getRight()))
  16100.899931650873
  boundingBox.getCenter()
  Xf {lat: 39.8003660715,lng: -86.158723827}

虽然下面的代码(在上面使用的数据中使用相同的),将产生:

geoShape = new H.map.Circle(
          boundingBox.getCenter(),boundingBox
            .getCenter()
            .distance(
              new H.geo.Point(boundingBox.getTop(),boundingBox.getRight())
            ),CircleOptions
        );

geoShape.getBoundingBox().getLeft()
-86.34719514812161
geoShape.getBoundingBox().getRight()
-85.97025250587842
geoShape.getBoundingBox().getTop()
39.94516492537772
geoShape.getBoundingBox().getBottom()
39.65556721762228
geoShape.geTradius()
16100.899931650873
geoShape.getCenter()
Xf {lat: 39.8003660715,lng: -86.158723827}

即使上面两个示例的中心和半径相同,形状也不同(圆比另一个大得多)。我试着把它来回转换,形状越来越大。

有人可以告诉我我在上述转换中做错了什么,或者这里地图本身是否有任何问题。

解决方法

如果您将圆的中心和半径存储在 DB 中,那就太简单了。

无论如何,问题是,您将新圆的半径设置为从边界框的中心到其右上角的距离。

但是应该从中心到顶部计算距离OR右边OR左边OR底部。 所以,而不是这个半径:

boundingBox
  .getCenter()
  .distance(
    new H.geo.Point(boundingBox.getTop(),boundingBox.getRight())
  )

使用例如这个半径:

boundingBox
  .getCenter()
  .distance(
    new H.geo.Point(boundingBox.getTop(),boundingBox.getCenter().lng)
  )