使用腾讯地图,百度和高德不在使用
This commit is contained in:
@@ -1,10 +1,11 @@
|
||||
package ditu
|
||||
|
||||
import (
|
||||
"git.rosy.net.cn/baseapi/platformapi/tencent_map"
|
||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||
"math"
|
||||
"strings"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/autonavi"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||
"git.rosy.net.cn/jx-callback/globals/api"
|
||||
@@ -76,12 +77,11 @@ func GetDistrictCoordinateList(districtCode int, radius, gridWith int) (coordLis
|
||||
}
|
||||
|
||||
func GetCityCoordinateList(cityCode int, radius, gridWith int) (coordList []*Coordinate) {
|
||||
//place, err := dao.GetPlaces(dao.GetDB(), []int{cityCode})
|
||||
//if err != nil {
|
||||
// return nil
|
||||
//}
|
||||
//level+1
|
||||
districts, err := api.AutonaviAPI.GetDistricts(2, utils.Int2Str(cityCode))
|
||||
place, err := dao.GetPlaces(dao.GetDB(), []int{cityCode})
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
districts, err := api.TencentMapAPI.GetDistricts(2, utils.Int2Str(cityCode), int(place[0].Level+1))
|
||||
if err == nil {
|
||||
if len(districts) > 0 {
|
||||
roundLng, roundLat := GetRound4Radius(districts[0].Lng, districts[0].Lat, gridWith)
|
||||
@@ -98,7 +98,7 @@ func GetCityCoordinateList(cityCode int, radius, gridWith int) (coordList []*Coo
|
||||
return coordList
|
||||
}
|
||||
|
||||
func needCheckTown(place *autonavi.District) bool {
|
||||
func needCheckTown(place *tencent_map.District) bool {
|
||||
for _, v := range []string{"街道", "镇"} {
|
||||
if strings.Index(place.Name, v) >= 0 {
|
||||
return true
|
||||
@@ -107,7 +107,7 @@ func needCheckTown(place *autonavi.District) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func getDistrictCoordinateList(districtList []*autonavi.District, radius, gridWith, roundLng, roundLat int) (coordList []*Coordinate) {
|
||||
func getDistrictCoordinateList(districtList []*tencent_map.District, radius, gridWith, roundLng, roundLat int) (coordList []*Coordinate) {
|
||||
coordMap := make(map[int64]*Coordinate)
|
||||
for _, v := range districtList {
|
||||
if (v.Level <= 3 || (v.Level == 4 && needCheckTown(v))) && v.Lng != 0 && v.Lat != 0 {
|
||||
@@ -131,3 +131,29 @@ func getDistrictCoordinateList(districtList []*autonavi.District, radius, gridWi
|
||||
}
|
||||
return coordList
|
||||
}
|
||||
|
||||
// 老版本
|
||||
//func getDistrictCoordinateList(districtList []*autonavi.District, radius, gridWith, roundLng, roundLat int) (coordList []*Coordinate) {
|
||||
// coordMap := make(map[int64]*Coordinate)
|
||||
// for _, v := range districtList {
|
||||
// if (v.Level <= 3 || (v.Level == 4 && needCheckTown(v))) && v.Lng != 0 && v.Lat != 0 {
|
||||
// realRadius := radius
|
||||
// if v.Level == 2 {
|
||||
// realRadius = 2 * radius
|
||||
// } else if v.Level == 2 {
|
||||
// realRadius = radius / 2
|
||||
// }
|
||||
// tmpCoordList := GetGridsFromCoordinate(v.Lng, v.Lat, realRadius, roundLng, roundLat)
|
||||
// if v.Level <= 3 {
|
||||
// tmpCoordList = append(tmpCoordList, getDistrictCoordinateList(v.Districts, radius, gridWith, roundLng, roundLat)...)
|
||||
// }
|
||||
// for _, coord := range tmpCoordList {
|
||||
// coordMap[coord.GetMapKey()] = coord
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// for _, coord := range coordMap {
|
||||
// coordList = append(coordList, coord)
|
||||
// }
|
||||
// return coordList
|
||||
//}
|
||||
|
||||
@@ -7,7 +7,7 @@ import (
|
||||
"crypto/md5"
|
||||
"encoding/base64"
|
||||
"fmt"
|
||||
"git.rosy.net.cn/baseapi/platformapi/autonavi"
|
||||
"git.rosy.net.cn/baseapi/platformapi/tencent_map"
|
||||
"io/ioutil"
|
||||
"math"
|
||||
"math/rand"
|
||||
@@ -271,16 +271,32 @@ func EarthDistance(lng1, lat1, lng2, lat2 float64) float64 {
|
||||
return dist * radius
|
||||
}
|
||||
|
||||
// 返回结果单元为公里
|
||||
// WalkingDistance 返回结果单元为公里
|
||||
func WalkingDistance(lng1, lat1, lng2, lat2 float64) (distance float64) {
|
||||
if distance = api.AutonaviAPI.WalkingDistance(lng1, lat1, lng2, lat2); distance == 0 {
|
||||
param := &tencent_map.TencentCyclingPlanningReq{
|
||||
From: fmt.Sprintf("%.6f,%.6f", lat1, lng1),
|
||||
To: fmt.Sprintf("%.6f,%.6f", lat2, lng2),
|
||||
}
|
||||
distanceMetre, _ := api.TencentMapAPI.WalkingDistance(param)
|
||||
|
||||
if distanceMetre == 0 {
|
||||
distance = EarthDistance(lng1, lat1, lng2, lat2) * 1.4
|
||||
} else {
|
||||
distance /= 1000
|
||||
distance = float64(distanceMetre) / float64(1000)
|
||||
}
|
||||
return distance
|
||||
}
|
||||
|
||||
// 老版本百度
|
||||
//func WalkingDistance(lng1, lat1, lng2, lat2 float64) (distance float64) {
|
||||
// if distance = api.AutonaviAPI.WalkingDistance(lng1, lat1, lng2, lat2); distance == 0 {
|
||||
// distance = EarthDistance(lng1, lat1, lng2, lat2) * 1.4
|
||||
// } else {
|
||||
// distance /= 1000
|
||||
// }
|
||||
// return distance
|
||||
//}
|
||||
|
||||
//经纬度坐标转换到平面坐标
|
||||
func MillierConvertion(lat float64, lon float64) [2]float64 {
|
||||
var L, H, W, temp, mill, x, y float64
|
||||
@@ -312,22 +328,50 @@ func IntCoordinate2Standard(value int) float64 {
|
||||
func IntCoordinate2MarsStandard(gpsLng, gpsLat int, coordinateType int) (marsLng, marsLat float64, err error) {
|
||||
marsLng = IntCoordinate2Standard(gpsLng)
|
||||
marsLat = IntCoordinate2Standard(gpsLat)
|
||||
coordSys := ""
|
||||
coordSys := 0
|
||||
switch coordinateType {
|
||||
case model.CoordinateTypeGPS:
|
||||
coordSys = autonavi.CoordSysGPS
|
||||
coordSys = tencent_map.CoordinateChangeTypeGPS
|
||||
case model.CoordinateTypeMars:
|
||||
return marsLng, marsLat, nil
|
||||
case model.CoordinateTypeBaiDu:
|
||||
coordSys = autonavi.CoordSysBaidu
|
||||
coordSys = tencent_map.CoordinateChangeTypeBaidu
|
||||
case model.CoordinateTypeMapbar:
|
||||
coordSys = autonavi.CoordSysMapbar
|
||||
coordSys = tencent_map.CoordinateChangeTypeMapbar
|
||||
default:
|
||||
panic(fmt.Sprintf("known coordinate type:%d", coordinateType))
|
||||
}
|
||||
return api.AutonaviAPI.CoordinateConvert(marsLng, marsLat, coordSys)
|
||||
|
||||
result, err := api.TencentMapAPI.TencentCoordinateChange(&tencent_map.TencentCoordinateChangeReq{
|
||||
Locations: fmt.Sprintf("%.6f,%.6f", marsLat, marsLng),
|
||||
Type: coordSys,
|
||||
})
|
||||
if err != nil {
|
||||
return 0, 0, err
|
||||
}
|
||||
|
||||
return utils.Str2Float64(result[0].Lng), utils.Str2Float64(result[0].Lat), nil
|
||||
}
|
||||
|
||||
//func IntCoordinate2MarsStandard(gpsLng, gpsLat int, coordinateType int) (marsLng, marsLat float64, err error) {
|
||||
// marsLng = IntCoordinate2Standard(gpsLng)
|
||||
// marsLat = IntCoordinate2Standard(gpsLat)
|
||||
// coordSys := ""
|
||||
// switch coordinateType {
|
||||
// case model.CoordinateTypeGPS:
|
||||
// coordSys = autonavi.CoordSysGPS
|
||||
// case model.CoordinateTypeMars:
|
||||
// return marsLng, marsLat, nil
|
||||
// case model.CoordinateTypeBaiDu:
|
||||
// coordSys = autonavi.CoordSysBaidu
|
||||
// case model.CoordinateTypeMapbar:
|
||||
// coordSys = autonavi.CoordSysMapbar
|
||||
// default:
|
||||
// panic(fmt.Sprintf("known coordinate type:%d", coordinateType))
|
||||
// }
|
||||
// return api.TencentMapAPI.CoordinateConvert(marsLng, marsLat, coordSys)
|
||||
//}
|
||||
|
||||
func IntPrice2Standard(value int64) float64 {
|
||||
return float64(value) / 100
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user