Onsuz hiçbir şey yapamayız - LBS'nin kökeni ve uygulaması

Kısa bir LBS geçmişi

LBS, İnternetin altyapısıdır.Neredeyse her internet devi onu geliştirmek için çok fazla kaynak yatırdı ve hayatlarımız çok kolay geçti. Diğer bir deyişle, o kadar yaygın olarak kullanılıyor ki, tıpkı su, elektrik ve hava gibi, onları neredeyse hiç algılamıyoruz ama her yerde kullanıyoruz. Çoğu zaman, yeni bir APP kurduğumuzda, bizden bu izin istenebilir, eğer onu vermezsek, pek çok şey ilerleyemez. Sonuçta, LBS nedir? İlk başta bunun bir harita olduğunu düşündüm. Ancak bu görselleştirmenin yalnızca bir kısmı, diğer yarısı konum hizmetleridir. Bu nedenle, LBS'nin tam İngilizce adı Konum Tabanlı Hizmetler'dir.

LBS'nin ortaya çıkması, Amerika Birleşik Devletleri'ndeki bir kaçırılma olayından kaynaklandı. Kasım 1993'te, Jennifer Kuhn adlı bir kız, Amerika Birleşik Devletleri'nde kaçırıldı ve öldürüldü. İşlem sırasında, Kuhn 911'i aramak için cep telefonunu kullandı, ancak 911 çağrı merkezi yapamadı. Cep telefonu sinyalleriyle yerini belirleyin. Bu olayın bir sonucu olarak, Amerika Birleşik Devletleri'nin FCC'si (Amerikan İletişim Komisyonu) 1996 yılında bir kamu güvenlik ağının zorunlu olarak kurulmasını gerektiren bir idari emir E911 yayınladı; bu, kullanıcıların herhangi bir zamanda ve yerde kablosuz sinyallerle izlenebileceği anlamına geliyor. Konumu, konumu 50-300 metreye kadar doğrudur.

Buna ek olarak, 2001 yılındaki 911 olayı Amerikan kamuoyunu konum hizmetlerinin önemi konusunda bilinçlendirdi ve bu nedenle, E911 hedeflerine ulaşmak için konum tabanlı hizmetler kademeli olarak geliştiriliyor. Bir anlamda, mobil operatörleri konum hizmetlerini araştırmak için çok fazla para ve güç yatırmaya sevk eden ve LBS pazarını doğuran E911'di.

PC çağında sıradan insanlar bu hizmetten nadiren yararlanır. Herkesin bu konudaki hisleri Baidu Haritaları, Google Haritalar, Gaode Haritaları ve Tencent Haritalarıdır. Gerektiğinde, web sitesini açıp bu şehirde kaç tane ilçe ve turistik yer olduğunu öğrenmek için kontrol edin. Harici web siteleri nadiren API'sına başvurur. . Bu nedenle, PC çağında LBS, harita hizmetlerine eşdeğerdir.

Mobil terminal çağında, cep telefonunun daha fazla coğrafi bilgi elde etmek için daha fazla yerleşik donanıma sahip olması nedeniyle, çözümü tersine çevirmek için IP adreslerini kullanan PC çağının aksine, daha doğru ve gerçek zamanlı. Cep telefonu sistemi bu donanımı bir araya getirir ve doğrudan mevcut coğrafi isimleri (il, şehir, ilçe ve cadde adı), enlem ve boylamı verir, böylece daha spesifik hizmetler sunabiliriz, böylece Mobike, Streetside Network ve Dianping doğdu. Meituan Takeaway, Qike, bu uygulamalar ve WeChat sporları, gerçek zamanlı konumu paylaşır ve WeChat'te yerleşik olarak bulunan bu kullanışlı işlevleri sarsar.

Başka bir deyişle, PC çağında, LBS yalnızca ekranın belirli bir alanını görüntülemekle sınırlıdır. Üzerinde hangi süpermarket otellerinin olduğunu size anlatmak için üzerine bazı reklamlar ekleyin. Mobil çağda, herkes APP tarafından etkin bir şekilde kullanılan ve paylaşılan konum bilgilerini ve satılabilecek diğer bilgileri (fotoğraflar, hobiler ve oteller tarafından sağlanan hizmetler) paylaşır (veya doğrudan ifşa eder). Bisiklete binme, arkadaşlarla alışveriş ve ekspres teslimat gibi güçlü etkileşimli hizmetler.

Temel teknolojilerin listesi

Coğrafi bilgi söz konusu olduğunda, insanlar genellikle GPS'i düşünür. GPS, yalnızca LBS'nin konum bilgilerini alması için bir araçtır. Şu anda birçok yoldan biri olabilecek H5 API aracılığıyla enlem ve boylamı elde ettik. Genel olarak, esas olarak şunlar vardır: GPS, baz istasyonu, WIFI ve IP.

GPS konumlandırma

