如果我想在地图上使用GPS加覆盖项目 [英] if i want to add overlay items on map using gps
本文介绍了如果我想在地图上使用GPS加覆盖项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这是我的code 在此输入code
<
here is my code enter code here
<
package ntryn.n;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import com.google.android.maps.MapController;
import com.google.android.maps.GeoPoint;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.Geocoder;
import android.location.Address;
import com.google.android.maps.Overlay;
import android.graphics.Canvas;
import android.graphics.Point;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Drawable;
import java.util.List;
import java.util.Locale;
import java.io.IOException;
import android.os.Bundle;
import android.widget.Toast;
public class ntryn extends MapActivity {
private MapView mapView;
private MapController mapController;
private LocationManager locationManager;
private LocationListener locationListener;
List<Overlay> mapOverlays;
Drawable drawable, drawable2 ;
HelloItemizedOverlay itemizedoverlay;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationListener = new GPSLocationListener();
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
0,
0,
locationListener);
mapView = (MapView) findViewById(R.id.mapView);
// enable Street view by default
mapView.setStreetView(true);
// enable to show Satellite view
// mapView.setSatellite(true);
// enable to show Traffic on map
// mapView.setTraffic(true);
mapView.setBuiltInZoomControls(true);
mapController = mapView.getController();
mapController.setZoom(16);
mapController = mapView.getController();
mapView.invalidate();
GeoPoint p;
String coordinates[] = {"30.084691643714909", "31.335958242416382"};
double lat = Double.parseDouble(coordinates[0]);
double lng = Double.parseDouble(coordinates[1]);
p = new GeoPoint(
(int) (lat * 1E6),
(int) (lng * 1E6));
mapController.animateTo(p);
mapController.setZoom(17);
// HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable);
MapOverlay mapOverlay = new MapOverlay();
List<Overlay> listOfOverlays = mapView.getOverlays();
listOfOverlays.clear();
listOfOverlays.add(mapOverlay);
mapView.invalidate();
}
@Override
protected boolean isRouteDisplayed() {
return false;
}
private class GPSLocationListener implements LocationListener
{
public void onLocationChanged(Location location) {
if (location != null) {
GeoPoint point = new GeoPoint(
(int) (location.getLatitude() * 1E6),
(int) (location.getLongitude() * 1E6));
/* Toast.makeText(getBaseContext(),
"Latitude: " + location.getLatitude() +
" Longitude: " + location.getLongitude(),
Toast.LENGTH_SHORT).show();*/
mapController.animateTo(point);
mapController.setZoom(16);
// GeoPoint point1 = new GeoPoint{"30.084691643714909,31.335958242416382"};
// add marker
MapOverlay mapOverlay = new MapOverlay();
mapOverlay.setPointToDraw(point);
List<Overlay> listOfOverlays = mapView.getOverlays();
listOfOverlays.clear();
listOfOverlays.add(mapOverlay);
String address = ConvertPointToLocation(point);
Toast.makeText(getBaseContext(), address, Toast.LENGTH_SHORT).show();
mapView.invalidate();
}
}
public String ConvertPointToLocation(GeoPoint point) {
String address = "";
Geocoder geoCoder = new Geocoder(
getBaseContext(), Locale.getDefault());
try {
List<Address> addresses = geoCoder.getFromLocation(
point.getLatitudeE6() / 1E6,
point.getLongitudeE6() / 1E6, 1);
if (addresses.size() > 0) {
for (int index = 0; index < addresses.get(0).getMaxAddressLineIndex(); index++)
address += addresses.get(0).getAddressLine(index) + " ";
}
}
catch (IOException e) {
e.printStackTrace();
}
return address;
}
public void onProviderDisabled(String provider) {
}
public void onProviderEnabled(String provider) {
}
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}
class MapOverlay extends Overlay
{
private GeoPoint pointToDraw;
private GeoPoint p1;
public void setPointToDraw(GeoPoint point) {
pointToDraw = point;
}
public GeoPoint getPointToDraw() {
return pointToDraw;
}
public void setp1(GeoPoint po1) {
p1 = po1;
}
public GeoPoint getp1() {
return p1;
}
@Override
public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) {
super.draw(canvas, mapView, shadow);
// convert point to pixels
Point screenPts = new Point();
mapView.getProjection().toPixels(pointToDraw, screenPts);
// add marker
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.dotred);
canvas.drawBitmap(bmp, screenPts.x, screenPts.y - 24, null); // 24 is the height of image
return true;
}
}
}
什么是错我做我想添加其他叠加,而不是一个,当我打开GPS在我的特定位置出现
whats wrong i'm doing i want to add other overlay rather than the one appear when i open the gps at my specific location
推荐答案
我会尝试的基础上的(小)的信息你给了回答。
I'll try to answer based on the (little) info you gave.
您code显示MapOverlay绘制一个位图在一个点上。
Your code shows a MapOverlay that draws a bitmap over one point.
- 在您的应用程序的
的onCreate()
方法创建MapOverlay并将其添加到YOUT图形页面,的叠加打印列表中,但你永远不会调用setPointToDraw()
,所以你最终有一个空的GeoPoint - 您总是清除覆盖的列表之前addind一个新的,所以你总是最后一个叠加。
- 如果你想显示多点,你可以使用<一个href="http://$c$c.google.com/intl/es-419/android/add-ons/google-apis/reference/com/google/android/maps/ItemizedOverlay.html"相对=nofollow> ItemizedOverlay
- 如果你想显示用户的当前位置,你可以使用<一个href="http://$c$c.google.com/intl/es-419/android/add-ons/google-apis/reference/com/google/android/maps/MyLocationOverlay.html"相对=nofollow> MyLocationOverlay
- In the
onCreate()
method of your application you create MapOverlay and add it to the list of overlays of yout MapView, but you never callsetPointToDraw()
so you end up with a null GeoPoint - You are always clearing the list of overlays before addind a new one, so you always end up with one overlay.
- If you want to display multiple points you can use ItemizedOverlay
- If you want to display the users current location you can use MyLocationOverlay
这篇关于如果我想在地图上使用GPS加覆盖项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文