Java Swing - 在 JPanel 上使用 GPS 坐标绘制站名称

标签 java swing graphics jpanel

我正在做一项作业,但在某个时刻陷入困境。 我得到了一个包含一系列站点的 .txt 文件,我应该使用给定的 GPS 坐标来绘制站点名称,但我无法将这些坐标转换为JPanel 使用。此外,GPS 坐标以 double 形式写入,而 XY 坐标则以 int 形式写入。 我怎样才能实现这个目标?

这是不起作用的代码。

     void extents() {
 minLong = Double.MAX_VALUE;
 minLat = Double.MAX_VALUE;
 maxLong = -Double.MIN_VALUE;
 maxLat = -Double.MIN_VALUE;

for(Station station : stations){

    if(station.getLatitude()>maxLat){
        maxLat = station.getLongitude();
        maxLong = station.getLongitude();
    }
    if(station.getLatitude()<minLat){
        minLat = station.getLongitude();
        minLong = station.getLongitude();
    }
    if(station.getLongitude()>maxLong){
        maxLong = station.getLongitude();
    }
    if(station.getLongitude()<minLong){
        minLong = station.getLongitude();
    }
}

我正在尝试使用以下方法绘制它们:

 for (int i = 0; i < stations.size(); i++) {

       double scalingFactorx = width/(maxLat - minLat);
double scalingFactory = height/(maxLong - minLong);
double scalingFactor = Math.min(scalingFactorx, scalingFactory);

double drawingX = stations.get(i).getLatitude() * scalingFactor;
double drawingY = stations.get(i).getLongitude() * scalingFactor;
double drawingY2 = height - drawingY; 
gr.drawString(stations.get(i).getName(), (int)drawingX/100, (int)drawingY2/200);
      }

我现在为每个站点获取了不同的坐标,但是,它们仍然太近,这意味着它们没有缩放到 JPanel

谢谢!

最佳答案

嗯,
首先,您应该将最小值和最大值设置为站点的实际最小值和最大值:

double minLong = Double.MAX_VALUE;
double minLat = Double.MAX_VALUE;
double maxLong = -Double.MIN_VALUE;
double maxLat = -Double.MIN_VALUE;

for(Station station : stations){

    if(station.getLatitude()>maxLat){
        maxLat = station.getLongitude();
        maxLong = station.getLongitude();
    }
    if(station.getLatitude()<minLat){
        minLat = station.getLongitude();
        minLong = station.getLongitude();
    }
    if(station.getLongitude()>maxLong){
        maxLong = station.getLongitude();
    }
    if(station.getLongitude()<minLong){
        minLong = station.getLongitude();
    }
}

然后您可以在绘制方法中执行此操作:

for (int i = 0; i < stations.size(); i++) {

    double scalingFactorx = width/(maxLat - minLat);
    double scalingFactory = height/(maxLong - minLong);
    double scalingFactor = Math.min(scalingFactorx, scalingFactory);

    double drawingX = (stations.get(i).getLatitude() - minLat)/(maxLat-minLat);
    double drawingY = (stations.get(i).getLongitude() - minLong)/(maxLong-minLong);
    //double drawingY2 = height - drawingY; This line isn't needed. It causes the text to be drawn outside the jpanel.
    gr.drawString(stations.get(i).getName(), (int)drawingX, (int)drawingY);

}

现在,它的作用是找到最右边和最左边的车站以及最高和最低的位置,然后缩放所有内容以适应。

关于Java Swing - 在 JPanel 上使用 GPS 坐标绘制站名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43820656/

相关文章:

java - JOptionpane 检查是否输入了某些输入文本,如果没有,则确定按钮不起作用

跨顶点的 OpenGL 颜色插值

c# - 自定义绘制下拉面板在控制范围之外

将最少的矩形拟合为不规则形状的算法

java - 可编辑 JCombobox mouseclicked 事件不起作用

java - SQL Server 环境问题,SQL Error 207 Invalid column name sqlstate 42s22

java - 为什么我们在 case 语句之后需要 break?

java - 如何为用户定义的输入提供转义序列

java - 配置context.xml时在java Spring中使用重载方法

java - 将 JTextField 格式化为最多接受三位数字,但最多可以输入 1-3 位数字