Προβλήματα με Geocoder σε Java Swing

ψήφοι
0

Καλησπέρα, είμαι οικοδόμηση ενός συστήματος σε ένα ακαδημαϊκό έργο σε Java Desktop. Σε αυτό το έργο, θα πρέπει να λάβει μια διεύθυνση (όπως το «5η λεωφόρο της Νέας Υόρκης»), και να μετατρέψετε αυτή τη διεύθυνση σε γεωγραφικές συντεταγμένες (γεωγραφικό μήκος και πλάτος) για να τα αποθηκεύσει στη βάση δεδομένων. Αυτές οι συντεταγμένες θα εμφανίζονται στο χάρτη.

Είμαι χρησιμοποιώντας το API JxMaps, αλλά δεν μπορώ να προσαρμόσει το παράδειγμα κώδικα Geocoder που διατίθενται από αυτούς. Δεν έχει σημασία τι κάνω, ο κώδικας ακριβώς δεν λειτουργεί. Ωστόσο, το παράδειγμα, λειτουργεί.

Ακολουθεί ένα απόσπασμα από τον κωδικό μου (που είναι στο πρότυπο πακέτο):

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);
            }
        }
    });
  }
}

Και αυτό είναι στο Τάο Συσκευασία:

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;
    }
}

Δεν μπορώ να την κάνουμε να λειτουργήσει. Σε παρακαλώ βοήθησέ με!!

Δημοσιεύθηκε 27/11/2017 στις 18:47
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
0

Υπό την προϋπόθεση κώδικας δεν έχει ένα μέρος όπου μπορείτε να καλείτε performGeocode. Παρακαλώ ελέγξτε ότι ονομάζεται μετά την πλήρη προετοιμασία του MapView. Θα ήθελα να συστήσω να καλέσει την onMapReadyεκδήλωση. Παρακαλώ ρίξτε μια ματιά ένα παράδειγμα που παρέχεται παρακάτω:

MapView mapView = new MapView(); 

mapView.setOnMapReadyHandler(new MapReadyHandler() {
   @Override
   public void onMapReady(MapStatus status) {
       ...
       performGeocode(...);
   });
Απαντήθηκε 28/11/2017 στις 07:41
πηγή χρήστη

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