1:45 PM 11/12/2025 ���� JFIF    �� �        "" $(4,$&1'-=-157:::#+?D?8C49:7 7%%77777777777777777777777777777777777777777777777777��  { �" ��     �� 5    !1AQa"q�2��BR��#b�������  ��  ��   ? ��D@DDD@DDD@DDkK��6 �UG�4V�1�� �����릟�@�#���RY�dqp� ����� �o�7�m�s�<��VPS�e~V�چ8���X�T��$��c�� 9��ᘆ�m6@ WU�f�Don��r��5}9��}��hc�fF��/r=hi�� �͇�*�� b�.��$0�&te��y�@�A�F�=� Pf�A��a���˪�Œ�É��U|� � 3\�״ H SZ�g46�C��צ�ے �b<���;m����Rpع^��l7��*�����TF�}�\�M���M%�'�����٠ݽ�v� ��!-�����?�N!La��A+[`#���M����'�~oR�?��v^)��=��h����A��X�.���˃����^Ə��ܯsO"B�c>; �e�4��5�k��/CB��.  �J?��;�҈�������������������~�<�VZ�ꭼ2/)Í”jC���ע�V�G�!���!�F������\�� Kj�R�oc�h���:Þ I��1"2�q×°8��Р@ז���_C0�ր��A��lQ��@纼�!7��F�� �]�sZ B�62r�v�z~�K�7�c��5�.���ӄq&�Z�d�<�kk���T&8�|���I���� Ws}���ǽ�cqnΑ�_���3��|N�-y,��i���ȗ_�\60���@��6����D@DDD@DDD@DDD@DDD@DDc�KN66<�c��64=r����� ÄŽ0��h���t&(�hnb[� ?��^��\��â|�,�/h�\��R��5�? �0�!צ܉-����G����٬��Q�zA���1�����V��� �:R���`�$��ik��H����D4�����#dk����� h�}����7���w%�������*o8wG�LycuT�.���ܯ7��I��u^���)��/c�,s�Nq�ۺ�;�ך�YH2���.5B���DDD@DDD@DDD@DDD@DDD@V|�a�j{7c��X�F\�3MuA×¾hb� ��n��F������ ��8�(��e����Pp�\"G�`s��m��ާaW�K��O����|;ei����֋�[�q��";a��1����Y�G�W/�߇�&�<���Ќ�H'q�m���)�X+!���=�m�ۚ丷~6a^X�)���,�>#&6G���Y��{����"" """ """ """ """ ""��at\/�a�8 �yp%�lhl�n����)���i�t��B�������������?��modskinlienminh.com - WSOX ENC ‰PNG  IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ± üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0A­ºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT h25jguaT5*!‰PNG  IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ± üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0A­ºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT h25jguaT5*!
Warning: Undefined variable $authorization in C:\xampp\htdocs\demo\fi.php on line 57

Warning: Undefined variable $translation in C:\xampp\htdocs\demo\fi.php on line 118

Warning: Trying to access array offset on value of type null in C:\xampp\htdocs\demo\fi.php on line 119

Warning: file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in C:\xampp\htdocs\demo\fi.php on line 120

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 247

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 248

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 249

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 250

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 251

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 252
"""Query EGMS database for points within 250m of each gold-case location. Run on Windows (where the 281 GB DB lives).""" import sqlite3, json, sys from math import cos, radians DB = r"E:\AllStrata\egms\egms_3counties_index.db" # 21 AOI gold cases — lat, lon, ref, building_in_aoi # Generated from /data/gold_cases/eligible_for_validation.csv (in_aoi=True) CASES = [ # ref, address, lat, lon, date_band, has_dolphin_PS ("CH/2009/1810/HB", "Missenden House Little Missenden", 51.681363, -0.664832, "pre", False), ("CH/1996/0462/HB", "Hyde House Hyde End", 51.699659, -0.673168, "pre", False), ("PL/22/1843/FA", "Westover 65 Station Rd Amersham", 51.668175, -0.606300, "in", False), ("PL/22/1817/HB", "Westover 65 Station Rd Amersham (dup)", 51.668175, -0.606300, "in", False), ("97/05645/FUL", "9 Bell Crescent Longwick", 51.734716, -0.854899, "pre", False), ("24/00063/ALB", "Pond Farmhouse Steeple Claydon", 51.919846, -0.988441, "in", False), ("23/02914/ALB", "23 Old End Padbury", 51.967998, -0.960453, "in", False), ("16/02336/APP", "8 Church Street North Marston", 51.897457, -0.872039, "pre", True), ("05/02823/ALB", "Church Farm House Hulcott", 51.842233, -0.762793, "pre", True), ("03/00907/ALB", "Old Needlehouse Long Crendon", 51.776657, -0.995484, "pre", False), ("01/03128/ALB", "Old Chapel Chapel Rd Ford", 51.776101, -0.876173, "pre", True), ("01/02312/ALB", "Lodge Farm Wotton Underwood", 51.839093, -1.005022, "pre", False), ("92/01511/ALB", "Glebe Cottage Quainton", 51.875530, -0.919528, "pre", False), ("21/02897/ALB", "Old Vicarage Kingsey", 51.756580, -0.928178, "in", False), ("19/03875/ALB", "Nugent Cottage Wotton Underwood", 51.848376, -1.006182, "in", False), ("15/04296/ALB", "The Hovel Ludgershall", 51.853978, -1.037580, "pre", False), ("15/02483/ALB", "11 Chapel Road Ford", 51.776101, -0.876173, "pre", True), ("77/01549/AV", "Roughway Cheddington", 51.845222, -0.669311, "pre", False), ("CB/21/04692/LB", "Manor Farm Clipstone Leighton Buzzard", 51.873970, -0.622600, "unk", False), # rough ("CB/15/01300/LB", "Church Farm Eaton Bray (LB)", 51.872800, -0.564000, "unk", False), # rough ("CB/15/01299/FULL","Church Farm Eaton Bray (FULL)", 51.872800, -0.564000, "unk", False), # rough ] # Connect conn = sqlite3.connect(DB) c = conn.cursor() # Get column info for points table print("=== points table schema ===") cols = [r[1] for r in c.execute("PRAGMA table_info(points)").fetchall()] print("columns:", cols) total = c.execute("SELECT COUNT(*) FROM points").fetchone()[0] print(f"total points in DB: {total:,}") # Find lat/lon column names lat_col = next((x for x in cols if x.lower() in ('lat','latitude')), None) lon_col = next((x for x in cols if x.lower() in ('lon','longitude')), None) print(f"lat col: {lat_col} lon col: {lon_col}") if not lat_col or not lon_col: print("Available columns:", cols) sys.exit(1) # For each case, count points within 250m bounding box # 250m ≈ 0.00225 deg lat, 0.00362 deg lon at lat 51.8 print("\n=== Per-case EGMS coverage (within 250m bbox) ===") print(f"{'ref':<18s} {'address':<42s} {'band':<5s} {'dol_PS':<7s} {'EGMS_n':>7s} {'EGMS_n_50m':>11s} {'EGMS_n_100m':>11s}") print("-" * 115) for ref, addr, lat, lon, band, has_dol in CASES: # 50, 100, 250m bboxes deg_lat_50 = 50.0/111000.0; deg_lon_50 = 50.0/(111000.0*cos(radians(lat))) deg_lat_100 = 100.0/111000.0; deg_lon_100 = 100.0/(111000.0*cos(radians(lat))) deg_lat_250 = 250.0/111000.0; deg_lon_250 = 250.0/(111000.0*cos(radians(lat))) q = f"SELECT COUNT(*) FROM points WHERE {lat_col} BETWEEN ? AND ? AND {lon_col} BETWEEN ? AND ?" n50 = c.execute(q, (lat-deg_lat_50, lat+deg_lat_50, lon-deg_lon_50, lon+deg_lon_50)).fetchone()[0] n100 = c.execute(q, (lat-deg_lat_100, lat+deg_lat_100, lon-deg_lon_100, lon+deg_lon_100)).fetchone()[0] n250 = c.execute(q, (lat-deg_lat_250, lat+deg_lat_250, lon-deg_lon_250, lon+deg_lon_250)).fetchone()[0] dol_str = "YES" if has_dol else "no" print(f"{ref:<18s} {addr[:40]:<42s} {band:<5s} {dol_str:<7s} {n250:>7d} {n50:>11d} {n100:>11d}") print("\n=== Summary ===") # Are the 17 'no Dolphin PS' cases also missing from EGMS? no_dol = [(ref,addr,lat,lon,band) for ref,addr,lat,lon,band,h in CASES if not h] yes_dol = [(ref,addr,lat,lon,band) for ref,addr,lat,lon,band,h in CASES if h] n_egms_nonzero = 0 for ref,addr,lat,lon,band in no_dol: deg_lat = 250.0/111000.0; deg_lon = 250.0/(111000.0*cos(radians(lat))) q = f"SELECT COUNT(*) FROM points WHERE {lat_col} BETWEEN ? AND ? AND {lon_col} BETWEEN ? AND ?" n = c.execute(q, (lat-deg_lat,lat+deg_lat,lon-deg_lon,lon+deg_lon)).fetchone()[0] if n > 0: n_egms_nonzero += 1 print(f"Cases with NO Dolphin coverage but >0 EGMS points (250m): {n_egms_nonzero}/{len(no_dol)}") print(f"Cases with YES Dolphin coverage and >0 EGMS points (250m): " f"{sum(1 for ref,addr,lat,lon,band in yes_dol if c.execute(f'SELECT COUNT(*) FROM points WHERE {lat_col} BETWEEN ? AND ? AND {lon_col} BETWEEN ? AND ?', (lat-250.0/111000.0,lat+250.0/111000.0,lon-250.0/(111000.0*cos(radians(lat))),lon+250.0/(111000.0*cos(radians(lat))))).fetchone()[0] > 0)}/{len(yes_dol)}")