android触摸坐标有负值,Android地图视图投影返回负数

我正在使用下面的代码在我的地图视图上放置一个覆盖。由于某种原因,在通过位置数据进行itterating之后,它会在同一个位置绘制点。

Location (lat : lon) 51.2651789188385 : -0.5398589372634888

Projection (x : y) 239 : 361

Location (lat : lon) 51.26375198364258 : -0.5417096614837646

Projection (x : y) 239 : 361

地点是双倍的

地质点是整数

投影是屏幕坐标。

有人可以检查一下下面的代码,看看我是否做错了什么吗?

谢谢

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 friendLocations;

private ArrayList 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();

locD = new ArrayList();

//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;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值