Я пытаюсь ограничить большую коллекцию ссылок на ОС Великобритании (восток и север) только теми, которые находятся на материковой части Великобритании.
- Справочная информация о ссылках на сетку-
ОС "Национальная сетка" сформирована из "восточных" и "северных" относительно происхождения (0,0).Для наших целей (700000, 1300000) является теоретическим максимумом (в правом верхнем углу Великобритании).
- Что мне нужно, и что я уже сделал -
Мне нужно исключить любые ссылки на сетки, которые не находятся на материковой части Великобритании (то есть на самом большом острове Великобритании).Я рад, что это грубый алгоритм «лучшего предположения»;но мне определенно нужно что-то лучшее, чем весь диапазон ценностей;что-то вроде того, что я получил сейчас.
Система ОС делит страну на 100км квадратов , что является началом.Это изображение показывает, как раскололась Великобритания:
(By cmglee, Strebe, MansLaughter, Alexrk2 из naturalearthdata, Pethrus и nandhp - Британская национальная сеть Grid.svgСеверная Европа в OSGB 1936Datum.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.
Я знаю, что для каждого восточного или диапазона восточных направлений я мог бы хранить картудействительных значений на север (и наоборот) - и это было бы одним из вариантов для реализации этого, однако мне было интересно, если у кого-нибудь есть какие-либо другие идеи. Я рассматриваю вопрос о сохранении некоторого вида многоугольника, который представляет UK, а затем проверить, содержит ли многоугольник заданную точку?
Я буду реализовывать в 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);
}
Я бы предпочел не использовать вызов из внешней библиотеки или веб-службы.
- Изменить - см. мой ответ (https://stackoverflow.com/a/56059697/318414) для координат, которые я использовалв итоге