นี่คือพอร์ตจาก Geouk ฉันสร้างพอร์ตนี้เพื่อแปลงโครงการเป็น. NET Standard
ผู้เขียนต้นฉบับได้สร้างโพสต์บล็อกโดยละเอียดวิธีใช้ทั้งแพ็คเกจ NuGet - แปลงละติจูดและลองจิจูดเป็นกริดแห่งชาติอังกฤษใน C# โปรดไปอ่านบทความนี้เพื่อทำความเข้าใจแนวคิดที่ใช้
เคล็ดลับ: เมื่อทำงานกับสถานที่ฉันชอบใช้เว็บไซต์นี้ - Finder Grid Reference Finder
โครงการนี้อนุญาตให้มีการแปลงจากพิกัด GPS เป็นกริดแห่งชาติอังกฤษและกลับมาอีกครั้ง ผลิตภัณฑ์ได้รับใบอนุญาตภายใต้ใบอนุญาตสาธารณะ GNU Lesser ทั่วไป (LGPL)
โครงการ Geouk.ostn เพิ่มการเปลี่ยนแปลง OSTN02 และ OSTN15 ซึ่งให้ความแม่นยำมากขึ้น ควรสังเกตว่าแพ็คเกจนี้มีการแปลง OSGM02 Geoid และ OSTN02 OSTN15 ซึ่งเป็นผลให้มีขนาดค่อนข้างใหญ่นอกจากนี้การเปลี่ยนแปลงจะช้ากว่าการใช้การแปลงเฮล์เมอร์ตามที่ใช้ใน NUGET ด้านบน ผลิตภัณฑ์ได้รับใบอนุญาตภายใต้ใบอนุญาตสาธารณะ GNU Lesser ทั่วไป (LGPL)
ติดตั้ง geouk
// Given an easting and northing in metres (see text)
const double easting = 651409.903 ;
const double northing = 313177.270 ;
// Convert to Cartesian
Cartesian cartesian = Convert . ToCartesian ( new Airy1830 ( ) ,
new BritishNationalGrid ( ) ,
new EastingNorthing ( easting , northing ) ) ; Cartesian wgsCartesian = Transform . Osgb36ToEtrs89 ( cartesian ) ; //ETRS89 is effectively WGS84 LatitudeLongitude wgsLatLong = Convert . ToLatitudeLongitude ( new Wgs84 ( ) , wgsCartesian ) ; LatitudeLongitude latLong = new LatitudeLongitude ( 51.469886 , - 3.1636964 ) ;
Cartesian cartesian = Convert . ToCartesian ( new Wgs84 ( ) , latLong ) ;
Cartesian bngCartesian = Transform . Etrs89ToOsgb36 ( cartesian ) ;
EastingNorthing bngEN = Convert . ToEastingNorthing ( new Airy1830 ( ) , new BritishNationalGrid ( ) , bngCartesian ) ; การอ้างอิงแผนที่ (Easting/Northing) ที่ใช้ในแผนที่สำรวจอาวุธถูกแบ่งออกเป็นสี่เหลี่ยม 500 กม. ซึ่งแบ่งออกเป็นระยะ 100 กม. สี่เหลี่ยมเหล่านี้ได้รับรหัสตัวอักษรสองตัว ตัวอักษรตัวแรกแสดงถึงตารางระยะทาง 500 กม. และที่สองหมายถึงสี่เหลี่ยม 100 กม. ภายใน การอ้างอิงแผนที่หกหลักจะมีลักษณะเช่น TL123456 ซึ่งตัวละครสองตัวแรกแสดงถึงสี่เหลี่ยมจัตุรัส 100km ตามที่ระบุไว้บนแผนที่ด้วยตัวเลขสามหลักแรกของหกตัวที่เป็นตัวแทนของ Easting และสามหลักสุดท้ายที่เป็นตัวแทนของ Northing การใช้ระบบนี้หมายความว่าการอ้างอิงแผนที่ถูกยกมาเป็นทางตะวันออก/นอร์ ธ (เป็นเมตร) จากแหล่งกำเนิดของสแควร์ วัตถุพิกัด Eastingnorthing ซึ่งส่งคืนจากการแปลงที่อธิบายไว้ข้างต้นสามารถแปลงเป็นอ้างอิงแผนที่ OS โดยใช้คลาส OSGB36 ดังนี้:
EastingNorthing eastingNorthing = new EastingNorthing ( 319267 , 175189 ) ;
Osgb36 osgb36EN = new Osgb36 ( eastingNorthing ) ;
string mapReference = osgb36EN . MapReference ; เพื่อให้ได้รับความแม่นยำมากขึ้นเมื่อเปลี่ยน ETRS89 (WGS84) พิกัดเป็นกริดแห่งชาติอังกฤษต้องใช้แบบจำลองการสำรวจอาวุธยุทโธปกรณ์ (OSGM02) OSGM02 สามารถคิดได้ว่าเป็นแผ่นยางขนาดใหญ่ที่ครอบคลุมบริเตนใหญ่เกาะเหนือและสาธารณรัฐไอร์แลนด์ การแปลงพิเศษถูกนำไปใช้กับข้อมูลภายใน OSGM02 เพื่อแปลงจาก ETRS89 และ OSGB36 สำหรับบริเตนใหญ่การเปลี่ยนแปลงนี้เรียกว่า OSTN02 การแปลง OSTN02 รวมกับตำแหน่ง ETRS89 ของสถานีเครือข่าย GPS ที่ใช้งานแสดงถึงคำจำกัดความอย่างเป็นทางการของ OSGB36 และสามารถให้การเปลี่ยนแปลงที่แม่นยำมาก
แผ่นยางนี้ geoid เป็นตารางการค้นหาที่สามารถใช้ในการกำหนดความสูง othometric (geoid) และผ่านการเปลี่ยนแปลง OSTN, Easting Easting และ Northing พิกัดที่แม่นยำ เป็นที่น่าสังเกตว่าเกาะเหนือและสาธารณรัฐไอร์แลนด์ใช้โมเดล geoid เดียวกัน แต่มีการเปลี่ยนแปลงที่แตกต่างกัน (OSI/OSNI) ซึ่งอย่างน้อยตอนนี้อยู่นอกขอบเขตของบทความนี้
แพ็คเกจ Geouk.ostn Nuget ขยายแพ็คเกจ Geouk เพื่อรวมฟังก์ชัน OSGM02/OSTN0 และ OSTN15 และให้วิธีการง่าย ๆ ในการเปลี่ยนแปลงทางเดียวที่แม่นยำจาก ETRS89 เป็น BNG สามารถเพิ่มแพ็คเกจลงในโครงการโดยใช้คำสั่ง Package Manager ต่อไปนี้ แพ็คเกจขึ้นอยู่กับแพ็คเกจ Geouk และจะเพิ่มตามที่ต้องการ
ติดตั้ง geouk.ostn
ควรสังเกตว่าแพ็คเกจ GeoUK.OSTN มีการแปลง OSGM02 Geoid และ OSTN02 OSTN15 ซึ่งเป็นผลให้ค่อนข้างใหญ่นอกจากนี้การแปลงจะช้ากว่าการใช้การแปลงเฮล์เมอร์ตามที่ใช้ในตัวอย่างข้างต้น
ตัวอย่างด้านล่างแปลงความสูง Latitude/Longitude/Ellipsoid ETRS89 เป็น BNG Easting และ Northing และ ODN สูงถึง 10 เซนติเมตรหรือมากกว่านั้น
LatitudeLongitude latLong = new LatitudeLongitude ( 51.469886 , - 3.1636964 , 108.05 ) ;
Osgb36 bng = GeoUK . OSTN . Transform . Etrs89ToOsgb ( latLong ) ;แพ็คเกจ Nuget ทั้งสองได้รับใบอนุญาตภายใต้ใบอนุญาตสาธารณะ GNU Lesser ทั่วไป (LGPL) สิ่งนี้เพื่อเคารพใบอนุญาต Arthors ก่อนหน้านี้ เรียนรู้เพิ่มเติมที่นี่