Her bir poligonu bir hover etkinliğinde farklı bir renk göstermemi sağlamak amacıyla bu tür verileri sonsuza dek yüklemeden bir web haritası oluşturmam ve vektör çokgenleri katlamama izin verecek sağlam bir çözüm arıyordum .
Bildiğim kadarıyla, bunu tuval, SVG, Flash ile başarmak için 3 özel seçenek var.
Flash, en hızlı görüntü oluşturma ve en temiz görüntüyü sağladığı gibi, Apple iPhone / iPod'larda çalışacaksa en iyi çözüm gibi görünüyor. Tuval ikinci en iyi seçenek gibi görünüyor, ancak haritada gösterilen yüzlerce poligon varsa ÇOK uzun sürüyor, oysa SVG'nin oluşturulması daha uzun sürüyor.
Ben neredeyse bu soruna bir çözüm bulma konusunda umudunu kaybetti ama bugün GISCloud adında bir şirket rastladım http://www.giscloud.com (şu anda ücretsiz kayıt işleminde beta).
Bu şirketin SOMEHOW'u bir haritada yüzlerce vektörü gerçek zamanlı olarak oluşturmanın harika bir yolunu bulmayı başardı. Yaklaşımları karşısında hayrete düştüm ve topluluğa olan sorum, broşür, açılış katmanı, balmumu gibi mevcut teknolojilerle kullanım için yaklaşımlarını nasıl çoğaltabileceğimizle ilgili.
Bu muhteşem demoyu izleyerek kendinize bir göz atın: http://www.giscloud.com/map/284/africa
Sayfadaki çokgenlerin herhangi birinin üzerine geldiğinizden emin olun ve bu çokgenlerin gerçekten vektör olduğunu görmek için zoom kontrollerini test edin.
Firebug ile istekleri inceleyerek fark ettim, haritanın belirli json dosyaları talep ediyor olmasıdır. Zoom seviyesine / bölgeye bağlı olarak talep edilen birden fazla json dosyası varmış gibi görünüyor.
Burada ayrıca giscloud'un bir vektörün üzerine geldiği sayfadaki verileri yükledikten sonra yeni bir istek oluşturmadan hemen rengi değiştirdiğini belirtmeliyim.
ÖRNEKLER:
- 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
URL yapısının standart döşeme hizmeti mantığını takip ettiğini varsayıyorum (örneğin, en son 3. seviye yakınlaştırma seviyesi ...).
Her durumda, bu json dosyalarının gerçek verilerini analiz ettim ve kullandıkları mantık, sadece bu veri değerlerine dayanarak vektörlerini oluşturdukları bir tür mantık izliyor:
- width / height: her json isteğinde sunulan verinin genişliğini ve yüksekliğini tanımlarlar
- piksel: burada bir şekilde genelleştirilmiş nokta seviyeleri için bazı genel x / y piksel koordinatlarıyla ilgili olduğunu varsaydığım piksel değerlerini tanımlar. Yakınlaştırma seviyesine bağlı olarak bir şekilde bölgeyi otomatik olarak basitleştirmenin bir yolu olduğunu tahmin ediyorum. Piksel koordinatları kullandıklarını farz ediyorum, sanırım enlem / boylam verilerle karşılaştırıldığında yüklenmesi gereken verilerin boyutunu önemli ölçüde azalttığını tahmin ediyorum.
- stilleri: burada iki RGB css değeri tanımlar. Çokgen dosya rengini temsil eden "F" ve çokgen sınır rengini temsil eden "S".
- geom: işte burada tahmin ediyorum ki, bir şekilde harita döşemesinin penceresinden yola çıkılarak bu verilerin tanımlandığı yerdeki, yüklenmekte olan kiremit içindeki her bir poligonu özel olarak tanımlamayı tanımlıyorlar. Ayrıca ilginç olan, her girişin isteğe bağlı bir özellik veya özellik bağlantı değeri olarak kullanıldığını düşündüğüm bir "S" değerine sahip olduğudur ve her girişin sonunda, burada bir vektör kimliği ile birlikte belirli bir kimlik tanımlayan görünen bir alan vardır. Tahmin ettiğim katman kimliği, çağrılan her json döşemesi isteğindeki verileri bir şekilde birleştirmek için kullanılır.
Aynı zamanda, talep edilen döşeme için yüklenmesi gereken verilerin boyutuna bağlı olarak, her döşeme için yüklenmesi gereken verileri otomatik olarak belirleme ve bölmenin bir yolunu bulduklarını da varsayıyorum.
İşte bu isteklerden birinin çıkarılmış bir dökümü:
{"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"},
{...}
...
]
}
Aynı (veya benzer) hız türünü postgis kullanarak nasıl çoğaltabiliriz (ki ben de kullandıkları gibi).