2010-10-31 71 views
1

我正在使用下面的代碼在我的MapView上放置疊加層。出於某種原因,在通過位置數據進行迭代之後,它會在相同的位置繪製點。Android MapView Projection返回負數

這似乎是發生在從位置轉換的GeoPoint到投影:

Location (lat : lon) 51.2651789188385 : -0.5398589372634888 
Projection (x : y) 239    : 361 
Location (lat : lon) 51.26375198364258 : -0.5417096614837646 
Projection (x : y) 239    : 361 

位置是雙打 GeoPoints是整數 預測是屏幕座標。

有人可以看看下面的代碼,並發現我是否做錯了什麼?

感謝

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.Iterator; 
import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Point; 
import android.graphics.RectF; 
import android.location.Location; 
import android.util.Log; 

import com.google.android.maps.GeoPoint; 
import com.google.android.maps.MapView; 
import com.google.android.maps.Overlay; 
import com.google.android.maps.Projection; 

public class ROverlay extends Overlay { 

    private Context context; 
    private HashMap<String, Location> friendLocations; 
    private ArrayList<LocationData> locD; 
    private Location location; 
    private GeoPoint locationPoint; 

    private Paint paint; 
    private Paint backPaint; 

    private static int markerRadius = 7; 

    /** Get your current location */ 
    public Location getLocation() { 
     return location; 
} 
/** Set your current location */ 
public void setLocation(Location location) { 
    this.location = location; 

    Double latitude = location.getLatitude()*1E6; 
    Double longitude = location.getLongitude()*1E6; 

    locationPoint = new GeoPoint(latitude.intValue(),longitude.intValue());  
} 

/** Refresh the locations of each of the contacts */ 
public void refreshLocation() { 
    locD = RMapView.getARR(); 
} 

    /** 
* Create a new FriendLocationOverlay to show your contact's locations on a map 
* @param _context Parent application context 
*/ 
public ROverlay(Context _context) { 
super(); 

context = _context; 
friendLocations = new HashMap<String, Location>(); 
locD = new ArrayList<LocationData>(); 
//refreshFriendLocations(); 

// Create the paint objects 
backPaint = new Paint(); 
backPaint.setARGB(200, 200, 200, 200); 
backPaint.setAntiAlias(true); 

paint = new Paint(); 
paint.setDither(true); 
paint.setColor(Color.RED); 
paint.setStyle(Paint.Style.STROKE); 
paint.setStrokeJoin(Paint.Join.ROUND); 
paint.setStrokeCap(Paint.Cap.ROUND); 
paint.setStrokeWidth(5); 
} 

@Override 
public void draw(Canvas canvas, MapView mapView, boolean shadow) {  

// Get the map projection to convert lat/long to screen coordinates 
Projection projection = mapView.getProjection(); 

for (int q = 1; q < locD.size(); q++){ 
    Double latitude = locD.get(q-1).mLocation.getLatitude()*1e6; 
    Double longitude = locD.get(q-1).mLocation.getLongitude()*1e6; 
    GeoPoint geopoint = new GeoPoint(latitude.intValue(),longitude.intValue()); 
    //Log.d("Double", ""+latitude+" : "+longitude); 
    //Log.d("Geopoint", ""+geopoint.getLatitudeE6()+" : "+geopoint.getLongitudeE6()); 
    Point point = new Point(); 
    projection.toPixels(geopoint, point); 

    Double latitude2 = locD.get(q).mLocation.getLatitude()*1e6; 
    Double longitude2 = locD.get(q).mLocation.getLongitude()*1e6; 
    GeoPoint geopoint2 = new GeoPoint(latitude2.intValue(),longitude2.intValue()); 
    Point point2 = new Point(); 
    projection.toPixels(geopoint2, point2); 

    canvas.drawLine(point.x, point.y, point2.x, point2.y, paint); 
    canvas.drawPoint(point.x, point.y, paint); 
    Log.d("Point", ""+point.x+" : "+point.y); 
} 
super.draw(canvas, mapView, shadow); 
} 

@Override 
public boolean onTap(GeoPoint point, MapView mapView) { 
    // Do not react to screen taps. 
    return false; 
} 
} 

</code> 

回答

0

我不知道問題出在這一個東西。我無法得到它的工作和調試是顯示所以最後我從谷歌Mytracks項目中使用的代碼,使地圖視圖與投影的問題沒有錯誤

http://code.google.com/p/mytracks/