diff --git a/business/jxstore/cms/cms.go b/business/jxstore/cms/cms.go index dd16517fc..84bdc7bd4 100644 --- a/business/jxstore/cms/cms.go +++ b/business/jxstore/cms/cms.go @@ -632,6 +632,7 @@ func GetSToURidingDistance2(sLng, sLat, uLng, uLat float64, orderId string) (way // 获取骑行路线图 if v.OriginalData == "" { originalData, distance, durationTime, err := GetCyclingLine(sLng, sLat, uLng, uLat) + globals.SugarLogger.Debugf("======originalData := %d", len(originalData)) if err == nil && len(originalData) != model.NO { v.OriginalData = strings.Join(originalData, ";") v.Distance = distance @@ -731,8 +732,6 @@ func GetCyclingLine(sLng, sLat, uLng, uLat float64) (polyLineList []string, dist return nil, 0, 0, err } data, err := api.BaiDuNaviAPI.DirectionLiteRide(coords) - globals.SugarLogger.Debugf("======data := %s", utils.Format4Output(data, false)) - globals.SugarLogger.Debugf("======data := %v", err) if err != nil { return nil, 0, 0, err } @@ -744,37 +743,71 @@ func GetCyclingLine(sLng, sLat, uLng, uLat float64) (polyLineList []string, dist return nil, 0, 0, err } - //polyLine := make([]string, 0, 0) + polyLine := make([]string, 0, 0) if path != nil && len(path.Routes) != 0 { distance = int64(path.Routes[0].Distance) // 距离 duration = int64(path.Routes[0].Duration) // 时间 for _, v := range path.Routes[0].Steps { - polyLineList = append(polyLineList, strings.Split(v.Path, ";")...) + polyLine = append(polyLine, strings.Split(v.Path, ";")...) } } - //polyLineList, err = baiDuCoord2Gaode(polyLine) - //if err != nil { - // polyLineList = polyLine - //} + globals.SugarLogger.Debugf("polyLine========================%d", len(polyLine)) + polyLineList = baiDuCoord2Gaode2(polyLine) + globals.SugarLogger.Debugf("polyLineList========================%d", len(polyLineList)) + if len(polyLineList) == 0 || polyLineList == nil { + polyLineList = polyLine + } return } // 美团只认识高德地图坐标点,的转一下 func baiDuCoord2Gaode(baiduCoordinat []string) ([]string, error) { - globals.SugarLogger.Debugf("------------baiduCoordinat %s", utils.Format4Output(baiduCoordinat, false)) - coords, err := api.BaiDuNaviAPI.BatchCoordinateConvertBai2Gao(baiduCoordinat, baidunavi.CoordSysBaidu2Gaode) - globals.SugarLogger.Debugf("------------coords %s", utils.Format4Output(coords, false)) - globals.SugarLogger.Debugf("------------coords %v", err) - if err != nil { - return nil, err + count := len(baiduCoordinat) / 100 + if i := len(baiduCoordinat) % 100; i != 0 { + count += 1 } gaoCoordinat := make([]string, 0, 0) - for _, v := range coords { - gaoCoordinat = append(gaoCoordinat, fmt.Sprintf("%.6f,%.6f", v.Lng, v.Lat)) + for i := 1; i <= count; i++ { + var discordant = make([]string, 0, 0) + if i == count { + discordant = append(discordant, baiduCoordinat[(i-1)*100:]...) + } else { + discordant = append(discordant, baiduCoordinat[(i-1)*100:i*100]...) + } + coords, err := api.BaiDuNaviAPI.BatchCoordinateConvertBai2Gao(discordant, baidunavi.CoordSysBaidu2Gaode) + if err != nil { + globals.SugarLogger.Debugf("百度坐标转换异常:%v", err) + break + } + + for _, v := range coords { + gaoCoordinat = append(gaoCoordinat, fmt.Sprintf("%.6f,%.6f", v.Lng, v.Lat)) + } + } + + if len(gaoCoordinat) == 0 || len(gaoCoordinat) != len(baiduCoordinat) { + } return gaoCoordinat, nil } + +func baiDuCoord2Gaode2(baiduCoordinat []string) []string { + gaoCoordinat := make([]string, 0, 0) + + for _, v := range baiduCoordinat { + var XPI = math.Pi * 3000.0 / 180.0 + coords := strings.Split(v, ",") + var x = utils.Str2Float64(coords[0]) - 0.0065 + var y = utils.Str2Float64(coords[1]) - 0.006 + var z = math.Sqrt(x*x+y*y) - 0.00002*math.Sin(y*XPI) + var theta = math.Atan2(y, x) - 0.000003*math.Cos(x*XPI) + var gg_lng = z * math.Cos(theta) + var gg_lat = z * math.Sin(theta) + gaoCoordinat = append(gaoCoordinat, fmt.Sprintf("%.6f,%.6f", gg_lng, gg_lat)) + } + return gaoCoordinat +}