java版 经纬度和屏幕坐标互相转换

public class GoogleMapsAPIProjection
{
    private double PixelTileSize = 256d;
    private double DegreesToRadiansRatio = 180d / Math.PI;
    private double RadiansToDegreesRatio = Math.PI / 180d;
    private PointF PixelGlobeCenter;
    private double XPixelsToDegreesRatio;
    private double YPixelsToRadiansRatio;

    public GoogleMapsAPIProjection(double zoomLevel)
    {
        double pixelGlobeSize = this.PixelTileSize * Math.pow(2d, zoomLevel);
        this.XPixelsToDegreesRatio = pixelGlobeSize / 360d;
        this.YPixelsToRadiansRatio = pixelGlobeSize / (2d * Math.PI);
        double halfPixelGlobeSize = pixelGlobeSize / 2d;
        this.PixelGlobeCenter = new PointF(halfPixelGlobeSize, halfPixelGlobeSize,0d);
    }

    public PointF FromCoordinatesToPixel(PointF coordinates)
    {
        double x = Math.round(this.PixelGlobeCenter.getX()
                + (coordinates.getX() * this.XPixelsToDegreesRatio));
        double f = Math.min(
                Math.max(
                        Math.sin(coordinates.getY() * RadiansToDegreesRatio),
                        -0.9999d),
                0.9999d);
        double y = Math.round(this.PixelGlobeCenter.getY() + .5d *
                Math.log((1d + f) / (1d - f)) * -this.YPixelsToRadiansRatio);
        return new PointF(x, y, 0d);
    }

    public PointF FromPixelToCoordinates(PointF pixel)
    {
        double longitude = (pixel.getX() - this.PixelGlobeCenter.getY()) /
                this.XPixelsToDegreesRatio;
        double latitude = (2 * Math.atan(Math.exp(
                (pixel.getY() - this.PixelGlobeCenter.getY()) / -this.YPixelsToRadiansRatio))
                - Math.PI / 2) * DegreesToRadiansRatio;
        return new PointF(latitude, longitude, 0d);
    }
}
调用 经纬度转屏幕坐标:
GoogleMapsAPIProjection gmap = new GoogleMapsAPIProjection(levelOfDetail);
PointF out = gmap.FromCoordinatesToPixel(new PointF(longitude,latitude, 0f));

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 经纬度和平面坐标系是两种不同的坐标系统,它们的转换涉及到地图投影和数学计算。 一般来说,经纬度是用来表示地球上某一点位置的坐标系统,经度表示东西方向上的位置,纬度表示南北方向上的位置。而平面坐标系则是用来表示地球上某一区域的平面坐标系统,常见的有UTM和高斯-克吕格投影等。 经纬度和平面坐标系之间的转换可以通过以下步骤进行: 1. 选择合适的地图投影系统,例如UTM或高斯-克吕格投影等。 2. 将经纬度坐标转换为对应的投影坐标。 3. 对于不同的投影坐标系,需要进行对应的投影参数计算和坐标变换。 4. 将投影坐标转换为对应的平面坐标坐标。 需要注意的是,在进行经纬度和平面坐标系之间的转换时,需要考虑地球椭球体的形状,以及所采用的投影系统的特点,以确保转换的准确性。 ### 回答2: 经纬度和平面坐标转换是将地球表面的经纬度坐标(经度和纬度)转换成平面上的直角坐标坐标(x和y坐标)。这种转换通常用于地图投影、测绘和导航系统中。 在经纬度坐标系中,地球被划分为纬线和经线。纬线是从南北极延伸出的平行线,用来表示纬度。经线是在地球上从东到西的弧线,用来表示经度。经纬度用度(°)来表示,并且从赤道的纬度0°开始,如果是北纬则为正值,如果是南纬则为负值;从本初子午线(通常是格林尼治子午线)开始,向东为正值,向西为负值。 而平面坐标系则采用直角坐标系的形式,其中坐标轴通常是直角的。平面坐标系使用水平坐标(X轴)和垂直坐标(Y轴)来表示点的位置。这种坐标系与地球表面的形状和尺寸无关,适用于小范围的测量和地图绘制。 转换经纬度和平面坐标系的方法需要考虑地球的形状和尺寸,以及所采用的投影方法。常用的转换方法包括经纬度的直角投影、圆锥投影、柱面投影等。根据具体的需求和应用场景,选择不同的投影方法和参数可以实现更精确的坐标转换。 总结来说,经纬度和平面坐标转换是将地球表面的经纬度坐标转换成平面上的直角坐标坐标的过程。这种转换在地图、测绘和导航系统中广泛应用,需要考虑地球的形状、尺寸和采用的投影方法。 ### 回答3: 经纬度和平面坐标转换是地理学和测绘学常用的一项工作,主要是将地球上的经纬度坐标转换为平面坐标坐标,或者将平面坐标坐标转换经纬度坐标。这种转换涉及到了地球的形状、大地测量学和映射变换等知识。 地球是一个近似的椭球体,所以经度和纬度用来描述地球上的位置。经度指的是从地球中心点到地球表面上某一点所画线与某一参考标准的夹角,通常用东西方向的角度来表示;纬度指的是从地球中心点到地球表面上某一点所画线与赤道的夹角,通常用南北方向的角度来表示。 平面坐标系则是用笛卡尔坐标系表示地球表面上的位置,一般在局部地区使用。平面坐标系使用直角坐标系,通过X坐标和Y坐标来表示点的位置。常见的平面坐标系有高斯-克吕格投影、UTM投影等。 经纬度和平面坐标系之间的转换需要借助空间大地测量学中的大地基准面和坐标转换模型。大地基准面是一个用于建立地球表面位置的基准面,常见的有WGS84、CGCS2000等。而坐标转换模型则是将经纬度坐标转换为平面坐标坐标或者将平面坐标坐标转换经纬度坐标的数学模型,常见的有高斯转换和UTM转换等。 通过这些模型和方法,我们可以将地球上任意一点的经纬度坐标转换为平面坐标坐标,方便进行地图制作、空间分析、导航定位等工作。同时,也可以将平面坐标坐标转换经纬度坐标,便于进行地理信息系统、测量制图等工作。这种转换在地理学和测绘学的研究和实际应用中具有重要的意义。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值