gpt4 book ai didi

Android MapView 投影返回负数

转载 作者:行者123 更新时间:2023-11-29 14:09:54 24 4
gpt4 key购买 nike

我正在使用下面的代码在我的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com