Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 11254|Yanıt: 1

Baidu koordinatları WGS84 koordinatlarına dönüştürülür

[Bağlantıyı kopyala]
Yayınlandı 11.10.2017 09:56:13 | | | |
Gereksinimler: Baidu koordinatlarını WGS84 koordinatlarına dönüştürün
Uygulama:
Öncelikle, Çin'de birçok karmaşık koordinat sistemini tanıtmak istiyorum; hepimizin bildiği gibi, Amerika Birleşik Devletleri GPS'i WGS84 koordinatlarını kullanır, ancak Çin'de güvenlik nedenleriyle, harita yayınlanıp yayımlandığında, 84 koordinatlar doğrusal olmayan ve yanlıştır, elde edilen koordinatlar ise GCJ02 koordinat sistemleri olarak adlandırılır, yaygın olarak Mars koordinatları olarak bilinir. Ayrıca, birçok yerel harita şirketi, belki iş ihtiyaçları veya bazı ticari rekabet nedenleri nedeniyle, Mars koordinatlarına göre doğrusal olmayan bir sapma gerçekleştirmiş ve kendi koordinat sistemlerini edinmiştir. Baidu böyle bir şirket. Baidu, GCJ02 temelinde BD-09 ikincil doğrusal olmayan yanlılığı gerçekleştirmiş ve kendi Baidu koordinat sistemini elde etmiştir. Bu Baidu'nun kendi şirketi için faydalı olabilir, ancak biz geliştiriciler için bu sadece sinir bozucu.
Aşağıda, Çin'deki bazı harita hizmet sağlayıcılarının kullandığı koordinat sistemlerine kısa bir giriş verilmiştir:



