账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    mysql 中的MultiPolygon 精度丢失问题
    • 2020-01-01 00:00
    • 10
    26
    0

    1.这个是前端的传到后台的的GeometryJSON数据

    {
        "type":"FeatureCollection",
        "name":"沙二新村_bd09",
        "crs":{
            "type":"name",
            "properties":{
                "name":"urn:ogc:def:crs:OGC:1.3:CRS84"
            }
        },
        "features":[
            {
                "type":"Feature",
                "properties":{
                    "FID_":0,
                    "RefName":"沙二新村"
                },
                "geometry":{
                    "type":"MultiPolygon",
                    "coordinates":[
                        [
                            [
                                [
                                    113.83611553907443,
                                    22.78082228953826
                                ],
                                [
                                    113.83615270105246,
                                    22.781330941487614
                                ],
                                [
                                    113.83619535231993,
                                    22.78190835622712
                                ],
                                [
                                    113.8359391610967,
                                    22.782145517940965
                                ],
                                [
                                    113.83591004030475,
                                    22.782364678602836
                                ],
                                [
                                    113.83658110575651,
                                    22.782267444330923
                                ],
                                [
                                    113.83672580349621,
                                    22.782270941010097
                                ],
                                [
                                    113.83682427457647,
                                    22.782807961272
                                ],
                                [
                                    113.83716712152268,
                                    22.78283407226441
                                ],
                                [
                                    113.83729315640223,
                                    22.782854716397498
                                ],
                                [
                                    113.83733392965138,
                                    22.78282995924141
                                ],
                                [
                                    113.83761016289067,
                                    22.782915224894865
                                ],
                                [
                                    113.8377214136748,
                                    22.78297218779456
                                ],
                                [
                                    113.8377966263927,
                                    22.782996761533248
                                ],
                                [
                                    113.8379745545071,
                                    22.783053479055813
                                ],
                                [
                                    113.83805100486087,
                                    22.783048658546235
                                ],
                                [
                                    113.83896527379136,
                                    22.78290436825743
                                ],
                                [
                                    113.83894148813191,
                                    22.782644899002072
                                ],
                                [
                                    113.83887602031581,
                                    22.782050346550623
                                ],
                                [
                                    113.8385989725796,
                                    22.78079161111866
                                ],
                                [
                                    113.8379288314515,
                                    22.779433504844047
                                ],
                                [
                                    113.83610339368849,
                                    22.780792291590767
                                ],
                                [
                                    113.83611553907443,
                                    22.78082228953826
                                ]
                            ]
                        ]
                    ]
                }
            }
        ]
    }

    2.但是GeometryJSON数据转化为MultiPolygon 对象后,我发现坐标数据精度丢失了。

    MULTIPOLYGON(((113.836115539074427, 22.780822289538261 ], [ 113.836152701052455, 22.781330941487614 ], [ 113.836195352319933, 22.78190835622712 ], [ 113.835939161096704, 22.782145517940965 ], [ 113.835910040304753, 22.782364678602836 ], [ 113.836581105756508, 22.782267444330923 ], [ 113.836725803496208, 22.782270941010097 ], [ 113.836824274576472, 22.782807961271999 ], [ 113.837167121522683, 22.782834072264411 ], [ 113.837293156402225, 22.782854716397498 ], [ 113.837333929651379, 22.782829959241411 ], [ 113.83761016289067, 22.782915224894865 ], [ 113.837721413674799, 22.782972187794559 ], [ 113.837796626392702, 22.782996761533248 ], [ 113.837974554507099, 22.783053479055813 ], [ 113.838051004860873, 22.783048658546235 ], [ 113.838965273791359, 22.78290436825743 ], [ 113.838941488131908, 22.782644899002072 ], [ 113.838876020315809, 22.782050346550623 ], [ 113.838598972579604, 22.780791611118659 ], [ 113.837928831451507, 22.779433504844047 ], [ 113.836103393688489, 22.780792291590767 ], [ 113.836115539074427, 22.780822289538261 )))

    3.我的转化方法如下

    MultiPolygon multiPolygon=null;
        Map paramGeom = villageDetailParams.getGeom();
        if(paramGeom!=null&&paramGeom.get("coordinates")!=null){
          String jsonString = JSONObject.toJSONString(paramGeom);
          log.info("geom:{}",jsonString);
          GeometryJSON geometryJSON = new GeometryJSON();
          try {
            StringReader stringReader = new StringReader(jsonString);
            multiPolygon= geometryJSON.readMultiPolygon(stringReader);
            baseVillage.setGeom(multiPolygon);
          } catch (Exception e) {
            log.info("处理村geom异常:{}",e.getMessage());
            throw new RuntimeException("处理村geom异常");
          }
        }

    请求一下是什么导致的

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 瞳中ㄅ火焰ヘ 普通会员 1楼

      在MySQL中,多边形可能由于多种原因导致精度丢失。以下是一些可能的原因:

      1. 计算的多边形数量过多:如果一个多边形包含超过一个或多个点,那么在查询时,MySQL将无法准确地找到这些点,从而导致精度丢失。

      2. 计算的多边形角度不准确:如果多边形的边缘不完全重合,或者角度不准确,那么在查询时,MySQL将无法准确地找到这些点,从而导致精度丢失。

      3. 计算的多边形中的某些点被忽略了:如果多边形中的某些点被忽略了,那么在查询时,MySQL将无法准确地找到这些点,从而导致精度丢失。

      4. 空间分辨率设置过低:如果多边形的尺寸设置过低,那么在查询时,MySQL将无法准确地找到这些点,从而导致精度丢失。

      为了解决这个问题,你可以尝试以下几种方法:

      1. 减少多边形的数量:如果你的多边形数量过多,你可以尝试减少它们的数量。

      2. 更准确地计算多边形的角度:你可以使用更精确的角度计算方法来计算多边形的边缘。

      3. 更准确地计算多边形中的某些点:你可以使用更精确的点计算方法来计算多边形中的某些点。

      4. 调整空间分辨率:你可以调整多边形的尺寸,以获得更高的精度。

      注意,不同的查询可能需要不同的方法来解决精度丢失问题。因此,你应该根据你的查询需求来选择最适合的方法。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部