2017-11-27 11 views
0

안녕하세요, Java Desktop에서 학술 프로젝트에 시스템을 구축하고 있습니다. 이 프로젝트에서 주소 (예 : "5th avenue, NY")를 받고이 주소를 지리적 좌표 (위도 및 경도)로 변환하여 데이터베이스에 저장해야합니다. 이 좌표는지도에 표시됩니다.자바 스윙의 지오 코더 문제

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

나는 그것이 작동 할 수 없습니다. 도와주세요 !!

답변

0

제공된 코드에는 performGeocode과 같은 부품이 없습니다. MapView의 초기화가 완료된 후 호출되었는지 확인하십시오. onMapReady 이벤트에서 전화하는 것이 좋습니다. 아래에 제공된 예를 참조하십시오.

MapView mapView = new MapView(); 

mapView.setOnMapReadyHandler(new MapReadyHandler() { 
    @Override 
    public void onMapReady(MapStatus status) { 
     ... 
     performGeocode(...); 
    });