GPS, ilk yıllarda özellikle Amerika Birleşik Devletleri'nin uydu konumlandırma sistemine atıfta bulundu. 1970'lerde geliştirildi ve 20 yıl sürdü, 20 milyar ABD dolarına mal oldu ve 1994'te tamamen tamamlandı. Hemen hemen tüm cep telefonlarında GPS alıcıları bulunur ve düşük hassasiyetli özel konumlandırma hizmetini "ücretsiz" kullanabilirsiniz. Avrupa Birliği, Rusya ve Çin, savaşlarda kısıtlanmayı önlemek için Galileo, GLONASS ve Beidou (BDS) adlı kendi GPS hizmetlerini kurmak için uyduları da başlattı. Son zamanlarda, Amerikan iş sihirbazı Musk, bir Starlink sistemi oluşturmak için roketi aracılığıyla iki düşük yörüngeli uydu dalgasını başarıyla fırlattı.Gelecekte, en büyük uydu ağı sağlayıcısı olabilir ve dünyaya kolayca tanımlanmış hizmetleri sağlayabilir.

Genel olarak konuşursak, yerli cep telefonları bu dört sistemin hizmetlerini aynı anda alabilir.

GPS'in teknik prensiplerinden bahsedeyim. Üç A, B ve C noktasının koordinatlarını ve üç noktadan D noktasına olan mesafeyi (sırasıyla d0, d1, d2) bilerek, D noktasının koordinatlarını bulun. Benzersiz çözümü aşağıdaki üç boyutlu ikinci dereceden denklemlerle çözebiliriz (Denklem 1).

GPS ilkesi yukarıdaki formüle dayanmaktadır. GPS uzayda 24 uyduya sahiptir Uydular, 55 derecelik bir yörünge eğimi ile altı orta mesafeli dairesel yörünge düzlemine (her yörünge düzleminde dört) dağıtılmıştır. Uyduların dağılımı, dünyanın herhangi bir yerinde herhangi bir zamanda dörtten fazla uyduyu gözlemlemeyi mümkün kılar.

Cep telefonumuzdaki alıcı, her Si uydusundan sürekli olarak Mi mesajları alır.Mi mesajı yalnızca Si uydusunun uzay koordinatlarını değil, aynı zamanda uydunun mesajı gönderdiği zaman Ti süresini de içerir. Mi'yi aldıktan sonra, alıcı, yerel alıcının saati ile uydu tarafından gönderilen mesajın saati arasındaki farka bağlı olarak di mesafesini hesaplayabilir: di = c * T; burada c ışık hızı ve T zaman farkıdır. Ancak atmosfer, binalar, saat hataları vb. Gibi çeşitli nedenlerden dolayı ışık hızı c ve zaman farkı T'de hatalar vardır ve di'nin sonucu çok yanlıştır.Bu nedenle, hesaplamayı düzeltmek için bir hata terimi eklenmesi gerekir ve varsayılır. Her uydunun hata terimi aynıdır (Denklem 2).

Uzay pozisyonunun üç parametresine ek olarak, artık daha fazla hata terimi vardır Çözülmesi gereken 4 parametre vardır ve çözülmesi için en az 4 uydu gereklidir (Denklem 3).

GPS'in dezavantajları da açıktır, müdahale edilmesi kolaydır.Örneğin, GPS ile aynı frekansta (yaklaşık 1500 mhz) veya iç mekanlarda, bodrumlarda radyo sinyalleri vardır, çünkü duvarlar demir, seramik ve karbon fiber gibi çok fazla emici malzeme kullanır.

Baz istasyonu konumlandırma

Baz istasyonu konumlandırma prensibi radara benzer. Radar konumlandırma süreci, radar dalgalarının fırlatılması, bir nesneye çarpılması ve geri dönülmesi ve ardından nesnenin zaman ve dalga hızına bağlı olarak konumunun hesaplanmasıyla aşağıdaki gibidir. Aynı şekilde, baz istasyonu, sürekli olarak dışarıya doğru yayılan oldukça bir radar. Cep telefonlarımız her zaman çoklu baz istasyonlarının kapsama alanı altındadır. Cep telefonu, her bir baz istasyonunun TOA (varış zamanı) veya TDOA (varış zamanı farkı) sinyalini elde etmek için farklı baz istasyonların uydu-yer bağı pilot sinyallerini "ölçecektir". Bu ölçüm sonucuna göre, baz istasyonunun koordinatları (sinyalde) ile birleştirilerek, cep telefonunun koordinatları hesaplanabilir.

Daha sonra yukarıdaki üç noktalı konumlandırma formülüne göre hesaplanabilir.

Ancak GPS gibi, bariz bir kusuru vardır: binalara giremez ve iç mekan konumlandırmasına ulaşamaz. Yeraltı garaj navigasyonu, mağaza ve eşya arayan alışveriş merkezleri ve hatta kaybolan çocuklar gibi artan sayıda kapalı mekan konumlandırma iş senaryoları ile iç mekan konumlandırmaya acil bir ihtiyaç vardır. Bu nedenle WiFi, Bluetooth ve UWB gibi teknolojiler doğdu.

