2011-10-24 9 views
17

ứng dụng Android của tôi cho biết hướng của một địa điểm cụ thể trên thế giới và do đó cần có được độ la bàn.
Đây là mã tôi đã sử dụng để tính toán độ:Cách tạo la bàn chính xác trên android

public void getDirection() {   
    mySensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE); 
    List<Sensor> mySensors = mySensorManager.getSensorList(Sensor.TYPE_ORIENTATION); 
    if(mySensors.size() > 0){ 
     mySensorManager.registerListener(mySensorEventListener, mySensors.get(0), SensorManager.SENSOR_DELAY_UI);   
    } 
    else{ 
     TextView alert = (TextView)findViewById(R.id.instruct); 
     alert.setText(getString(R.string.direction_not_found)); 
     myCompassView.setVisibility(myCompassView.INVISIBLE); 

    } 
} 
private SensorEventListener mySensorEventListener = new SensorEventListener(){ 

    @Override 
    public void onAccuracyChanged(Sensor sensor, int accuracy) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onSensorChanged(SensorEvent event) { 
     // TODO Auto-generated method stub 
     compassBearing = (float)event.values[0]; 
     float bearing; 
     bearing = compassBearing - templeBearing; 
     if (bearing < 0) 
      bearing = 360 + bearing; 
     myCompassView.updateDirection(bearing); 
     } 
}; 

Phương pháp này thường làm việc nhưng đôi khi nó sẽ chỉ phía bắc sai, tôi phải làm gì phải làm để có được một vị trí chính xác hơn?

+0

Đây sẽ là một câu hỏi hay để thêm vào đề xuất mới http://area51.stackexchange.com/proposals/102228/virtual-and-augmented-reality StackExchange. – SashaZd

Trả lời

33

tôi có một vài gợi ý dành cho bạn:

1) Điện thoại của bạn có thể không được hiệu chỉnh. Để làm điều đó, di chuyển nó xung quanh theo hình thức 8 (see this). Nếu bạn không nếu thiết bị của bạn được hiệu chỉnh hoặc không thực hiện một số thử nghiệm bằng cách trỏ thiết bị tại một số hướng điểm chính xác đã biết và so sánh các giá trị. Thông thường, nếu thiết bị không được hiệu chỉnh, bạn sẽ thấy các biến thể lớn trong giá trị phương vị cho các phép quay nhỏ. Đó là điều tôi sẽ lo lắng.

Bây giờ, đừng quên rằng cảm biến mang đến cho bạn vòng bi từ trường Bắc, chứ không phải True North! Sự khác biệt này được gọi là sự suy giảm của từ trường và giá trị của nó thay đổi từ nơi này sang nơi khác và theo thời gian do những thay đổi trong từ trường của Trái đất. This app có thể tính toán một số giá trị cho bạn với độ chính xác tương đối. Tôi sẽ không quá lo lắng về điều này vì sự sụt giảm thường nhỏ, nhưng bạn có thể đang tìm kiếm độ chính xác tốt (nơi tôi sống sự sụt giảm là 3º, hiện tại).

2) Tránh xa các vật kim loại hoặc những thứ tạo ra từ trường mạnh. Ví dụ: không thực hiện kiểm tra nếu bạn có điện thoại gần máy tính hoặc bất kỳ bàn phím vật lý nào! Đây là chất độc tinh khiết để thử nghiệm định vị la bàn. Một số apps có thể đo cường độ của từ trường (nếu thiết bị hỗ trợ nó). Khi bạn tiến gần hơn đến công cụ kim loại, bạn sẽ trải nghiệm các giá trị cao hơn và thay đổi mạnh mẽ trong chỉ đường. Để giải trí, cũng có một số "metal detectors": ứng dụng này nhận ra những thay đổi trong từ trường và rung khi bạn ở gần "vật thể bằng kim loại" hoặc những thứ gây nhiễu từ tính với thiết bị.

3) Nhớ cập nhật ổ trục khi bạn nghiêng thiết bị sang chế độ ngang. (article is a must read!) Điều này là do giá trị phương vị được dựa trên sự quay của trục vuông góc với mặt phẳng của điện thoại. Khi bạn xoay thiết bị sang chế độ ngang, giá trị này được thay đổi bởi +/- 90º! Điều này không được giải quyết bằng cách tắt chế độ phong cảnh ứng dụng! Bạn sẽ phải xác định nó theo lập trình bằng cách phân tích phép quay xung quanh hai trục kia (độ cao và cuộn). Đây không phải là tầm thường, nhưng có một số ví dụ ở đâu đó trong mạng.

chỉnh sửa: Nếu bạn quan tâm đến một số mã, hãy kiểm tra Mixare, nó là một nguồn tăng cường khuôn khổ thực tế mở theo GPL3 dành cho Android. Hãy xem mã của họ về định hướng, định vị la bàn và mang.

PS: Tôi không có bất kỳ loại kết nối nào với người sáng tạo của các ứng dụng được đề cập.

+1

1) Có cách nào để thông báo cho người dùng rằng thiết bị không được hiệu chuẩn?2) Có cách nào để biết khi nào có nhiễu từ? 3) Tôi đã tắt chế độ phong cảnh nên tôi không phải lo lắng về điều đó, đúng không? – eladrich

+0

Tôi đã cập nhật câu trả lời. Hy vọng tôi trả lời một số câu hỏi của bạn – MobileCushion

+0

@MobileCushion câu trả lời rất tốt đẹp, cảm ơn bạn rất nhiều – RiadSaadi