2016-08-17 12 views
5

Tôi có tập dữ liệu về vĩ độ và kinh độ để điền bản đồ nhiệt. Dữ liệu quá lớn và sẽ tiếp tục tăng từng ngày. Tôi cần phải giảm lượng dữ liệu mà không ảnh hưởng nhiều đến hiệu suất của bản đồ nhiệt. Tôi hiểu rằng chúng tôi có thể thêm một trường nữa cho "trọng số" và kết hợp hai điểm gần nhau để tạo thành một điểm mới với "trọng số" là tổng của hai điểm đầu tiên. Nhưng tôi bối rối về nơi để trồng điểm mới. Tôi không nghĩ rằng đây sẽ là một cách tiêu chuẩn để giải quyết vấn đề của tôi. Tôi đang sử dụng golang để thực hiện, nhưng tất cả các ý tưởng đều được chào đón. Cảm ơn bạn.Làm cách nào để tổng hợp tập dữ liệu của mã địa lý để giảm số lượng bản đồ nhiệt?

+2

sử dụng các trọng số cho một bình quân gia quyền, và đặt di chuyển điểm nhẹ. ví dụ. nếu điểm A có 0,9 và điểm B 0,1 thì điểm mới phải bằng 0,1 của đường kết nối A và B, gần A. –

+2

Hai câu hỏi quan trọng: 1. Sơ đồ nhiệt nên là gì, nghĩa là định nghĩa hoàn hảo là gì, - kết quả không? Khi bạn xác định được rằng, câu hỏi 2. là: loại độ lệch nào từ 1. bạn có thể chấp nhận không? –

+0

@ RafałDowgird Bản đồ nhiệt thể hiện chuyển động của một chiếc xe. –

Trả lời

0

Như đã đề cập bởi người nhận xét, hãy xem xét sử dụng điểm trung bình có trọng số, chẳng hạn.

Chọn một số ngưỡng lân cận trong đó bất kỳ điểm nào sẽ được tổng hợp. Đối với mỗi điểm này, tạo ra một điểm tổng hợp có tọa độ là trung bình (trung vị) của những người khác và trọng số của nó là số lượng các điểm được đề cập. Chỉ bao gồm các điểm có trọng số tổng hợp khi tạo bản đồ nhiệt để bạn có thể giảm lượng dữ liệu bằng cách điều chỉnh ngưỡng lân cận của mình.

Ví dụ:

type Point struct{ X, Y float32 } 

type WeightedPoint struct{ Weight, X, Y float32 } 

func GetWeightedPoint(ps []Point) WeightedPoint { 
    n := float32(len(ps)) 
    wp := WeightedPoint{Weight: n} 
    if n > 0 { 
     for _, p := range ps { 
      wp.X += p.X 
      wp.Y += p.Y 
     } 
     wp.X /= n 
     wp.Y /= n 
    } 
    return wp 
} 

func main() { 
    ps := []Point{{0.0, 0.0}, {1.0, 0.0}, {0.5, 1.0}} 
    fmt.Printf("OK: %#v\n", GetWeightedPoint(ps)) 
    // OK: main.WeightedPoint{Weight:3, X:0.5, Y:0.33333334} 
} 
Các vấn đề liên quan