WiFi Bluetooth konumlandırma

Merak ediyorum, biri Meituanın Mobikeı ve Didinin Yeşil Portakalını kullandı mı? Bluetoothu açmanıza her zaman izin veriyorlar. WiFi ve Bluetooth'un sabit çekme teknolojisi benzerdir, ancak sinyal kodlaması ve frekansı farklıdır. WiFi ile göstereceğiz.

Cep telefonumuz WiFi'yi açtığında, cep telefonumuz diğer AP'lerden (diğer cep telefonları veya kablosuz yönlendiriciler olabilir) sinyalleri alan ve kendi sinyallerini ileten bir WikFi etkin noktası (AP) haline gelir. Şehirlerde gittikçe daha fazla WiFi bağlantı noktası var ve her nokta her zaman 5-20 AP sinyali alabilir.

AP'lerin küresel olarak benzersiz bir MAC adresi vardır ve genellikle kablosuz AP'ler bir süre hareket etmez. Wi-Fi açıldığında, cep telefonu, şifreli veya bağlı olup olmadığına bakılmaksızın veya sinyal gücü kablosuz sinyal listesinde görüntülenmesi için yeterli olmasa bile AP tarafından yayınlanan MAC adresini alabilir.

Cep telefonu toplanan bu sinyalleri konumlandırma motoruna gönderir ve saf Bayes algoritması aracılığıyla konumunu hesaplar. Bu formül sıradan insanların anlayış seviyesinin ötesinde olduğu için açıklamayacağım. İlgilenenler kendi kendilerine öğrenmek için "Naif Bayes Tabanlı Konumlandırma Algoritması" makalesini arayabilirler: https://blog.csdn.net/weixin_33928137/article/ ayrıntılar / 90708754

Genel olarak Bluetooth, doğruluk ve güvenilirlik açısından WIFI'dan çok daha yüksektir.

IP konumlandırma

IP konumlandırma teknolojisi, hedef ana bilgisayarın gerçek fiziksel adresini IP adresi aracılığıyla bulur ve hedeflenen reklamcılık, çevrimiçi güvenlik izleme ve ağ saldırısı kaynağı izleme gibi konumla ilgili hizmetlerde yaygın olarak kullanılır.

Genel olarak, bu güvenilmez bir konumlandırma teknolojisidir. IP adresi kaynakları değerli olduğundan, çoğu kullanıcı internette dinamik IP adresleri aracılığıyla gezinir. Sözde dinamik, her çevrimiçi olduğunuzda Telekom'un size rastgele bir IP adresi atayacağı, statik ise her çevrimiçi olduğunuzda bir adres kullanacağı anlamına gelir. Genel olarak konuşursak, sıradan geniş bant dinamik bir IP'dir ve ayrıca doğrudan fiber optik erişimi olan statik IP'ler de vardır.

IP'mizin statik olduğunu varsayarsak, konumunuzu nasıl bulabilirsiniz? Bildiğimiz gibi, IP adresi esasen 32 bitlik işaretsiz bir tamsayıdır (işaretsiz tamsayı), 0 ile 2 ^ 32 arasında değişir ve toplamda yaklaşık 4,3 milyar IP adresi bulunur. Genel olarak 192.168.0.1 şeklinde ifade edilir.

IP adreslerinin bölünmesi, RIR organizasyonu tarafından yönetilir. APNIC, merkezi Melbourne, Avustralya'da bulunan Asya'daki IP adreslerinin tahsisinden sorumludur. Büyük RIR ajansları, IP adreslerinin bölünmesi, yani whois kayıtları hakkında kayıt bilgileri sağlamıştır. Bunu başlıca RIR kurumları tarafından sağlanan whois sorgu sayfasında görüntüleyebilir veya sorgulamak için whois komutunu kullanabilirsiniz:

IP'nin whois bilgileri, IP'yi kullanmak için başvuran operatörün bilgilerini içerir ve ağ segment açıklama bilgilerinde milliyet ve il bilgileri yer alacaktır. Bununla birlikte, her cadde için de doğru olmamız gerekiyor, bu da bu IPto coğrafi veritabanını geliştirmek için çeşitli araçlar gerektiriyor. Örneğin, geniş bant için başvurduğumuzda, kullanıcının coğrafi konumunu göndeririz; coğrafi konumu bulmak için sitedeki telefon, adres, faks ve diğer bilgileri araştırmak için tarayıcıları kullanırız; yaklaşık sonuçlar, ağ gidiş dönüş süresine göre elde edilir. Bu yöntem, her birine konumlandırılacak IP'yi ölçer Referans noktasının gidiş-dönüş gecikmesini bilerek, geri gecikmeyi ana bilgisayarı bulmak için coğrafi bir mesafe olarak hesaplayın.

