Daha çox

İstifadəçi tərəfindən təyin olunmuş nöqtə şəbəkəsinin yaradılması


İstifadəçinin Min / Max Long / Lat-a əsasən müəyyənləşdirdiyi və sahəsini müəyyənləşdirdiyi və metrlərlə nöqtələr arasındakı məsafəni təyin etdiyi və kodu long / cədvəlini qaytardığı bir neçə kodu (C # dilində, lakin istənilən dildə yazacaq) yazmağa çalışıram. lats (WGS84 / ESPG: 4326) bir şəbəkə yaratmaq.

Bir müddət əvvəl işi gördüyüm təəssüratı altında olduğum üçün bir neçə kod yazdım, ancaq bir az analiz etdikdən sonra yox olduqca işi ölçmək. Xahiş edirəm aşağıdakı kodu nəzərdən keçirin:

ondalık minX = -74.002747535706M; ondalık minY = 40.722282672831M; ondalık maxX = -73.98386478424M; ondalık maxY = 40.733470232685M; ondalık məsafə = 100; ondalık x = 0.0M; ondalık y = 0.0M; ondalık uzunluq = 0.0M; ondalık uzunluğu Artırmaq = 0.0M; ondalık artım Faiz = 0.0M; int i = 0; ondalık yIncrement = məsafə / (onluq) 111111.111111; DataTable dt = yeni DataTable (); dt.Columns.Add ("Boylam", Type.GetType ("System.Decimal")); dt.Columns.Add ("Latitude", Type.GetType ("System.Decimal")); y = minY; while (y 

Yuxarıda göstərilənlər olduqca yaxşı işləyir. 100m latla ayrılmış uzun, lakin 90m uzunluqda ayrılır. Mən dəyişdirdiyim zamanməsafə25 m-ə qədər enliyi 25 m, uzunluğu 22.3 m ayırır.

Redaktə edin: C Keskin Versiya Həlli yosukesabai əsasında Cavab:

int radius = 6378137; ikiqat pi = Math.PI; ikiqat deg2Rad = pi / 180; ikiqat dst2Lat = 360 / (2 * pi * radius); DataTable dt = yeni DataTable (); dt.Columns.Add ("ID", typeof (int)); dt.Columns.Add ("Boylam", Type.GetType ("System.Decimal")); dt.Columns.Add ("Latitude", Type.GetType ("System.Decimal")); x = minX; y = minY; while (y 

Buradakı hər hansı bir kömək fantastik şəkildə faydalı olardı!

Hörmətlə

AM


ASPMapper'in yanaşmasını aldı, ancaq özümdə riyaziyyat yerinə PROJ.4-dən geodeziya paketi istifadə etdim (python bağlama pyproj, http://code.google.com/p/pyproj/).

pyproj idxalından Geod minX = -74.002747535706 # dərəcə ilə minY = 40.722282672831 maxX = -73.98386478424 maxY = 40.733470232685 məsafə = 100 # metrlə g = Geod (ellps = 'WGS84') coords = [] lon, lat = minX, minY isə 

Yenidən baxıldı

riyaziyyat idxalından pi, cos minX = -74.002747535706 # dərəcə ilə minY = 40.722282672831 maxX = -73.98386478424 maxY = 40.733470232685 məsafə = 100 # metrlə # yerin radiusu, heç kimə demirəm ki, wgs84 istifadə etmirəm: pr = 6378137 deg2rad = pi / 180 # metrə enlik dərəcəsinə çevirmək üçün amil dst2lat = 360 / (2 * pi * r) koordinatlar = [] # LL künc lon ilə başlayın, lat = minX, minY # marş Şimala doğru, lat 

Yenidən işlənmişdir

İndi kürə yaxınlaşması əvəzinə WGS84-də müəyyənləşdirilmiş yerin eksantrikliyini daxil etməyə çalışdım. Şimal / cənubda çox yaxşı bir dəqiqliyə sahib oldum (7 rəqəm və ya bu qədər), ancaq enlem xəttində hələ 4 rəqəm dəqiqlik əldə etdim ...

riyaziyyat idxalından pi, cos, sin, sqrt minX = -74.002747535706 # dərəcə ilə minY = 40.722282672831 maxX = -73.98386478424 maxY = 40.733470232685 məsafə = 100 # metrlə # böyük ox və yerin düzlənməsinə tərs, İndi WGS a istifadə edirəm invf = 6378137.0, 298.257223563 # dərəcə və radianlar arasında çevrilmə faktoru deg2rad = pi / 180 # torpaq ekssentrikliyi f = 1 / invf e = sqrt (f * (2-f)) # bütün qutunun orta enində orta merdional kuvature =. 5 * (minY + maxY) r_meridional_mid = a * (1 - e * e) / ((1 - (e * sin (midY * deg2rad)) ** 2) ** 1.5) # amili metrə enlik dərəcəsinə çevirmək , orta lattitude dst2lat_mid = 360 / (2 * pi * r_meridional_mid) coords = [] # LL künc lon ilə başlayın, lat = minX, minY # marş Şimala doğru gedərkən lat 

Yenidən işlənmişdir (Normal əyrilik kalsinin radiusunu düzəldin)

Niyə normal əyriliyin radiusunu bağladığımı tapdım (formulu səhv köçürdüm). Proj.4 ilə 9 rəqəmi kimi nəticələrlə düzəldilmişdir və uzunluq uyğunlaşmışdır. Həm də bütün qutunun orta enliyində deyil, hüceyrənin orta enliyində meridional əyrilik radiusunu hesablayaraq enliyi "yaxşılaşdırdım". Hələ də təxmindir, doğru yol elliptik inteqrasiyadan istifadə etməlidir. Mən şimala doğru irəlilədikdə xəta uzununa istiqamətdə toplanır və proyektə istinad edərək nümunə girişində 6 rəqəmli dəqiqliklə artırılır.


Videoya baxın: Dərs 21. MS Word 2010-da cədvəllərlə və qrafik təsvirlərlə iş. Design, Layout və Format tabları (Oktyabr 2021).