将4纬度经度坐标给出的地球上的区域拆分成等距网格?

时间:2016-01-09 12:08:38

标签: java gps geometry coordinate-systems polar-coordinates

所以我正在使用Java语言开发最终项目,这个项目有一个服务器端(由我负责)和一个GUI客户端(由其他人负责)。

作为服务器,我经常从Android客户端获得GPS协调(作为纬度经度),我需要在预先分配的网格上回复它们的等效位置。

网格由GUI客户端发送给我的4个LatLng坐标和要划分的网格线数量设置。例如。我得到(35.000,35.000),(35.000,36.000),(36.000,36.000),(36.000,35.000)和40x40。

我使用的当前方法是分别计算区域纬度距离和经度距离的弧度距离,然后将其除以40(如给出的例子),每个商是我的&# 34;点击",我稍后使用的单个距离单位。

当我收到一个新的坐标时,我将它除以我的"点击"并且执行Math.floor,此操作的商是网格上的位置。 但有些事情是错的,我的计算显然是不正确的,因为GUI客户端不同意我(通常是1个网格北/南和1个网格西/东,他只是采取地图(例如google-map)并将其作为图片进行操作简单地拆分一个矩形区域。 我究竟做错了什么?是否有更好的方法来对该设置给出的区域进行离散化?

我已经检查过的事情:1。这不是某种浮动下溢,我使用BigDecimal和SimpleLatLng

  1. GUI客户端同意我在靠近相对0x0网格块的位置,所以它不是通常的一对一错误。
  2. 编辑:我已经设法解决了大部分错误,我仍然有一些错误,我不知道代码的哪一部分可以负责。

    编辑2:问题似乎已经解决,问题是首先没有得到正确的方位,只是假设网格是北边界,附上了正确的代码:

1 个答案:

答案 0 :(得分:0)

我在探索和玩代码后设法回答了自己。 这是我们的项目代码中使用的此解决方案的最终实现。 您可以自由使用它,希望它将来会帮助其他人:

if (firstenemyattack > firstdefense) { 
    int firstenemyhitpointattack = (int) Math.ceil(Math.random() 
            * firstenemyhitpoints);
    // Presumably, firstbattlehealth -= firstenemyhitpointattack here?
    System.out.println("The enemy did " + firstenemyhitpointattack 
            + " damage to you. You have " + firstbattlehealth 
            + " health remaining.");
} else { // <-- An "else" block, firstenemyattack <= firstdefense
    System.out.println("Enemy attack missed!");
}