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

来源:互联网 发布:华讯网络薪资 编辑:程序博客网 时间:2024/06/05 16:51
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));

原创粉丝点击