gpt4 book ai didi

android - 使用 JSON 的谷歌地图中的多个标记

转载 作者:行者123 更新时间:2023-11-29 22:02:39 25 4
gpt4 key购买 nike

我必须使用 JSON 解析制作一个多标记谷歌地图。任何有帮助代码的人。这样我就可以对它有所了解。我所做的 Activity 并不完全符合我的要求。这是我的 Activity

public class MapsActivity extends MapActivity{
private MapController mapControll;
private GeoPoint geoPoint=null;
private MapView mapview;
private MyItemizedOverlay userPicOverlay;
private MyItemizedOverlay nearPicOverlay;
private Drawable userPic,atmPic;
private OverlayItem nearatms[] = new OverlayItem[50];
public static Context context;
public double latitude;
public double longitude;


private List<String> lat = new ArrayList<String>();
private List<String> lon = new ArrayList<String>();
private String[] get_lati;
private String[] get_long;

@Override
protected void onCreate(Bundle icicle) {
// TODO Auto-generated method stub
super.onCreate(icicle);
context = getApplicationContext();
setContentView(R.layout.map);
lat.clear();
lon.clear();
Intent in = getIntent();
if(in!=null){
get_lati = in.getStringArrayExtra("LAT_KEY");
get_long = in.getStringArrayExtra("LONG_KEY");
System.out.println("lat===="+get_lati.length+" lon==="+get_long.length);
}
for(int i = 0;i<get_lati.length;i++){
String lt = null;
String ln = null;
lt =get_lati[i];
ln =get_long[i];

System.out.println("lt=="+lt+"==ln=="+ln);
}
showMap();
}

public void showMap() {
// TODO Auto-generated method stub

try {
double lat_dbl = Double.parseDouble(get_lati[0]);
double lon_dbl = Double.parseDouble(get_long[0]);
geoPoint = new GeoPoint((int)(lat_dbl * 1E6),(int)(lon_dbl * 1E6));
mapview = (MapView)findViewById(R.id.mapView);
mapControll= mapview.getController();
mapview.setBuiltInZoomControls(true);
mapview.setStreetView(true);
mapControll.setZoom(16);
mapControll.animateTo(geoPoint);

userPic = this.getResources().getDrawable(R.drawable.pin);
userPicOverlay = new MyItemizedOverlay(userPic);
OverlayItem overlayItem = new OverlayItem(geoPoint, "I'm Here!!!", null);
userPicOverlay.addOverlay(overlayItem);
mapview.getOverlays().add(userPicOverlay);


atmPic = this.getResources().getDrawable(R.drawable.pin);
nearPicOverlay = new MyItemizedOverlay(atmPic);
for (int i = 0; i < 5; i++) {
nearatms[i] = new OverlayItem(new GeoPoint((int)((latitude) * 1E6), i),"Name", null);//just check the brackets i just made change here so....
nearPicOverlay.addOverlay(nearatms[i]);
}
mapview.getOverlays().add(nearPicOverlay);
//Added symbols will be displayed when map is redrawn so force redraw now
mapview.postInvalidate();
} catch (Exception e) {
e.printStackTrace();
}
}

@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}



public class MyItemizedOverlay extends ItemizedOverlay<OverlayItem> {

private ArrayList<OverlayItem> myOverlays ;

public MyItemizedOverlay(Drawable defaultMarker) {
super(boundCenterBottom(defaultMarker));
myOverlays = new ArrayList<OverlayItem>();
populate();
}

public void addOverlay(OverlayItem overlay){
myOverlays.add(overlay);
populate();
}

@Override
protected OverlayItem createItem(int i) {
return myOverlays.get(i);
}

// Removes overlay item i
public void removeItem(int i){
myOverlays.remove(i);
populate();
}

// Returns present number of items in list
@Override
public int size() {
return myOverlays.size();
}


public void addOverlayItem(OverlayItem overlayItem) {
myOverlays.add(overlayItem);
populate();
}


public void addOverlayItem(int lat, int lon, String title) {
try {
GeoPoint point = new GeoPoint(lat, lon);
OverlayItem overlayItem = new OverlayItem(point, title, null);
addOverlayItem(overlayItem);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}

@Override
protected boolean onTap(int index) {
// TODO Auto-generated method stub
String title = myOverlays.get(index).getTitle();
//Toast.makeText(MapActivity.this, title, Toast.LENGTH_LONG).show();
return super.onTap(index);
}
}

最佳答案

您正在使用 latitude 创建一个地理点,但使用“i”而不是经度。

new GeoPoint((int)((latitude) * 1E6), i)

代替:

new GeoPoint((int)((latitude) * 1E6), (int)((longitude) * 1E6)) // + some variation based on i

因此所有的点彼此非常接近。

我假设您正在使用“i”来在您的位置附近创建单独的点,并且在最终产品中您将使用 ATM 点 DB。我建议您创建一个应该检索 ATM 位置的函数,并出于测试目的返回固定(但真实)的位置,或者在您的 lat/lng 周围随机化。 (这也是一种更好的编码实践。)

出于调试目的,记录您正在创建的实际点,您创建它们之后。如果所有纬度/经度数字看起来都一样,那么您就会知道发生了什么。如果只记录两点......那是一个不同的问题。 :-)

关于android - 使用 JSON 的谷歌地图中的多个标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11573845/

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