Android MapView 投影返回负数

标签 android gps overlay android-mapview projection

我正在使用下面的代码在我的 MapView 上放置一个叠加层。出于某种原因,在遍历位置数据后,它会在同一个地方绘制点。

这似乎发生在从 Location 到 GeoPoint 到 Projection 的转换上:

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

位置是 double 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>

最佳答案

我不知道这个有什么问题。我无法让它工作并且调试没有显示任何错误,所以最后我使用 Google Mytracks 项目中的代码来启用 map View 和投影问题

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

关于Android MapView 投影返回负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4065566/

相关文章:

javascript - 可以暂停 PHP 脚本,使用 HTML/JS 获取 GPS 位置,然后恢复 PHP 吗?

javascript - 叠加关闭

android - 修复Gradle错误 “Attribute ” xxx“已经在Android Studio中定义”的有效方法?

android - 如何使用 Firebase 发送验证邮件?

c# - 如何从 c# Xamarin android 中的浏览器链接打开应用程序?

css - 我希望幻灯片的标题像第二张图片一样垂直显示

r - 用 geom_bar() 覆盖两个条形图

java - 获取动态链接,而不是深层链接 - Android 上的 Firebase 动态链接

Android gps 提供商和 gps 图标

Android M Google api 客户端位置速度始终为 0 和 location.hasSpeed false