Bu nedenle, IP konumlandırma teknolojisinin arkasında çok büyük bir veri tabanına ihtiyaç vardır.Doğru olmak istiyorsanız, konumunuzu anlamak için diğer teknolojileri birleştirmeniz gerekir. Örneğin Baidu, yüksek hassasiyetli bir IP konumlandırma API'sine sahiptir, çünkü Baidu Search, Baidu Maps ve Baidu Netdisk gibi hizmetlerini sıklıkla kullandığımız için verilerimizi gizlice arka planda toplar ve her bir kullanıcı profilini oluşturur. Çevrimdışı hizmetlerde Baidu'dan daha zengin olan Ali'nin bizi kendimizden daha doğru anladığını düşünüyorum.

Baidu'nun coğrafi bilgileri almak için API'si

function getXYbyIP { var url = "https://api.map.baidu.com/location/ip?ak=HQi0eHpVOLlRuIFlsTZNGlYvqLO56un3coor=bd09ll"; // Baidu $ .ajax ({ url: url, tür: 'POST', dataType: 'JSONP', eşzamansız: yanlış, cache: true, // önbelleğe alınıp alınmayacağı yanlış olabilir başarı: işlev (veri) { uyarı (JSON.stringify (veri)); }, hata: function (veri) { // alert (JSON.stringify (veri)); } }); }

Veya adresi doğrudan tarayıcıya yapıştırın:

WeChat Mini Programı ve LBS

Özetle, LBS'nin temel taşını inşa etmek büyük sermaye yatırımı gerektirir. Uyduları başlatmanız, çok sayıda optik fiber ayarlamanız ve baz istasyonları kurmanız gerekir (baz istasyonlarının yoğunluğu 5G'dir). > 4G > 3G > 2G), bir IP veri tabanı oluşturmak ve bunu coğrafi bilgiler ve ticari bilgilerle ilişkilendirmek, bu da farklı gradyanlara sahip şirketlerin bu görevleri ve maliyetleri üstlenmesini gerektirir.

Yurtiçi İnternet şirketleri genellikle kullanıcılara üçüncü taraf verilerini sağlamak için son adımı atarlar. Harita yapan ilk şirketler olan Baidu, Tencent ve AutoNavi, harita görüntüsü, IP bilgisi, cadde ve mağaza adresleri gibi çok yönlü verileri sağlayabilir. Katların dahili haritaları ve AIDS hastalarına ilişkin veriler gibi niş alanlarda, binlerce şirket bunları sağlıyor.

PC çağının başlarında, kullanıcılara yerel hizmetler sunmak için çok az şirket LBS'yi birleştirebildi.Mobil terminal çağında, devrim gittikçe daha ciddi hale geldikçe, LBS'den tekrar bahsedildi. Örneğin, yakındaki insanları bulmak için sallamak, bisiklet paylaşmak, yemek sipariş etmek ve hizmetleri LBS ile birleştirmek APP'nizin öne çıkmasını sağlayabilir.

Şu anda Tencent, geliştiricilere farklı seviyelerde hizmet API'leri, temel harita hizmetleri, eklentiler ve endüstri çözümlerinden farklı senaryolarla hizmet veren en kullanıcı dostu olanıdır. Kanallar açısından WeChat Mini Programları, aralarında en popüler dağıtım kanalıdır.Tencent Location Services, Mini Program ekolojisini tam olarak benimser ve Mini Programların haritanın "kanatlarını" takmasına yardımcı olur!

Aksine, WeChat Mini Programlarının çoğu geliştiricisinin becerileri çok zayıftır.Bu küçük muadilleri bulamayabilirler ve orijinal üçüncü taraf verilerini işleyemeyebilirler (profesyonel terminoloji nedeniyle). Bu nedenle, WeChat uygulaması arayüzün karmaşıklığına göre üç gradyana bölünmüştür: tek işlevli bir API, oldukça özelleştirilebilir bir sekme türü bileşen ve çok yüksek tamamlanmış bir WeChat eklentisi.

API aşağıdaki şekilde listelenmiştir:

  • Adres bilgilerini almak için API (değişiklikleri izleme ve izlemenin askıya alınması dahil)

wx.stopLocationUpdate wx.startLocationUpdateBackground wx.startLocationUpdate wx.openLocation wx.onLocationChange wx.offLocationChange wx.getLocation wx.chooseLocation
  • Harita örneği API'si oluşturun ve örnekle ilgili işlemleri eşleyin

wx.createMapContext MapContext.getCenterLocation MapContext.getRegion MapContext.getRotate MapContext.getScale MapContext.getSkew MapContext.includePoints MapContext.moveToLocation MapContext.translateMarker
  • Pusula ve jiroskop dahil olmak üzere kullanıcının yönünü almak için API

wx.stopCompass wx.startCompass wx.onCompassChange wx.offCompassChange wx.stopGyroscope wx.startGyroscope wx.onGyroscopeChange wx.offGyroscopeChange
  • Etiketli bileşenler, bir

