我得到不同的x,y值爲特定的拉特,長。我不知道爲什麼會發生。可能是我缺乏知識。所以,如果任何人都可以通過觀察下面的代碼片段來解釋,那麼這將是一個很大的幫助。谷歌android mapview lat長到topixel投影問題
import java.util.List;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;
import com.google.android.maps.Projection;
import android.app.Activity;
import android.graphics.Color;
import android.graphics.Point;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;
public class MaopaoActivity extends MapActivity {
MapView FMmapview;
GeoPoint fm_gp;
Button bt;
int lat,lng;
List<Overlay> mapOverlays;
Drawable drawable;
CustomItemizedOverlay itemizedoverlay;
OverlayItem overlayitem;
String RASTA="";
String [] pairs;
int EndLat,EndLng;
String kotha;
TextView tv;
double startlat,startlong;
double endlat,endlong;
double midlat,midlong;
int startlatE6,startlongE6;
int endlatE6,endlongE6;
int midlatE6,midlongE6;
GeoPoint StartGp,EndGp,midGp1,midGp2;
Integer x1,y1,x2,y2,x3,y3;
Double x4,y4;
Point StartPoint;
Point EndPoint;
Point MidPoint1;
Point MidPoint2;
String abc;
double w,T,G;
Integer Tint,Gint;
@Override
protected void onCreate(Bundle icicle)
{
// TODO Auto-generated method stub
super.onCreate(icicle);
setContentView(R.layout.fullmap);
StartPoint = new Point();
EndPoint = new Point();
MidPoint1 = new Point();
MidPoint2 = new Point();
tv=(TextView)findViewById(R.id.fm_tv1);
startlat=34.123018;
startlatE6=(int)(startlat*1E6);
startlong=-118.146278;
startlongE6=(int)(startlong*1E6);
endlat=34.122525;
endlatE6=(int)(endlat*1000000);
endlong=-118.146241;
endlongE6=(int)(endlong*1000000);
midlat=34.122724;
midlatE6=(int)(midlat*1000000);
midlong=-118.146106;
midlongE6=(int)(midlong*1000000);
EndGp=new GeoPoint(endlatE6,endlongE6);
midGp1=new GeoPoint(midlatE6,midlongE6);
StartGp=new GeoPoint(startlatE6,startlongE6);
FMmapview=(MapView)findViewById(R.id.MapViewFM123);
Projection projection = FMmapview.getProjection();
FMmapview.getController().setCenter(StartGp);
FMmapview.getController().setZoom(18);
FMmapview.getProjection().toPixels(EndGp,EndPoint);
FMmapview.getProjection().toPixels(midGp1,MidPoint1);
FMmapview.getProjection().toPixels(StartGp,StartPoint);
x1=StartPoint.x;
y1=StartPoint.y;
x2=EndPoint.x;
y2=EndPoint.y;
x3=MidPoint1.x;
y3=MidPoint1.y;
w=(y2-y1)/(x2-x1);
T=((x3+(w*w*x1)+(w*y3)-(w*x1))/(w*w+1));
G=w*(T-x1)+y1;
Tint=(int) Math.ceil(T);
Gint=(int)Math.ceil(G);
mapOverlays = FMmapview.getOverlays();
drawable = this.getResources().getDrawable(R.drawable.blue);
itemizedoverlay = new CustomItemizedOverlay(drawable,this);
overlayitem = new OverlayItem(midGp1, "Your are at","hello motttto");
itemizedoverlay.addOverlay(overlayitem);
mapOverlays.add(itemizedoverlay);
midGp2=FMmapview.getProjection().fromPixels(Tint,Gint);
//x4=(midGp2.getLatitudeE6())/(1E6);
//y4=(midGp2.getLongitudeE6())/(1E6);
abc="A="+x1.toString()+','+y1.toString()+" B="+x2.toString()+","+y2.toString()+" C="+x3.toString()+","+y3.toString()+" D="+Tint.toString()+","+Gint.toString();
tv.setText(abc);
//midGp2=new GeoPoint(34048039,-118140655);
mapOverlays = FMmapview.getOverlays();
drawable = this.getResources().getDrawable(R.drawable.blue);
itemizedoverlay = new CustomItemizedOverlay(drawable,this);
overlayitem = new OverlayItem(midGp2, "Your are at","hello motttto");
itemizedoverlay.addOverlay(overlayitem);
mapOverlays.add(itemizedoverlay);
FMmapview.getController().animateTo(StartGp);
FMmapview.getController().setCenter(StartGp);
FMmapview.getController().setZoom(18);
FMmapview.getOverlays().add(new MyOverLay(StartGp,EndGp,2,Color.BLUE));
}
@Override
protected boolean isRouteDisplayed()
{
// TODO Auto-generated method stub
return false;
}
}
這裏我得到x,y = 0,0爲地點34.123018,-118.146278; 當我重新運行應用程序時,再次獲得x,y = 240,340。
如果我清除數據,我得到x,y = 0,0, 然後當我重新運行時,我得到不同的值爲上述相同的經緯度。
這將是一個很大的幫助,如果任何人都可以清楚我的概念
編輯:
我已經找到了原因,這完全是不尋常的給我。 對像素的投影值可能會有所不同。
作爲http://code.google.com/android/add-ons/google-apis/reference/com/google/android/maps/MapView.html#getProjection%28%29說, 「地圖的投影在它的當前狀態。你不應該堅持這個對象多於一個平局,因爲地圖的投影可能會改變。」
所以,x,y可以是0,0或者可以是任何東西。無論投影的x,y值是多少,它總會代表相同的經度。
,導致我這樣不幸的想法是以下行的問題:
T =((X3 +(W * W * X1)+(W * Y3) - (W * X1))/(W * W + 1));
它提供了不同的價值。如果我將其分成3行,那麼T會提供正確的結果。儘管如此,我從來不必面對C++中的這種情況。這是奇怪的。
無論如何,我仍然想知道投影的價值背後的原因是不同的。