将多边形形状转换为圆形会生成不同大小的形状
Converting a polygon shape to a circle generates different size shape
我目前正在开发使用此处地图 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}
即使上面两个例子的中心和半径相同,形状也不同(圆比另一个大得多)。我试着把它来回转换,形状越来越大。
有人可以告诉我我在上述转换中做错了什么,或者 heremap 本身是否有任何问题。
如果您将圆心和半径存储在数据库中,那就简单多了。
无论如何,问题是,您将新圆的半径设置为从边界框的中心到右上角的距离。
但是应该从中心到顶部计算距离 OR right OR left OR底部。
所以代替这个半径:
boundingBox
.getCenter()
.distance(
new H.geo.Point(boundingBox.getTop(), boundingBox.getRight())
)
使用例如这个半径:
boundingBox
.getCenter()
.distance(
new H.geo.Point(boundingBox.getTop(), boundingBox.getCenter().lng)
)
我目前正在开发使用此处地图 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}
即使上面两个例子的中心和半径相同,形状也不同(圆比另一个大得多)。我试着把它来回转换,形状越来越大。
有人可以告诉我我在上述转换中做错了什么,或者 heremap 本身是否有任何问题。
如果您将圆心和半径存储在数据库中,那就简单多了。
无论如何,问题是,您将新圆的半径设置为从边界框的中心到右上角的距离。
但是应该从中心到顶部计算距离 OR right OR left OR底部。 所以代替这个半径:
boundingBox
.getCenter()
.distance(
new H.geo.Point(boundingBox.getTop(), boundingBox.getRight())
)
使用例如这个半径:
boundingBox
.getCenter()
.distance(
new H.geo.Point(boundingBox.getTop(), boundingBox.getCenter().lng)
)