< harita >
  • Üç WeChat uygulama eklentisi vardır:

  • Rota planlama: Başlangıç ve bitiş noktasına göre en iyi seyahat rotasını akıllıca planlayın ve çeşitli seyahat modlarını destekleyin.

  • Metro haritası: Ülke genelindeki tüm şehirlerin statik ekranını, bilgi sorgulamasını, rota alımını ve planlama işlevlerini destekler.

  • Harita noktası seçimi: Mevcut konumunuzu hızlı ve doğru bir şekilde seçin ve onaylayın ve ilgili konum bilgilerini geliştiriciye iade edin.

Ayrıntılar için buraya bakın:

https://lbs.qq.com/miniprogram_plugin/index.html

Geliştirme uygulaması

Aslında, başka bir bakış açısından, bu API'ler insanların koşullarına, yani amatör geliştiricilere, usta geliştiricilere ve yerel zorba geliştiricilere göre bölünmüştür.

Temel olarak, amatör geliştiriciler wx.openLocation, wx.getLocation ve wx.chooseLocation gibi üç API'yi kullanarak harita bileşenini kendi konumlarını elde etmek, belirli bir yerin enlem ve boylamını elde etmek ve bunları haritada görüntülemek için kullanabilir.

WeChat geliştirici aracını açalım ve küçük bir program oluşturalım.

Daha sonra index.wxml'e bir buton ekliyoruz.

< görünüm > < button bindtap = "getPosition" > Haritayı açın ve adresi seçin < /buton > < /görünüm >

Yukarıdaki getPosition olayını bağlamak için index.js'ye eklenmesi gerekir. getPosition çok basittir, yani kullanıcının mevcut konumunu alın.

