我试图将大量的UK OS Grid References (easting and northing)限制为仅在英国大陆的那些。

-网格参考的背景-

OS“国家网格”由相对于原点(0,0)的“东”和“北”组成。就我们的目的而言,(700000,1300000)是理论最大值(英国的右上角)。

-我需要的,以及到目前为止所做的-

我需要排除不在英国大陆(即英国最大的岛屿)之外的任何网格参考。我很高兴能成为一种粗略的“最佳猜测”算法;但是我绝对需要比整个价值范围更好的东西;这就是我现在所拥有的。

操作系统将国家划分为100km squares,这是一个开始。此图显示了英国如何分裂:

java - 英国大陆上的OS UK网格引用-LMLPHP(通过cmglee,Strebe,MansLaughter,Alexandr2从naturalearthdata,Pethrus和nandhp-英国国家网格.svg西北欧在OSGB 1936 Datum.svg,CC BY-SA 3.0,https://commons.wikimedia.org/w/index.php?curid=35301574上)

由此,假设每个正方形(带有两个字母)为十万平方米,我知道我只需要考虑西边的东边SW到东边的TG(100000至700000)以及北边的近似范围SW ..NC在最高点(0到999999)-大大减少了数字;但还有更多工作要做。

因此,到目前为止,我的逻辑是矩形SW..HW..JW..TW。

我知道,对于每个东移或东移范围,我都可以存储有效北移值的地图(反之亦然)-这将是实现此目标的一种选择;但是我想知道是否还有其他想法。我正在考虑存储某种代表英国的多边形,然后检查该多边形是否包含给定点?

我将在Java中实现,将整数用作东和北值。

因此,我当前的粗略方法很简单:

    public final static int minOSEasting = 100000;
    public final static int  minOSNorthing = 1;
    public final static int maxOSEasting = 700000;
    public final static int maxOSNorthing = 1000000;
    public static boolean isValid(int easting, int northing)
    {
        return (easting > minOSEasting && easting < maxOSEasting && northing > minOSNorthing && northing < maxOSNorthing);
    }


我宁愿不使用外部库或Web服务调用。

- 编辑 -
有关我最后使用的坐标,请参见我的答案(https://stackoverflow.com/a/56059697/318414

最佳答案

似乎您只想要多边形算法中的一个点。试试这个

Point in Polygon Algorithm

10-08 11:39