Google android mapview lat long到topixel投影问题
我得到了不同的x,y值,对于一个特定的lat,long。我想知道为什么会这样。可能是我缺乏知识。因此,如果您可以通过观察下面的代码片段来解释,那么这将是一个很大的帮助Google android mapview lat long到topixel投影问题,android,android-mapview,latitude-longitude,projection,Android,Android Mapview,Latitude Longitude,Projection,我得到了不同的x,y值,对于一个特定的lat,long。我想知道为什么会这样。可能是我缺乏知识。因此,如果您可以通过观察下面的代码片段来解释,那么这将是一个很大的帮助 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
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;
}
}
import java.util.List;
导入com.google.android.maps.GeoPoint;
导入com.google.android.maps.MapActivity;
导入com.google.android.maps.MapView;
导入com.google.android.maps.Overlay;
导入com.google.android.maps.OverlayItem;
导入com.google.android.maps.Projection;
导入android.app.Activity;
导入android.graphics.Color;
导入android.graphics.Point;
导入android.graphics.drawable.drawable;
导入android.os.Bundle;
导入android.widget.Button;
导入android.widget.TextView;
公共类活动扩展了MapActivity{
地图视图;
地球点fm_gp;
按钮bt;
液化天然气;
列出地图覆盖图;
可拉伸;
定制项目化Overlay项目化Overlay;
重叠项重叠项;
字符串RASTA=“”;
字符串[]对;
国际EndLat,EndLng;
弦科塔;
文本视图电视;
双重惊吓,惊吓;
双端板,端长;
重瓣中板,中长;
int STARTATE6,STARTONGE6;
int endlatE6,endlongE6;
中段6,中段6;
地质点StartGp、EndGp、midGp1、midGp2;
整数x1,y1,x2,y2,x3,y3;
双x4,y4;
点起点;
点端点;
中点1;
中点2;
字符串abc;
双w,T,G;
整数色调,基特;
@凌驾
创建时受保护的空隙(捆绑冰柱)
{
//TODO自动生成的方法存根
超级冰柱;
setContentView(R.layout.fullmap);
起始点=新点();
端点=新点();
中点1=新点();
中点2=新点();
tv=(TextView)findviewbyd(R.id.fm_tv1);
STARTAT=34.123018;
startate6=(int)(startat*1E6);
斯塔东=-118.146278;
斯塔隆格6=(int)(斯塔隆格*1E6);
endlat=34.122525;
endlatE6=(int)(endlat*1000000);
endlong=-118.146241;
endlongE6=(int)(endlong*1000000);
米德拉特=34.122724;
中间值6=(整数)(中间值*1000000);
中长=-118.146106;
中长6=(整数)(中长*1000000);
EndGp=新的地质点(endlatE6,endlongE6);
midGp1=新的地质点(midlatE6、midlongE6);
StartGp=新的地质点(STARTATE6、STARTONGE6);
FMmapview=(MapView)findViewById(R.id.MapViewFM123);
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=起始点x;
y1=起始点y;
x2=终点x;
y2=终点y;
x3=中点1.x;
y3=中点1.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=新的定制itemizedoverlay(可绘制,此);
overlayitem=新的overlayitem(midGp1,“您在”,“您好,莫托”);
itemizedoverlay.addOverlay(overlayitem);
添加(itemizedoverlay);
midGp2=FMmapview.getProjection().fromPixels(淡色、基色);
//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=新的地质点(34048039,-118140655);
mapOverlays=FMmapview.getOverlays();
drawable=this.getResources().getDrawable(R.drawable.blue);
itemizedoverlay=新的定制itemizedoverlay(可绘制,此);
overlayitem=新的overlayitem(midGp2,“您在”,“您好,莫托”);
itemizedoverlay.addOverlay(overlayitem);
添加(itemizedoverlay);
FMmapview.getController().animateTo(StartGp);
FMmapview.getController().setCenter(StartGp);
FMmapview.getController().setZoom(18);
添加(新的MyOverLay(StartGp,EndGp,2,Color.BLUE));
}
@凌驾
受保护的布尔值isRouteDisplayed()
{
//TODO自动生成的方法存根
返回false;
}
}
这里,对于34.123018,-118.146278,我得到x,y=0,0;
当我重新运行应用程序时,我再次得到x,y=240340
如果我清除数据,我得到x,y=0,0
然后,当我重新运行时,对于前面提到的相同lat/long,我得到不同的值
如果有人能澄清我的想法,那将是一个很大的帮助
编辑:
我找到了原因,这对我来说是完全不寻常的。
到像素的投影值可能会有所不同
如前所述
地图在当前状态下的投影。由于地图的投影可能会发生变化,因此您不应将此对象保留一次以上
所以,x,y可以是0,0,也可以是任何东西。无论投影的x,y值是什么,它都将始终表示相同的lat,long
不幸的是,导致我产生这种想法的问题如下:
T=((x3+(w*w*x1)+(w*y3)-(w*x1))/(w*w+1))
它提供了不同的价值。如果我是b