0

下午好,我正在为 Java Desktop 中的一个学术项目构建一个系统。在这个项目中,我需要接收一个地址(如“纽约第五大道”)并将该地址转换为地理坐标(纬度和经度)以将它们存储在数据库中。这些坐标将显示在地图上。

我正在使用 JxMaps API,但我无法调整他们提供的示例地理编码器代码。无论我做什么,代码都不起作用。但是,在示例中,它可以工作。

遵循我的代码片段(即包模型):

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

我不能让它工作。请帮我!!

4

1 回答 1

0

提供的代码没有您正在调用的部分performGeocode。请检查它是否在MapView. 我建议在onMapReady活动中调用它。请看下面提供的示例:

MapView mapView = new MapView(); 

mapView.setOnMapReadyHandler(new MapReadyHandler() {
   @Override
   public void onMapReady(MapStatus status) {
       ...
       performGeocode(...);
   });
于 2017-11-28T07:41:37.470 回答