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.
|