Proyek ini membutuhkan versi web peta Baidu yang akan dikembangkan secara offline. Berikut adalah ringkasan dari proses dan pengalaman pengembangan Anda sendiri.
Persyaratan perkiraan adalah: Setiap mobil dilengkapi dengan penerima perusahaan, yang akan memberi umpan balik koordinat kendaraan, kecepatan, kemudi dan informasi lainnya secara real time, dan setelah menerima informasi setiap kendaraan, lokasi kendaraan ditarik pada peta Baidu secara real time. Poin kerja tidak harus memiliki jaringan, sehingga diperlukan pengembangan offline.
Ada tiga poin teknis utama dalam proses ini:
1. Cara mendapatkan API offline
2. Cara Mengembalikan Diagram Ubin Offline
3. Cara Mengonversi Koordinat WGS ke Koordinat Peta Baidu Saat Offline
Proses Resolusi Masalah:
1. Karena peta Baidu tidak mendukung peta offline, kita perlu menemukan cara untuk mengubah kode online menjadi kode offline.
Di sini Anda dapat merujuk ke: http://my.oschina.net/smzd/blog/548538
Saya telah menyusun salinan di sini, dan saya juga menulis demo offline sesuai dengan contoh demo. Tentu saja, offline tidak bisa sesempurna online, setelah semua, beberapa fungsi masih tidak dapat digunakan. (Versi ini didasarkan pada Baidu Maps API v2.0)
Bagaimana menggunakan:
1. Tentukan sufiks gambar ubin yang Anda gunakan, seperti .png, .jpg. Ubah IMGEXT DI BAIDUMAP_OFFLINE_V2_LOAD.js
var bdmapcfg = { 'imgext':'.jpg', //The suffix of the tile picture-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------2. Tentukan direktori ubin yang Anda gunakan. Secara default, itu ada di baidumap_v2/ ubin/ direktori, dan Anda juga dapat mengubahnya ke alamat lain. Ubah tiles_dir di baidumap_offline_v2_load.js
3. Lihat Demo untuk Menulis Kode, Poin Kunci adalah sebagai berikut:
1) Cukup muat file muat
<type script = "Text/JavaScript" src = "baidumapv2/baidumap_offline_v2_load.js"> </script>
2) Muat file CSS (tampaknya tidak perlu)
<tautan rel = "stylesheet" type = "text/css" href = "../../ baiduumapv2/css/baidu_map_v2.css"/>
3) Tentukan wadah untuk menempatkan peta dan gunakan CSS untuk mengontrol tinggi dan lebar
<Div ID = "MAP_DEMO"> </Div>
4) Tulis kode JS
<script type = "text/javascript"> // Baidu Map API Function var Map = bmap.map baru ("MAP_DEMO"); // Buat peta instance map.centerandzoom (bmap.point baru (116.404, 39.915), 8); // inisialisasi peta, atur koordinat titik tengah dan level peta //map.addcontrol(new bmap.maptypeControl ()); // Tambahkan Kontrol Jenis Peta untuk hanya mendukung peta elektronik secara offline, dan satelit/3D tidak mendukung //map.setCurrentCity("beijing "); // Setel peta offline yang ditampilkan oleh peta tidak mendukung! Lai peta.enablesCrollwheelzoom (true); // buka roda mouse ke zoom map.addcontrol (baru bmap.navigationControl ()); // tombol penskalaan </script>2. Dapatkan Diagram Ubin
Di sini Anda dapat merujuk ke: http://my.oschina.net/smzd/blog/619397
Tentu saja, ada juga alat unduhan online, seperti: pengunduh peta elektronik serba bisa
3. Bias untuk secara langsung menempatkan koordinat (WGS) yang diterima oleh penerima ke peta Baidu, karena peta Baidu telah membuat perawatan khusus untuk keselamatan. API Layanan Web -nya menyediakan API konversi koordinat, tetapi merupakan antarmuka konversi koordinat yang disediakan di HTTP, sehingga masih tidak dapat dipisahkan dari jaringan. Di sini, kami menggunakan beberapa pengetahuan profesional untuk mengonversi koordinat WGS ke GCJ, dan kemudian untuk mengubah koordinat GCJ menjadi koordinat BD Baidu. Akurasi verifikasi hampir akurat.
kelas publik CoorConvertutil {// pi static double pi = 3.14159265358979324; // Faktor proyeksi ellipsoid satelit proyeksi koordinat ke sistem koordinat bidang statis ganda A = 6378245.0; // Eksentrisitas ellipsoid statis ganda EE = 0,00669342162296594323; // PI Jumlah Konversi Publik Statis Ganda X_PI = 3.14159265358979324 * 3000.0 /180.0; public static double [] wgs2bd (lat ganda, lon ganda) {double [] wgs2gcj = wgs2gcj (lat, lon); ganda [] gcj2bd = gcj2bd (wgs2gcj [0], wgs2gcj [1]); mengembalikan gcj2bd; } / ** * GCJ Koordinat ke koordinat baidu * @param lat * @param lon * @return * / public static double [] gcj2bd (lat ganda, lon ganda) {double x = lon, y = lat; double z = math.sqrt (x * x + y * y) + 0.00002 * Math.sin (y * x_pi); ganda theta = math.atan2 (y, x) + 0,000003 * math.cos (x * x_pi); double bd_lon = z * math.cos (theta) + 0,0065; double bd_lat = z * math.sin (theta) + 0,006; return double baru [] {bd_lat, bd_lon}; } public static double [] bd2gcj (lat ganda, lon ganda) {double x = lon - 0,0065, y = lat - 0,006; double z = math.sqrt (x * x + y * y) - 0,00002 * Math.sin (y * x_pi); ganda theta = math.atan2 (y, x) - 0,000003 * math.cos (x * x_pi); gg_lon ganda = z * math.cos (theta); gg_lat double = z * math.sin (theta); return double baru [] {gg_lat, gg_lon}; } / ** * wgs koordinat ke koordinat gcj * @param lat * @param lon * @return * / public static double [] wgs2gcj (lat ganda, lon ganda) {double dlat = transformlat (lon - 105.0, lat - 35.0); DLOP DLON = Transformlon (LON - 105.0, LAT - 35.0); double radlat = lat / 180.0 * pi; Double Magic = Math.sin (Radlat); sihir = 1 - ee * sihir * sihir; ganda sqrtmagic = math.sqrt (sihir); dlat = (dlat * 180.0) / ((a * (1 - ee)) / (sihir * sqrtmagic) * pi); dlon = (dlon * 180.0) / (a / sqrtmagic * math.cos (radlat) * pi); double mGlat = lat + dlat; double mglon = lon + dlon; double [] loc = {mGlat, mGlon}; mengembalikan loc; } private static double transformlat (lat ganda, lon ganda) {ret double = -100.0 + 2.0 * lat + 3.0 * lon + 0.2 * lon * lon + 0.1 * lat * lon + 0.2 * Math.sqrt (Math.Abs (lat)); ret + = (20.0 * math.sin (6.0 * lat * pi) + 20.0 * math.sin (2.0 * lat * pi)) * 2.0 / 3.0; ret + = (20.0 * math.sin (lon * pi) + 40.0 * math.sin (lon / 3.0 * pi)) * 2.0 / 3.0; ret + = (160.0 * math.sin (lon / 12.0 * pi) + 320 * math.sin (lon * pi / 30.0)) * 2.0 / 3.0; Return Ret; } private static double transformlon (lat ganda, lon ganda) {ret double = 300.0 + lat + 2.0 * lon + 0.1 * lat * lat + 0.1 * lat * lon + 0.1 * math.sqrt (math.abs (lat)); ret + = (20.0 * math.sin (6.0 * lat * pi) + 20.0 * math.sin (2.0 * lat * pi)) * 2.0 / 3.0; ret + = (20.0 * math.sin (lat * pi) + 40.0 * math.sin (lat / 3.0 * pi)) * 2.0 / 3.0; ret + = (150.0 * math.sin (lat / 12.0 * pi) + 300.0 * math.sin (lat / 30.0 * pi)) * 2.0 / 3.0; Return Ret; } / ** * Divisi dan rotasi gelar * @param lat latitude ddmm.mmmm * @param lon longitude dddmm.mmmm * @return * / public static double [] dufen2du (string lat, string lon) {double latd = double.parsedouble (lat.substring (0, 2)); ganda latm = double.parsedouble (lat.substring (2)); Double LatNew = Latd+Latm/60; double lond = double.parsedouble (lon.substring (0, 3)); lonm ganda = double.parsedouble (lon.substring (3)); Double lonnew = Lond+LonM/60; return double baru [] {latnew, lonnew}; }}Akhirnya, lihat tangkapan layar efek proyek:
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.