2016-03-07 267 views
0

我一直在寻找经度和纬度的转换,并找到了我目前正在使用的这个算法,并且不确定这是否是正确的算法。另外我如何使用工具提示在地图图片上绘制特定的坐标。我尝试覆盖JPanel内的paintComponent方法,但我需要标记图片作为标签,以便我可以正确使用JTooltip。以下是我正在使用的算法。请让我知道它的权利,以及如何将另一张图片放在主图片的顶部。与使用JLabel一样,我使用setBounds方法来设置位置,但dosent正常工作时给出了要放置的点的列表。用于将longititude和lattitude转换为x和y坐标的Meractor投影

公共点getXY(双人间经度,纬度双人间){

List<Integer> list = new ArrayList<Integer>(); 
    double mapWidth = 2000; 
    double mapHeight = 1000; 
    // get x value 
    double x = (longitude + 180) * (mapWidth/360); 
    int x1 = (int) Math.round(x); 
    list.add(x1); 
    // convert from degrees to radians 
    double latRad = latitude * Math.PI/180; 

    // get y value 
    double mercN = Math.log(Math.tan((Math.PI/4) + (latRad/2))); 
    double y = (mapHeight/2) - (mapWidth * mercN/(2 * Math.PI)); 
    int y1 = (int) Math.round(y); 
    list.add(y1); 
    return new Point(x1, y1); 
} 

回答

0

我想如果你有方程,实现是直线前进。但是,对于像这样的操作,最好使用Geotools,这是一个提供类似GIS功能的开源Java库。下面是一个教程显示如何可以不同的坐标参考系之间的变换:geotools CRS tutorial
下面是一个教程,showes你如何处理图像和CRS-坐标:
Geotools Affine transformation

0

从纬度/经度对任何转换XY被称为“投影”,并且有很多不同的。没有“正确的”投影,因为从球体或椭圆体(地球稍微变平而不是完美的球体)到平面的任何映射都会涉及一些失真。

你不说你在这里使用什么投影。你应该,即使它只是一个基本的,以便任何人在将来阅读代码知道你从哪里得到方程式,并可以检查它们的正确性。另外,在这种情况下,我们无法告诉你,如果没有关于“正确”意味着什么的概念,你是否做对了。

您是否尝试过一些测试数据?如果您大致了解您期望的结果,例如如果您有使用相同投影的纸质地图,则可以通过为特定地标放置经纬度并检查XY结果是否与地图位置匹配来验证算法。也有一些网站可以为特定的预测提供准确的转换,如果这是您需要的。

正确的投影非常取决于你想要做什么。这听起来像你只是想要一个小地理区域(如美国或欧洲国家)的可识别渲染。如果是这样,那么几乎任何投影都可以做到。

如果你想要一些准确的东西,那么你可以测量地图上的距离或角度,或者在一英里长距离内进行导航,那么生活变得非常快速,如果你可以使用预先存在的库,那么它的a非常好的主意。但我不认为你在这里需要什么。

相关问题