Java Swing - 在 JPanel 上使用 GPS 坐标绘制站点名称
Java Swing - Draw Station Names using GPS Coordinates on JPanel
我正在做一项作业,但在某个时候卡住了。
我得到了一个包含一系列站点的 .txt
文件,我应该使用给我的 GPS 坐标绘制站点名称,但我无法将这些坐标转换为 JPanel
使用。此外,GPS 坐标以 double
s 写入,但 XY 坐标以 int
s 写入。
我怎样才能做到这一点?
这是无效的代码。
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);
}
现在,它所做的是找到最右边和最左边的站点以及最高和最低的位置,然后缩放所有内容以适合。
for (int i = 0; i < stations.size(); i++) {
extents();
scalingFactorx = width/(maxLat - minLat);
scalingFactory = height/(maxLong - minLong);
scalingFactor = Math.min(scalingFactorx, scalingFactory);
drawingX = (stations.get(i).getLatitude() - minLat) * scalingFactorx;
drawingY = (stations.get(i).getLongitude() - minLong) * scalingFactory;
drawingY2 = height - drawingY;
gr.drawString(stations.get(i).getName(), (int)drawingX, (int)drawingY2);
像这样应该可以解决问题。
我正在做一项作业,但在某个时候卡住了。
我得到了一个包含一系列站点的 .txt
文件,我应该使用给我的 GPS 坐标绘制站点名称,但我无法将这些坐标转换为 JPanel
使用。此外,GPS 坐标以 double
s 写入,但 XY 坐标以 int
s 写入。
我怎样才能做到这一点?
这是无效的代码。
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);
}
现在,它所做的是找到最右边和最左边的站点以及最高和最低的位置,然后缩放所有内容以适合。
for (int i = 0; i < stations.size(); i++) {
extents();
scalingFactorx = width/(maxLat - minLat);
scalingFactory = height/(maxLong - minLong);
scalingFactor = Math.min(scalingFactorx, scalingFactory);
drawingX = (stations.get(i).getLatitude() - minLat) * scalingFactorx;
drawingY = (stations.get(i).getLongitude() - minLong) * scalingFactory;
drawingY2 = height - drawingY;
gr.drawString(stations.get(i).getName(), (int)drawingX, (int)drawingY2);
像这样应该可以解决问题。