我试图将大量的UK OS Grid References (easting and northing)限制为仅在英国大陆的那些。
-网格参考的背景-
OS“国家网格”由相对于原点(0,0)的“东”和“北”组成。就我们的目的而言,(700000,1300000)是理论最大值(英国的右上角)。
-我需要的,以及到目前为止所做的-
我需要排除不在英国大陆(即英国最大的岛屿)之外的任何网格参考。我很高兴能成为一种粗略的“最佳猜测”算法;但是我绝对需要比整个价值范围更好的东西;这就是我现在所拥有的。
操作系统将国家划分为100km squares,这是一个开始。此图显示了英国如何分裂:
(通过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