Saya telah mencari solusi yang solid yang akan memungkinkan saya untuk membuat peta web dan overlay poligon vektor tanpa mengambil selamanya untuk memuat data tersebut dengan tujuan memungkinkan saya untuk membuat setiap poligon menampilkan warna yang berbeda pada acara melayang.
Sejauh yang saya ketahui ada 3 opsi spesifik untuk mencapai ini melalui kanvas, SVG, Flash.
Flash sepertinya itu akan menjadi solusi terbaik jika itu akan berfungsi pada iPhone / iPad apel karena tampaknya memberikan tampilan rendering tercepat dan terbersih. Kanvas tampaknya menjadi pilihan terbaik kedua tetapi membutuhkan waktu SANGAT lama jika Anda memiliki ratusan poligon yang ditampilkan di peta sedangkan SVG membutuhkan waktu lebih lama untuk di-render.
Saya hampir kehilangan harapan untuk menemukan solusi untuk masalah ini, tetapi hari ini saya menemukan perusahaan bernama GISCloud http://www.giscloud.com (saat ini dalam versi beta dengan pendaftaran gratis).
Perusahaan ini telah SOMEHOW berhasil menemukan cara yang luar biasa untuk membuat ratusan vektor pada peta dalam waktu dekat. Saya kagum dengan pendekatan mereka dan pertanyaan saya kepada masyarakat terkait dengan bagaimana kita dapat meniru pendekatan mereka untuk digunakan dengan teknologi yang ada seperti selebaran, pembuka, lilin ...
Lihatlah sendiri dengan melihat demo luar biasa ini: http://www.giscloud.com/map/284/africa
Pastikan Anda mengarahkan kursor ke salah satu poligon di halaman dan menguji kontrol zoom untuk melihat bahwa poligon ini memang vektor.
Apa yang saya perhatikan dengan melihat permintaan dengan firebug adalah bahwa peta tersebut meminta file json tertentu. Tampaknya tergantung pada level / area pembesaran ada beberapa file json yang diminta.
Saya juga harus menyebutkan di sini bahwa sekali giscloud memuat data pada halaman yang melayang di atas vektor segera mengubah warna tanpa membuat permintaan baru.
CONTOH:
- http://cft1.giscloud.com/t/1316509973/map284/layer1156/3/3/3.json
- http://cft1.giscloud.com/t/1316509973/map284/layer1156/3/5/3.json
- http://cft1.giscloud.com/t/1316509973/map284/layer1156/3/4/4.json
- http://cft1.giscloud.com/t/1316509973/map284/layer1156/3/3/4.json
- http://cft1.giscloud.com/t/1316509973/map284/layer1156/3/5/4.json
Saya mengasumsikan struktur url mengikuti logika layanan ubin standar (misalnya folder ke-3 ke terakhir adalah tingkat zoom ...).
Bagaimanapun saya telah menganalisis data aktual dari file-file json ini dan tampaknya logika yang mereka gunakan mengikuti beberapa jenis logika yang dengannya mereka membuat vektor hanya berdasarkan nilai-nilai data ini:
- width / height: mereka menentukan lebar dan tinggi data yang dilayani di setiap permintaan json
- piksel: di sini mereka menentukan nilai piksel yang saya asumsikan terkait dengan beberapa koordinat piksel x / y umum untuk tingkat titik umum? Saya kira mereka entah bagaimana memiliki cara menyederhanakan wilayah secara otomatis tergantung pada tingkat zoom. Saya berasumsi oleh mereka menggunakan koordinat piksel Saya kira mereka secara dramatis mengurangi ukuran data yang perlu dimuat dibandingkan dengan data lat / panjang.
- styles: di sini mereka mendefinisikan dua nilai RGB css. "F" mewakili warna file poligon dan "S" mewakili warna batas poligon.
- geom: di sinilah saya menebak mereka entah bagaimana mendefinisikan secara spesifik mendefinisikan setiap poligon di dalam ubin yang dimuat di mana data tersebut sedang ditentukan berdasarkan dari jendela wadah peta. Yang juga menarik adalah bahwa setiap entri memiliki nilai "S" yang saya asumsikan digunakan sebagai atribut opsional atau nilai tautan fitur dan pada akhir setiap entri di sini ada area yang tampaknya mendefinisikan spesifik per vektor ID bersama dengan ID lapisan yang saya tebak digunakan entah bagaimana untuk bergabung dengan data dari setiap permintaan ubin json dipanggil.
Saya juga berasumsi mereka entah bagaimana menemukan cara untuk secara otomatis menentukan dan membagi data yang perlu dimuat untuk setiap ubin tergantung pada ukuran data yang perlu dimuat untuk ubin yang diminta.
Berikut ini rincian yang diekstraksi dari salah satu permintaan ini:
{"width":256,"height":256,"tile":
{"pixels":
[0,6461,-1,0,5,148,0,509,-1,10715,-1,1,-1,251,-1,1,-1,1,-1,251,-2,3,-1,255,-1,249,-2,5,-2,247,-1,509,-3,251,-1,2,-2,253,-2,252,-2,254,-1,255,-1,254,-1,255,-1,1276,-2,13,-1,233,-1,2,-1,253,-1,1,-1,255,-1,247,-1,1306,-1,1533,-1,1269,-1,1276,-1,2303,-1]},
"styles":
[{"f":"rgb(99,230,101)","s":"rgb(5,148,0)","lw":"0"}],
"geom":
[
{"s":0,"p":[4,143,5,144,3,146,1,146,2,143,4,143],"c":"layer1156_5098"},
{"s":0,"p":[-2,143,0,140,2,141,2,144,1,146,-2,144,-2,143],"c":"layer1156_5067"},
{"s":0,"p":[7,143,5,144,4,143,2,143,2,141,5,138,6,139,5,141,7,143],"c":"layer1156_5051"},
{"s":0,"p":[10,141,11,137,12,137,14,137,12,142,9,143,9,142,10,141],"c":"layer1156_5041"},
{"s":0,"p":[1,136,0,140,-2,143,-2,136,1,136],"c":"layer1156_5038"},
{"s":0,"p":[8,143,5,141,5,137,8,136,10,137,10,141,8,143],"c":"layer1156_5033"},
{"s":0,"p":[5,137,2,141,0,140,1,136,1,136,2,135,3,136,5,137],"c":"layer1156_5028"},
{"s":0,"p":[10,134,12,136,11,138,8,135,10,134],"c":"layer1156_5020"},
{"s":0,"p":[-2,133,0,136,-2,136,-2,133],"c":"layer1156_5005"},
{...}
...
]
}
Bagaimana kita bisa meniru jenis kecepatan yang sama (atau serupa) menggunakan postgis (yang saya juga terlihat seperti apa yang mereka gunakan)?