我设置了特定静态地图图像的最小经度和纬度值.那张地图图片是某个国家的剪影.
/**
 * Maximum longitude value of the map
 */
private float mapLongitudeMax;

/**
 * Minimum longitude value of the map
 */
private float mapLongitudeMin;

/**
 * Maximum latitude value of the map
 */
private float mapLatitudeMax;

/**
 * Minimum latitude value of the map
 */
private float mapLatitudeMin;

我有一个名为mapImage的BufferedImage.

我有一个我和朋友一起写的方法,它接收经度和纬度,并在地图上给你一个X和Y位置,这样你就可以在地图上绘制一些东西.

现在,如果我想在地图上移动鼠标,我希望它显示我的鼠标位置的经度/纬度,这意味着我需要创建一个方法,将鼠标位置的X和Y转换为经度和纬度,这应该做与我的另一种方法相反.

这是我将地球坐标转换为图像X和Y的方法:

protected Location getCoordinatesByGlobe(float latitude,float longitude) {

    /**
     * Work out minimum and maximums,clamp inside map bounds
     */
    latitude = Math.max(mapLatitudeMin,Math.min(mapLatitudeMax,latitude));
    longitude = Math.max(mapLongitudeMin,Math.min(mapLongitudeMax,longitude));

    /**
     * We need the distance from 0 or minimum long/lat
     */
    float adjLon = longitude - mapLongitudeMin;
    float adjLat = latitude - mapLatitudeMin;

    float mapLongWidth = mapLongitudeMax - mapLongitudeMin;
    float mapLatHeight = mapLatitudeMax - mapLatitudeMin;

    float mapWidth = mapImage.getWidth();
    float mapHeight = mapImage.getHeight();

    float longPixelRatio = mapWidth / mapLongWidth;
    float latPixelRatio = mapHeight / mapLatHeight;

    int x = Math.round(adjLon * longPixelRatio) - 3;// these are offsets for the target icon that shows.. eedit laterrr @oz
    int y = Math.round(adjLat * latPixelRatio) + 3; //

    // turn it up
    y = (int) (mapHeight - y);

    return new Location(x,y);
}

现在我试着思考,第一个进入脑海中的想法就是反过来做同样的事情…所以我开始这样做,我遇到了类似的问题,我没有经度就得到adjLon或adjLat的值或纬度,所以这不能简单地通过反转来完成.我对坐标系统都很陌生,所以对我来说有点混乱,但我开始追上它.

有什么提示吗?

编辑(不可能?)

根据this answer,你不可能真正得到真实的结果,因为地球不是平坦的,它不能真正转换成具有经度和纬度的平面地图而不实施真正的数学算法以使其适应变化.

我的代码中有几个原因导致答案不准确:

>由于上述原因
>因为我的X,Y值是整数而不是浮点数.

所以现在我的问题是,如果我的方法真的不可能吗?

解决方法

可悲的是,这并不是一个简单的答案.虽然您可以自己编写投影例程,但最简单的方法可能是获取GIS库,但由于我最终在C#而不是Java中执行此操作,因此我不知道可用的内容.

您需要的最大信息就是地图图像使用的投影. The Mercator Projection很受欢迎,但它不是唯一的.您还需要确保所选投影适用于您想要的纬度和经度范围.如果你开始超过-70 N,那么墨卡托投影就会中断,所以如果你在极点做很多位置可能不适合你.

