OSMdroid Добавление нового маркера - PullRequest
0 голосов
/ 15 апреля 2020

Я занимаюсь разработкой приложения, которое использует OSMdroid. Основное внимание уделяется нажатию на кнопку, новый маркер будет добавлен к текущему местоположению, в котором пользователь добавляет имя, тип, цену, широту и долготу. Проблема в том, что когда я меняю местоположение, ранее добавленный маркер меняет свои значения и показывает только широту и долготу при нажатии. И когда я пытаюсь добавить новый маркер, он добавляет эти значения в первый созданный маркер.

Это мой код. Спасибо

 public void onCreate(Bundle savedInstanceState)
{

    super.onCreate(savedInstanceState);

    Configuration.getInstance().load(this, PreferenceManager.getDefaultSharedPreferences(this));

    setContentView(R.layout.addplace);

    final EditText name = (EditText) findViewById(R.id.nameTXT);
    final EditText type = (EditText) findViewById(R.id.typeTXT);
    final EditText price = (EditText) findViewById(R.id.priceTXT);
    addplace = (Button) findViewById(R.id.btnAddPlace);

    map = findViewById(R.id.map1);
    map.setMultiTouchControls(true);
    map.getController().setZoom(16.0);

    markerGestureListener = new ItemizedIconOverlay.OnItemGestureListener<OverlayItem>() {
        public boolean onItemLongPress(int i, OverlayItem item) {
            Toast.makeText(AddNewPlace.this, item.getSnippet(), Toast.LENGTH_SHORT).show();
            return true;
        }

        public boolean onItemSingleTapUp(int i, OverlayItem item) {
            Toast.makeText(AddNewPlace.this, item.getSnippet(), Toast.LENGTH_SHORT).show();
            return true;
        }
    };

    LocationManager mgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

    try{
         location =  mgr.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        if (location!=null){
            latitude = location.getLatitude();
            longitude = location.getLongitude();
        }}catch(SecurityException e){
        e.printStackTrace();
    }

    map.getController().setCenter(new GeoPoint(latitude, longitude));

   items = new ItemizedIconOverlay<OverlayItem>(this, new ArrayList<OverlayItem>(), markerGestureListener);
    OverlayItem newPlace = new OverlayItem("Current Location", "Latitude:" + latitude + " Longitude: " +
            longitude, new GeoPoint(latitude, longitude));
    newPlace.setMarker(getResources().getDrawable(R.drawable.marker_default));
    items.addItem(newPlace);

    map.getOverlays().add(items);


    try {

        mgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 15, this);
    } catch (SecurityException e) {
        e.printStackTrace();
    }


    addplace.setOnClickListener(new View.OnClickListener() {

        public void onClick (View v) {

            String namePTS = name.getText().toString();
            String typePTS = type.getText().toString();
            String pricePTS = price.getText().toString();

            if (namePTS.isEmpty() && typePTS.isEmpty() && pricePTS.isEmpty()) {
                Toast.makeText(AddNewPlace.this, "Fields are empty", Toast.LENGTH_SHORT).show();
            } else if (namePTS.isEmpty()) {
                Toast.makeText(AddNewPlace.this, "Name is empty", Toast.LENGTH_SHORT).show();
            } else if (typePTS.isEmpty()) {
                Toast.makeText(AddNewPlace.this, "Type is empty", Toast.LENGTH_SHORT).show();
            } else if (pricePTS.isEmpty()) {
                Toast.makeText(AddNewPlace.this, "Price is empty", Toast.LENGTH_SHORT).show();
            } else {

                markerGestureListener = new ItemizedIconOverlay.OnItemGestureListener<OverlayItem>() {
                    public boolean onItemLongPress(int i, OverlayItem item) {
                        Toast.makeText(AddNewPlace.this, item.getSnippet(), Toast.LENGTH_SHORT).show();
                        return true;
                    }

                    public boolean onItemSingleTapUp(int i, OverlayItem item) {
                        Toast.makeText(AddNewPlace.this, item.getSnippet(), Toast.LENGTH_SHORT).show();
                        return true;
                    }
                };

                items = new ItemizedIconOverlay<OverlayItem>(AddNewPlace.this, new ArrayList<OverlayItem>(), markerGestureListener);
                final OverlayItem newPOI = new OverlayItem("Place of interest", "Name= " + namePTS + " Type= " + typePTS +
                        " Price= " + pricePTS + " Latitude= " +location.getLatitude() + " Longitude= " + location.getLongitude(),
                        new GeoPoint(location.getLatitude(), location.getLongitude()));
                newPOI.setMarker(getResources().getDrawable(R.drawable.marker_default));
                items.addItem(newPOI);

                map.getOverlays().add(items);

                Toast.makeText(AddNewPlace.this, "New place added with success", Toast.LENGTH_SHORT).show();

                try{

                    File file = new File(Environment.getExternalStorageDirectory(), "placestostay.txt");

                    BufferedWriter writer = new BufferedWriter(new FileWriter(file,true));
                    file.createNewFile();
                    writer.write(namePTS);
                    writer.write(", ");
                    writer.write(typePTS);
                    writer.write(", ");
                    writer.write(pricePTS);
                    writer.write(", ");
                    writer.write(Double.toString(location.getLatitude()));
                    writer.write(", ");
                    writer.write(Double.toString(location.getLongitude()));
                    writer.newLine();
                    writer.flush();
                    writer.close();
                }

                catch (IOException e) {
                    e.printStackTrace();
                }


            }
    }
    }
    );
}



public void onLocationChanged(Location newLoc) {

    double lat = newLoc.getLatitude();
    double lon = newLoc.getLongitude();

    map.getController().setCenter(new GeoPoint(newLoc.getLatitude(), newLoc.getLongitude()));

    OverlayItem currentLocation = new OverlayItem("Current Location", "Current location", new GeoPoint(lat, lon));
    currentLocation.setMarker(getResources().getDrawable(R.drawable.marker_default));

    items.removeAllItems();
    items.addItem( currentLocation);
    map.getOverlays().add(items);


    Toast.makeText(this, "Latitude=" +
            newLoc.getLatitude() + " Longitude=" +
            newLoc.getLongitude(), Toast.LENGTH_LONG).show();

}
...