getPosition: function { wx.getLocation ({ tür: 'gcj02', başarı: function (res) { var latitude = res.latitude // Latitude var boylam = res.longitude // boylam var speed = res.speed // speed, -1 hareket etmemek anlamına gelir, belki yatakta yatarak makale yazarken var doğruluğu = res.accuracy // konum doğruluğu var yükseklik = res.altitude // rakım, birim m var verticalAccuracy = res.verticalAccuracy // Dikey doğruluk console.log (res) } }) },

Sonra düğmeye tıkladığımda app.json'a bir şey eklemem gerektiğini fark ettim.

{ "sayfalar": , "pencere": { "backgroundTextStyle": "light", "navigationBarBackgroundColor": "#fff", "navigationBarTitleText": "WeChat", "navigationBarTextStyle": "siyah" }, "izin": { "cope.userLocation ": { "desc": "Merak etmeyin !!! Konum bilgileriniz yalnızca mevcut uygulama için kullanılacaktır" } }, "sitemapLocation": "sitemap.json" }

Sonra butona tıklıyoruz ve adresin yazıldığını bulacağız.

Şu anda haritayı wx.openLocation (OBJECT) ile açmamız gerekiyor, bu da sayfayı aynı anda kaplayan bir web görünümüne benzeyen belirli bir konumu görüntülemek için.

wx.openLocation ({ enlem: res.latitude, boylam: res. longitude, scale: 18, // En büyüğü ancak bu olabilir complete: function { console.log ('tamamlandı:', bağımsız değişkenler); } });

Bir konum seçmek istiyorsak, wx.chooseLocation (OBJECT) * kullanmamız gerekir. Görünüme başka bir düğme ve yer tutucu ekliyoruz.

< görünüm > < button bindtap = "choosePosition" > Konum seçin < /buton > < görünüm > Seçtiğiniz konum: {{adres}} < /görünüm > < /görünüm >

İndex.js'de, verilere adres özelliğini eklemeniz ve ardından bir selectPosition yöntemi eklemeniz gerekir.

selectPosition: function { var o = bu wx.chooseLocation ({ başarı: function (res) { // başarı console.log (res, "konum") that.setData ({ adres: res.address }) } }) },

Etki aşağıdaki gibidir:

Özetlemek gerekirse, bu üç API kullanılarak çağrılan haritaların doğruluğu çok sınırlıdır. Paylaşılan bisikletler kullandığımızda, küçük mavi bisikletler ve Meituan bisikletleri on metreden fazla hassas olabilir ve şimdi harita 300 metreden fazla olabilir. Wx.getLocation türünün tür parametresini gcj02 olarak ayarlamamızla ilgili mi? gcj02 bir harita koordinat sistemi standardıdır. Şu anda Çin'de aşağıdaki üç koordinat sistemi hakimdir:

  • Dünya koordinatları (WGS84)

    Uluslararası standart, GPS cihazından alınan verilerin koordinat sistemidir.

    Uluslararası harita sağlayıcıları tarafından kullanılan koordinat sistemi.

  • Mars'ın koordinatlarına (GCJ-02), Ulusal Araştırma Bürosu'nun koordinat sistemi de denir.

    Çin standardına göre, Merkez Bankası'nın mobil cihazından elde edilen koordinat verileri bu koordinat sistemini kullanıyor.

    Ulusal düzenlemeler: Yerel olarak yayınlanan çeşitli harita sistemleri (elektronik formlar dahil), coğrafi konumları ilk kez şifrelemek için en azından GCJ-02'yi kullanmalıdır.

  • Baidu Koordinatları (BD-09)

    Baidu standardı, Baidu SDK, Baidu haritası, Geocoding kullanımı.

Baidu koordinatlarını bir kenara bırakarak, WGS84 ve GCJ-02 arasındaki farka bir göz atalım. WeChat uygulamasının getLocation'ı WGS84'ü de desteklese de, yalnızca haritayı açtığınızda ve sizi GCJ-02'yi kullanmaya zorlamakla eşdeğer olan openLocation'ı kullandığınızda GCJ-02'yi kullanabilirsiniz. Bu, "Navigasyon Elektronik Haritalarının Güvenli İşlenmesi için Temel Gereksinimler" adlı ulusal bir belge tarafından şart koşulduğu için, standart numara GB 20263-2006'dır. Standart Bölüm 4, Bölüm 4.1 şunları şart koşmaktadır:

4.1 Navigasyon elektronik haritası halka açık olarak yayınlanmadan, satılmadan, dağıtılmadan, sergilenmeden ve kullanılmadan önce, mekansal konum teknolojisi ile işlenmelidir.

Bu sözde "uzaysal konum teknolojisi işleme", haritayı GPS koordinatları tarafından kullanılan WGS-84 koordinat sisteminden "Mars koordinat sistemine" (GCJ-02) dönüştürmektir. Dönüşümden sonraki sapma genellikle 300 ~ 500 metredir. Başka bir deyişle, cep telefonunuzun GPS'i tarafından elde edilen koordinatlar doğrudan bu "Mars koordinat sistemi" haritasına yerleştirilmişse, 300 ila 500 metrelik bir sapma olacaktır. Erken Gaode haritaları vahşi doğada hatalıydı. Bu nedenle, doğada düzeltmek için başka veri yoktu.

Bu bir çukur. Devlet size bunu neden yapmak istiyorsunuz, diyor, bu devlet sırlarını saklamak ve ulusal güvenliği sağlamaktır. Chazhihu ile ilgili makale, mevcut ABD füzelerinin 3,5 metreye kadar hassas olabileceğini, bu nedenle mevcut harita bilgilerinin ABD tarafından doğrudan kullanılamamasını sağlamak için 300 metreden fazla bir sapmanın gerekli olduğunu söyledi. Ancak Amerika Birleşik Devletleri harita bilgilerinizi kullanmakta çok iyi değil. Anahtar deliği casus uyduları var. NRO şifre çözme raporuna göre, 1971'de fırlatılan KH-9 uydusu yerden en az 0,6 metre olan nesneleri ayırt edebiliyor; KH - 1976'da başlatıldı 11 uydu, 15 santimetreye kadar olan nesneleri ayırt edebilir ve renkli fotoğraflar döndürür.

Bu nedenle, saf GCJ-02 harita verileri, yüksek hassasiyetli teslimat ve navigasyon verilerimizi tatmin edemez Bu nedenle, WeChat uygulamasının arka planında yüksek hassasiyetli veri şarj öğeleri vardır veya yalnızca Bluetooth gibi diğer tanımlanmış teknolojileri kullanır.

Şimdi bir usta gibi davranıyoruz ve kendimiz bir harita çiziyoruz. İstediğimiz kadar doğru olsa da, üzerine POI (ilgi çekici noktalar, bir POI bir ev, bir dükkan, bir posta kutusu olabilir ve bir Otobüs durakları vb.), Kontrol noktaları, pusulalar, yollar vb.

Xml'yi değiştiriyoruz, bir harita etiketi ekliyoruz ve haritadaki işaretlerin nerede olduğunu açıklamak için haritanın altına bir görünüm ekliyoruz.

< map class = "map-container" markers = "{{markers}}" longitude = "{{longitude}}" latitude = "{{latitude}}" > < /harita > < view class = "işaretçi-bilgisi" > < görünüm > * {{markers.title}} < /görünüm > < görünüm > {{markers.address}} < /görünüm > < /görünüm >

İşaretleyicilerin kullanımı burada bulunabilir:

https://developers.weixin.qq.com/miniprogram/dev/component/map.html

onReady: function { this.setData ({ enlem: 39.984060, boylam: 116.307520, belirteçler: }); },

Son olarak, aşağıda gösterildiği gibi haritaya 400 piksellik bir yükseklik ekliyoruz:

Genellikle bir harita, hepsi süpermarketler, restoranlar, oteller, benzin istasyonları vb. Olan birçok işaret koyarız. Bu esas olarak uygulamanızın sağladığı hizmetlere bağlıdır. Örneğin navigasyon her şeye sahip olacak, eğlenceli ise parklar ve turistik yerler olacaktır. Bu verilerin üçüncü taraf bir şirketten sağlanması gerekir.

Bakalım kural yolu kullanıcıya nasıl gideceği konusunda rehberlik edecek mi? Bu, birçok noktadan oluşan bir çoklu çizgi olan polyline niteliğini gerektirir ve rengini, stilini ve genişliğini ayarlayabilirsiniz.

< harita sınıfı = "navi_map" longitude = "102.67484140406796" latitude = "25.03682953251695" scale = "100" include-points = '{{points}}' polyline = "{{polyline}}" > < /harita > onReady: function { var lat = 25.03682953251695, lng = 102.67484140406796; var puan = var polyline =; this.setData ({ boylam: lng, enlem: lat, çoklu çizgi: çoklu çizgi, noktalar: noktalar }) },

Zorluk bu noktaları nasıl elde edeceğimizdir, harita üzerinde örneklemek için PS kullanmamız gerekiyor.

Yola odaklanmaz, ancak bir bölgeye odaklanırsak çokgenler kullanabiliriz. Örneğin, ortak bisikletler için park alanları bu özelliği kullanabilir. Sadece çoklu çizginin tanımını değiştirmemiz gerekiyor.

var poligon =; this.setData ({ boylam: lng, enlem: lat, çokgen: çokgen, noktalar: noktalar })

Yalnızca wxml'yi değiştirmeniz gerekir:

< map class = "navi_map" longitude = "102.67484140406796" latitude = "25.03682953251695" scale = "100" include-points = '{{points}}' polygons = "{{polygon}}" > < /harita >

Harita ile sürüklenecek ve taşınacak bu işaretleyicilere ek olarak, kontrol adı verilen bir işaretçi sınıfı da var, ancak şimdi kapak görünümünü kullanmamız gerekiyor. Harita üzerinde sabit bir alan çizecek, üzerine bir pusula yerleştirecek, yakınlaştırıp küçük bir düğme ve yukarı dönüş düğmesi yerleştirecektir.

Ardından haritaya bir arama kutusu koymaya çalışıyoruz. Kapak görünümünün haritaya yerleştirilmesi gerekir ve kapak görünümüne yalnızca sınırlı sayıda etiket yerleştirilebilir.Elbette desteklenmeyen etiketleri de koyabilirsiniz ancak bir uyarı verilecek ve hiç desteklenmeyecektir.

Kapak görünümünün kendisinde de birçok çukur vardır:

1. Kapak görünümü, arka plan gradyan rengini desteklemez ve dahili etiketi gradyan rengini kullanamaz. Çözüm: Arka plan rengini tek bir renge değiştirin.

2. Kapak görünümü, tek konumlu bir sınır kenarlığı ayarlamayı desteklemez.Örneğin, etiketi bölmek için bir kenarlık üst üst kenar çizgisi eklemek istiyorsunuz. Çözüm: Bir sınır çizgisini simüle etmek için yüksekliğini 1 piksel olarak ayarlamak için kapak görünümünü kullanın.

3. Kapak görünümü metin alanını kapsamaz. Çözüm: Odağı kaybettiğinde metin alanını görünüm etiketiyle değiştirin ve tıklandığında metin alanına geri dönün.

< map class = "navi_map" longitude = "102.67484140406796" latitude = "25.03682953251695" scale = "100" include-points = '{{points}}' polygons = "{{polygon}}" > < ! - Arama kutusu uygulaması - > < cover-view class = 'cover-input' bindtap = 'tapInput' > < kapak görünümü sınıfı = 'metin' > {{inputInfo}} < / kapak görünümü > < input class = 'input' value = '{{inputModel}}' odak = '{{inputFocus}}' bindblur = 'blurInput' > < /giriş > < / kapak görünümü > < ! - Arama kutusu uygulaması - > < /harita > veri: { sloganı: 'Merhaba Dünya', Kullanıcı bilgisi: {}, hasUserInfo: yanlış, adres:'', boylam: 0, // boylam enlem: 0, // Enlem işaretçiler:, polipon:, inputFocus: yanlış, inputModel: '', inputInfo: 'arama', canIUse: wx.canIUse ('button.open-type.getUserInfo') }, tapInput { this.setData ({ // Gerçek cihazdaki girdiye odaklanın inputFocus: doğru, // İlk yer tutucu temizlendi inputInfo: '' }); }, / ** * Giriş odağı kaybettikten sonra, girişin giriş içeriği kapak görünümüne verilir * / blurInput (e) { this.setData ({ inputInfo: e.detail.value || 'arama' }); },

Ardından bazı stiller ekleyin:

.cover-input { genişlik:% 80; yükseklik: 32px; satır yüksekliği: 32px; kenarlık yarıçapı: 5px; arka plan rengi: rgba (255, 255, 255, 0.9); konum: göreceli; sol:% 50; dönüşümü: translateX (-% 50); sol dolgu: 15rpx; padding-right: 15rpx; } .Metin{ yükseklik: 32px; satır yüksekliği: 32px; } .giriş{ yükseklik: 32px; satır yüksekliği: 32px; / * Margin-top metnin yüksekliğidir, görsel olarak tutarlı olmasını sağlayın * / margin-top: -32px; }

Ya ona bir pusula eklemek istersek. Kapak görünümüne bir kapak resmi koyuyoruz, resim aşağıdaki gibi görünüyor, tabi ki üzerine doğru bir açı koymamız gerekiyor.

< kapak resmi sınıfı = 'compassbg' src = 'img / compass.png' style = 'transform: rotate ({{rotate}} deg);' > < /Kapak resmi >

Bu kod satırlarını onLoad yöntemine eklemeniz yeterlidir.

var o = bu wx.onCompassChange (function (res) { that.setData ({ // Sapma derecesini hesaplayın döndürme: 360-res.direction.toFixed (0) }) });

Daha doğru Bluetooth konumlandırma kullanmak istiyorsak, bunu yukarıda belirtilen üç noktalı konumlandırma formülünü kullanarak Bluetooth sinyaline göre kendimiz hesaplamamız gerekir. İlgilenenler aşağıdaki bağlantıyı görebilir:

https://blog.csdn.net/coder_daiwang/article/details/78436996

Zorba bir oyuncuysanız, WeChat uygulama eklentilerini deneyebilirsiniz.Bu eklentiler temelde istediğiniz işlevlerin bulunduğu yeni bir sayfa açar. Ancak, bu eklentileri kullanmak karmaşık bir erişim akışı gerektirir ve bir alan adı beyaz listesi veya başka bir şey eklemesi gerekir, bu yüzden burada göstermeyeceğim.

https://lbs.qq.com/miniprogram_plugin/index.html

Son olarak size Amway harita açık platform-Tencent Konum Hizmeti vereceğim.WeChat APP ve Mini Programlarındaki tüm native harita hizmetlerinin Tencent Location Services tarafından desteklendiği söyleniyor, bu nedenle teknolojilerine göre geliştirilen harita servisi WeChat ile uyumludur. Uygulamaların kombinasyonu en doğal olanıdır ve kullanıcı deneyimi de en yumuşak olanıdır.

Uygulama altında harita işlevlerini geliştirmeniz gerekiyorsa, Tencent konum hizmetinin en iyi seçim olduğu söylenebilir. Şimdi, küçük programların geliştirilmesiyle ilgili tüm içeriği, çeşitli API'ler, bileşenler, eklentiler, geliştirme araçları, küçük program geliştiriciler için çözümler içeren küçük bir program çözümüne entegre ettiler ... Okurların farklı senaryolardaki ihtiyaçları, herkesin yukarı çıkmasını ve deneyimlemesini şiddetle tavsiye ediyorum.

https://lbs.qq.com/product/miniapp/home/

sonuç olarak

LBS ile ilgili bilgi çok niş, ancak çok pratiktir. Bu makale, gelişimine ve bazı bilgi noktalarına sadece gelişigüzel bir giriş niteliğindedir. Harita görüntüsü ve konum konumlandırma, karmaşık dünyamıza tam anlamıyla karşılık gelir. Dünya ne kadar karmaşık, haritalar ve konumlandırma karmaşık. Üç büyük üreticiden gelen verilerin çökelmesi ve yüksek oranda soyutlanması sayesinde, geliştirmemiz daha basit hale geldi ve kamusal yaşam daha iyi hale geldi.

Lu Qi: Kıştan sonra ilkbahar olmalı ve önce hayatta kalmalısınız
önceki
Teknoloji endüstrisinin başlangıcı sona erdi
Sonraki
Bir programcı olarak Bahar Festivali için bilet almadım ama bunları aldım. Buna değer
React kod yapısı nasıl tasarlanır?
WeChat doğrudan QQ'ya para aktarabilir; Xiaomi ve China Unicom mevcut en ucuz 5G paketini başlattı; Git 2.25.0 yayınlandı | Geek Headlines
Ali kaynağı sonuna kadar açacak
Jia Yangqing bu Alman programcıyı neden övdü? Açık hayatını izledikten sonra düştüm
Programcıların dikkatine, bu WeChat grubu İngilizce öğrenebilir ve tüm süreç ücretsizdir
İlk tam yığın web uygulamam
Jia Yangqing teşekkür mektubu: Ali açık kaynak 10 yıldır, binlerce açık kaynak insana saygı gösterin
2020'de Android için yeni beklentiler neler?
Java 14'ün yeni özellikleri nelerdir?
Bayrak artık kurulmuyor, Mark Zuckerbergin Yeni Yıl mesajı
JD.com "70 milyon yuan, tüm proje ekiplerinden ihraç edildi" yanıtını verdi; WeChat Moments, Alipay'in Wufu'yu engelledi; MySQL 8.0.19 yayınlandı | Geek Manşetleri
To Top