Probleme cu geocoder in Java Swing

voturi
0

Bună ziua, eu sunt construirea unui sistem la un proiect academic în Java Desktop. În acest proiect, am nevoie pentru a primi o adresă (cum ar fi „5th Avenue, NY“) și de a converti această adresă la coordonatele geografice (latitudine și longitudine) pentru a le stoca în baza de date. Aceste coordonate vor fi afișate pe o hartă.

Sunt folosind API-ul JxMaps, dar nu se poate adapta codul de exemplu geocoder pus la dispoziție de către acestea. Nu contează ce fac eu, codul pur și simplu nu funcționează. Cu toate acestea, în exemplu, funcționează.

Urmează un fragment din codul meu (adică la modelul de pachet):

package model;
import com.teamdev.jxmaps.GeocoderCallback;
import com.teamdev.jxmaps.GeocoderRequest;
import com.teamdev.jxmaps.GeocoderResult;
import com.teamdev.jxmaps.GeocoderStatus;
import com.teamdev.jxmaps.InfoWindow;
import com.teamdev.jxmaps.LatLng;
import com.teamdev.jxmaps.Map;
import com.teamdev.jxmaps.Marker;
import com.teamdev.jxmaps.swing.MapView;

import dao.tableMapa;

public class Geocoder extends MapView {

private boolean performGeocode(String text) {
    public boolean s;
    // Getting the associated map object
    final Map map = getMap();
    // Creating a geocode request
    GeocoderRequest request = new GeocoderRequest();
    // Setting address to the geocode request
    request.setAddress(text);

    // Geocoding position by the entered address
    getServices().getGeocoder().geocode(request, new GeocoderCallback(map) {
        @Override
        public void onComplete(GeocoderResult[] results, GeocoderStatus status) {
            // Checking operation status
            boolean r=false;
            if ((status == GeocoderStatus.OK) && (results.length > 0)) {
                // Getting the first result
                GeocoderResult result = results[0];
                // Getting a location of the result
                LatLng location = result.getGeometry().getLocation();

                tableMapa p=new tableMapa();
                r = p.Geocodification(location, text);
            }
        }
    });
  }
}

Și acest lucru este pe pachet Dao:

package dao;

import java.sql.Connection;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import com.teamdev.jxmaps.LatLng;
import model.ModeloMySql;
import model.pontoColeta;
import controller.fabricaConexao;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class tableMapa {
    private ModeloMySql modelo = null;

    public tableMapa() {

        modelo = new ModeloMySql();
        modelo.setDatabase(projeto);
        modelo.setServer(localhost);
        modelo.setUser(root);
        modelo.setPassword(1234);
        modelo.setPort(3306);
    }

    public boolean Geocodification(LatLng location, String address){
        Boolean status = true;

        Connection con;
        con = fabricaConexao.getConnection(modelo);

        if (con == null) {
            JOptionPane.showMessageDialog(null, Failed to connect);
        }

        //String sql = UPDATE TABLE set(latitude=+location.getLat()+,longitude=+location.getLng()+ from pontocoleta where address=+address+;;
        String sql = UPDATE pontoColeta set latitude = ? ,longitude = ? from pontocoleta where address = ?;

        try {
            PreparedStatement statement = con.prepareStatement(sql);

            statement.setDouble(1, location.getLat());
            statement.setDouble(2, location.getLng());
            statement.setString(3, address);
            statement.executeUpdate();

        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            fabricaConexao.closeConnection(con);
            return false;
        }

        return true;
    }

    public ArrayList<pontoColeta> pontosSelect() {
        Boolean status = true;

        Connection con;
        con = fabricaConexao.getConnection(modelo);

        // testa se conseguiu conectar
        if (con == null) {
            JOptionPane.showMessageDialog(null, Failed to connect);
        }

        ArrayList<pontoColeta> pontos = new ArrayList<>();

        String sql = SELECT * from pontocoleta;
        pontoColeta p;

        try {
            PreparedStatement statement = con.prepareStatement(sql);
            ResultSet result = statement.executeQuery();

            while(result.next()){
                    p = new pontoColeta();
                    LatLng c = new LatLng(result.getDouble(latitude), result.getDouble(longitude));
                    p.setCoordinates(c);
                    p.setIdPonto(result.getInt(idPonto));
                    p.setDescription(result.getString(description));
                    p.setAddress(result.getString(address));
                    p.setPhone(result.getString(phone));  
                    pontos.add(p);

                } 
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            status = false;
        } finally {
            // Fecha a conexao
            fabricaConexao.closeConnection(con);
        }
        return pontos;
    }
}

Nu pot face să funcționeze. Vă rog să mă ajutați!!

Întrebat 27/11/2017 la 18:47
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
0

Codul furnizat nu are un rol in care sunati performGeocode. Vă rugăm să verificați că numit după inițializare completă a MapView. Vă recomandăm să - l sun pe onMapReadyeveniment. Vă rugăm să aruncați o privire , de exemplu , cu condiția de mai jos:

MapView mapView = new MapView(); 

mapView.setOnMapReadyHandler(new MapReadyHandler() {
   @Override
   public void onMapReady(MapStatus status) {
       ...
       performGeocode(...);
   });
Publicat 28/11/2017 la 07:41
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more