java – 将图像X,Y坐标转换为经度和纬度?的更多相关文章

  1. PHP实现腾讯与百度坐标转换

    下面小编就为大家带来一篇PHP实现腾讯与百度坐标转换。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. iOS学习教程之UIView中坐标转换详解

    这篇文章主要给大家介绍了关于iOS UIView中坐标转换的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来跟着小编一起看看吧。

  3. 用于将UTM坐标转换为纬度和经度的开源PHP函数?

    我正在制作一个涉及谷歌地图的PHP应用程序.地图仅接受lat&lng对,我想要显示的数据仅带有UTM样式坐标.是否有一个开源PHP函数可以从一个转换为另一个?像这样的东西会很棒:谢谢我找到了一个可以完成这项任务的脏课.通过脏我的意思是函数名称是不稳定的,代码不是非常精美的格式,但它确实做了工作.>gPoint.php–byBrenorBrophy如果我找到更好的课程,我一定会更新这个答案

  4. Flex中常用的经纬度坐标与墨卡托坐标转换代码

    总结以上是DEVMAX为你收集整理的Flex中常用的经纬度坐标与墨卡托坐标转换代码全部内容。如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站推荐给好友。

  5. cocos2d-x 的坐标

    所以玩cocos2d,一上来就先把各种与坐标有关的东西搞清楚。convertToNodeSpace方法可以把世界坐标转换到当前node的本地坐标系中。另一个关键的问题就是在cocos2d里面就是各种对象的大小问题。因为在cocos2d里CCNode对象有缩放的方法setScaleX和setScaleY。当然cocos2d里提供了对应的函数来完成这些操作。boundingBox函数用来获得经过缩放和旋转之后的外框盒大小。其中pTouch是CCTouch对象的指针,包含了当前触摸事件发生点的坐标。

  6. cocos2d-x坐标系统

    比如调用CCNode类的setPosition函数,它使用的就是GL坐标系。比如在处理触摸事件时CCTouch对象中的坐标就是屏幕坐标系。另一个重要的坐标系就是和Node相关的本地坐标系。convertToNodeSpace方法可以把世界坐标转换到当前node的本地坐标系中。另一个关键的问题就是在cocos2d里面就是各种对象的大小问题。因为在cocos2d里CCNode对象有缩放的方法setScaleX和setScaleY。当然cocos2d里提供了对应的函数来完成这些操作。boundingBox函数用

  7. cocos2d-x3.2中的getVisibleSize,getContentSize,boundingBox,getContentSizeInPixels,convertToGL,convertTo

    Node类的setPosition,getPosition函数如果是一个Node的Child则获取的坐标就是该Node的本地坐标另一个关键问题就是在cocos2d-x里就是各种对象的大小问题。因为在cocos2d-x里Node对象有缩放的方法setScaleX和setScaleY。当然cocos2d-x里提供了对应函数来完成这些操作:getContentSize函数来获得节点原始的大小。boundingBox函数来获得经过缩放和旋转之后的外框盒大小,返回CGRect类型。convertToNodeSpac

  8. cocos2d 坐标转换

    世界坐标系也叫做绝对坐标系,cocos2d中的元素是有父子关系的层级结构,我们通过CCNode的position设定元素的位置使用的是相对与其父节点的本地坐标系而非世界坐标系。最后在绘制屏幕的时候cocos2d会把这些元素的本地坐标映射成世界坐标系坐标。比如用cocos2d-x创建了个矩形colorLayer:CCRect,这是的本地坐标系为以为坐标原点,x轴向右,y轴向上。

  9. cocos2d-x 中不同layer下的node的坐标转换

    在网上搜出来的这些个坐标转换的例子都好官方,无论是解释还是例子都不实在。但在具体的项目开发中总是遇到各种坐标转换的问题。这里记录一下不同layer下两个坐标的转换。那么,下面我用一段简单的lua代码来解决这个问题。注意,这是在忽略锚点是用的函数哈~

  10. cocos2dx 坐标转换相关函数应用演示

    坐标问题对于每一个初学者都是一个必须清晰的问题,但是一口气不能吃成胖子,面对这么函数怎么能一口气全部知道呢,毕竟初学(包括我),所以用现象说话,用实验论证,与其百度,不妨亲手一试,废话不多说上Demo,Code。随便找一个空场景的Init里面加上此段,就可以用鼠标点击来看看,各种坐标到底转化成了什么。最后总结:注:以下位置都是以cocos2dx标准世界坐标系左下角0,0而说的。

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部