Şu anda Baidu, koordinat dönüştürme için bir API sağlar, http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=longitude&y=latitude
Buna
• from: Kaynak koordinat sistemi (orijinal GPS koordinatları için 0, Google koordinatları için 2)
• ki: Dönüştürülmüş koordinatlar (4, Baidu'nun kendi koordinatıdır, sanki bu 4 olmak zorundaymış gibi)
• x: Hassasiyet
• y: Enlem
Sonuçta bir json string döner: {"error":0,"x":"MTIxLjUwMDIyODIxNDk2","y":"MzEuMjM1ODUwMjYwMTE3"}
• hata: hata işareti bitidir ve "0" OK anlamına gelir
• x: Baidu koordinat sisteminin doğruluğu (Base64 şifreleme)
y: Baidu koordinat sistemi enlemi (Base64 şifreleme);
Bu iki sayının anlamını çevrimiçi olarak topladım:
http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=longitude&y=latitude
1: GPS ekipmanıyla elde edilen açısal koordinatlar;
2: GPS ile elde edilen metrik koordinatlar, sogou haritalarında kullanılan koordinatlar;
3: Google Maps, SOSO Maps, Aliyun Maps, MapABC Maps ve AMAP Maps için kullanılan koordinatlar
4:3 Listedeki haritanın koordinatlarına karşılık gelen metre koordinatları
5: Baidu Haritaları'nda kullanılan boylam ve enlem koordinatları
6: Baidu Haritaları tarafından kullanılan metrik koordinatlar
7: harita çubuğu harita koordinatları;
8:51 Harita koordinatları Varsayılan 1 değildir, bu GPS cihazının elde ettiği koordinatlardır
Hedef koordinat türleri için iki seçenek vardır: 5, 6.
5: BD09LL (Baidu enlem ve boylam koordinatları),
6: BD09MC (enlem ve boylam koordinatları 100 derece metrede); Hayır Varsayılan 5'tir, yani bd09ll (Baidu koordinatları)

Yukarıdakilerin hepsi 84 koordinatı Baidu koordinatlarına dönüştürmek için kullanılır, aşağıda ise koordinatların tersine dönüşümünün nasıl sağlanacağından bahsedelim; yani Baidu koordinatları 84 koordinata dönüştürülür.
İnternette birçok algoritma buldum ve çoğu bir ofsetle sınırlı; yani Baidu koordinatları ile Mars koordinatları arasındaki değişim, Mars koordinatları ile Dünya koordinatları arasındaki değişim vb., ve Baidu koordinatlarından 84 koordinata kadar çok az bahsediliyor.
Bu bağlamda, önce Baidu koordinatlarını Mars koordinatlarına, sonra Mars koordinatlarını Dünya koordinatlarına dönüştürmeye çalıştım ama sonuç tatmin edici olmadı, en düşük hata 60 metre, en fazla ise 600 metreden fazla hata vardı, bu yüzden pes etmek zorunda kaldım. Artık algoritmayı paylaşmayacağım, ilgilenen öğrenciler internete girip kendi başlarına bulabilirler.
Burada zekice bir yöntem kullanıyorum, spesifik yöntem şöyle:
Baidu koordinatları ve GPS koordinat dönüşümü yakın mesafelerde çok yakındır.
Baidu koordinatlarınız varsa diyelim: x1=116.397428, y1=39.90923
Bu koordinatı GPS koordinatı olarak alın ve arayüz üzerinden Baidu koordinatlarını alın: x2=116.41004950566, y2=39.916979519873

GPS'in koordinatları hesaplama yoluyla elde edilebilir:
x = 2*x1-x2,y = 2*y1-y2
x=116.38480649434001
y=39.901480480127。
Bu yöntemin doğruluğunu doğrulamak için, Çin'in güneydoğu, kuzeybatı ve kuzeybatısındaki 14 büyük şehrin koordinatlarını test için aldım ve sonuçlar 13 metre sapma ile en az 0,x metre ile elde edildi. Kapsamlı hata 6 metredir. Özel test sonuçları daha sonra paylaşılacaktır.
Bu sorunu açıklamak için basit bir diyagram çizeyim.



G, orijinal dönüştürülmemiş Dünya koordinatlarını temsil eder;
B, G Baidu api üzerinden dönüştürüldükten sonra Baidu koordinatlarını temsil eder;
G', B noktası Baidu API üzerinden dönüştürüldükten sonra koordinatları temsil eder;
Google koordinatlarını Baidu koordinatlarına dönüştürdükten sonra ofset değerinin küçük olduğunu varsayarsak, G noktası koordinatları tamamen şu noktaya eşittir
2B-G'。 Doğrulamadan sonra, Google koordinatlarını Baidu koordinatlarına dönüştürdükten sonra ofset değeri yaklaşık birkaç yüz metre olur ki bu aslında önemsizdir, bu yüzden bu yöntemi kullanarak Baidu'nun kendi API'si ile ofset kütüphanesi sorununu çözün ve ardından ofset değerlerinin dönüşümünün etkisini görmezden gelin.
Elbette, bu yöntemin büyük bir dezavantajı da vardır; yani, bu iki noktanın aynı ofset veritabanında olması gerekir; eğer iki farklı ofset kütüphanesinde yer alıyorsa, hata nispeten büyük olabilir.
Ayrıca, şu anda daha fazla araştırma için hazırlanmakta olan başka bir yöntem vardır; bu bir ofset kütüphanesi oluşturmak ve bu kayma kütüphanesini kullanarak bu etkiyi daha da ortadan kaldırmak: bu yöntem hâlâ incelenmek üzere bir yöntemdir.
Çevrimiçi dönüşümün dezavantajı şudur: Baidu çevrimiçi API dönüştürme aracı aslında dönüştürülen veri miktarına bir sınır koyuyor, her anahtar sadece yaklaşık 5.000 veri parçasını dönüştürebilir ve bir hesap 20 anahtara kadar başvurabilir, bu yüzden veri miktarı büyükse, bu tür çevrimiçi dönüşümün kullanılması aslında önerilmez; bu da yerel ofset kütüphanesini incelemenin orijinal amacıdır. Ayrıca, web tarafı daha kısıtlı olabileceği için, ağ hızı, eşzamanlı talepler vb. sonuçları etkileyebilir ve kullanıcı deneyimini etkileyebilir, bu nedenle yukarıdaki yöntemler sadece referans içindir.





Önceki:Javascrip{filter}tmodule - load module require.js
Önümüzdeki:JSON verilerini arka plana GÖNDERMEK için Ajax yöntemini kullanın
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com