ฉันกำลังมองหาวิธีแก้ปัญหาที่มั่นคงซึ่งจะทำให้ฉันสามารถสร้างแผนที่เว็บและรูปหลายเหลี่ยมเวกเตอร์ซ้อนทับโดยไม่ต้องโหลดข้อมูลดังกล่าวตลอดไปโดยมีเป้าหมายที่จะทำให้ฉันสามารถสร้างรูปหลายเหลี่ยมแต่ละสีในเหตุการณ์โฮเวอร์
เท่าที่ฉันทราบมี 3 ตัวเลือกเฉพาะเพื่อให้บรรลุสิ่งนี้ผ่านทั้งผ้าใบ SVG และแฟลช
ดูเหมือนว่า Flash จะเป็นทางออกที่ดีที่สุดหากใช้กับ apple iphones / ipads เนื่องจากดูเหมือนว่าจะให้การเรนเดอร์ที่เร็วที่สุดและการแสดงผลที่สะอาดที่สุด Canvas ดูเหมือนจะเป็นตัวเลือกที่ดีที่สุดอันดับสอง แต่ใช้เวลานานมากถ้าคุณมีรูปหลายเหลี่ยมหลายร้อยรูปที่แสดงบนแผนที่ในขณะที่ SVG ใช้เวลาในการเรนเดอร์นานกว่า
ฉันเกือบหมดหวังในการหาวิธีแก้ไขปัญหานี้แต่วันนี้ฉันเจอ บริษัท ที่ชื่อว่า GISCloud http://www.giscloud.com (ปัจจุบันอยู่ในรุ่นเบต้าพร้อมสมัครฟรี)
บริษัท นี้มี SOMEHOW สามารถหาวิธีที่น่าทึ่งในการแสดงเวกเตอร์นับร้อยบนแผนที่ในเวลาจริง ฉันรู้สึกประหลาดใจกับวิธีการของพวกเขาและคำถามของฉันเกี่ยวกับชุมชนเกี่ยวข้องกับวิธีที่เราสามารถทำซ้ำวิธีการของพวกเขาสำหรับใช้กับเทคโนโลยีที่มีอยู่เช่นแผ่นพับ openlayers ขี้ผึ้ง ...
ลองดูด้วยตัวคุณเองโดยดูการสาธิตที่น่าทึ่งนี้: http://www.giscloud.com/map/284/africa
ตรวจสอบให้แน่ใจว่าคุณวางเมาส์เหนือรูปหลายเหลี่ยมบนหน้าและทดสอบการควบคุมการซูมเพื่อดูว่ารูปหลายเหลี่ยมเหล่านี้เป็นเวกเตอร์แน่นอน
สิ่งที่ฉันสังเกตเห็นจากการดูคำขอด้วย firebug คือแผนที่กำลังร้องขอไฟล์ json เฉพาะ ดูเหมือนว่าขึ้นอยู่กับระดับการซูม / พื้นที่ที่มีไฟล์ json จำนวนมากที่ถูกร้องขอ
ฉันควรพูดถึงที่นี่ว่าเมื่อ giscloud โหลดข้อมูลบนหน้าเว็บที่โฮเวอร์เหนือเวกเตอร์จะเปลี่ยนสีทันทีโดยไม่ต้องสร้างคำขอใหม่
ตัวอย่าง:
- 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 เป็นไปตามตรรกะการเรียงต่อกันบริการมาตรฐาน (ตัวอย่างเช่นโฟลเดอร์ที่ 3 ถึงโฟลเดอร์สุดท้ายคือระดับการย่อ / ขยาย ... )
ไม่ว่าในกรณีใดฉันได้วิเคราะห์ข้อมูลจริงของไฟล์ json เหล่านี้และดูเหมือนว่าตรรกะที่พวกเขากำลังใช้อยู่มีตรรกะบางประเภทที่พวกเขาสร้างเวกเตอร์ของพวกเขาโดยใช้ค่าข้อมูลเหล่านี้:
- width / height:พวกเขากำหนดความกว้างและความสูงของข้อมูลที่ให้บริการในการร้องขอ json แต่ละ
- พิกเซล:ที่นี่พวกเขากำหนดค่าพิกเซลที่ฉันสมมติว่าเกี่ยวข้องกับพิกัดพิกเซล x / y ทั่วไปสำหรับระดับจุดทั่วไป? ฉันเดาว่าพวกเขามีวิธีทำให้ภูมิภาคง่ายขึ้นโดยอัตโนมัติตามระดับการซูม ฉันสันนิษฐานว่าพวกเขาใช้พิกัดพิกเซลฉันเดาว่าพวกเขากำลังลดขนาดของข้อมูลที่ต้องโหลดเทียบกับ lat / long data อย่างมาก
- สไตล์:ที่นี่พวกเขากำหนดสองค่า RGB css "F" แทนสีไฟล์รูปหลายเหลี่ยมและ "S" แทนสีเส้นขอบรูปหลายเหลี่ยม
- geom:นี่คือที่ฉันคาดเดาว่าพวกเขากำลังกำหนดเฉพาะรูปหลายเหลี่ยมแต่ละภายในกระเบื้องที่กำลังโหลดที่ข้อมูลดังกล่าวจะถูกกำหนดตามหน้าต่างภาชนะแผนที่ มีอะไรน่าสนใจอีกอย่างคือแต่ละรายการมีค่า "S" ซึ่งฉันถือว่าใช้เป็นแอตทริบิวต์หรือตัวเลือกลิงก์ค่าคุณลักษณะและในตอนท้ายของแต่ละรายการที่นี่จะมีพื้นที่ซึ่งดูเหมือนจะกำหนดรหัสเฉพาะต่อเวกเตอร์พร้อมกับ ID ของเลเยอร์ที่ฉันคาดเดาถูกนำมาใช้เพื่อเข้าร่วมข้อมูลจากการร้องขอไทล์ json แต่ละครั้งที่ถูกเรียก
ฉันยังสมมติว่าพวกเขาได้หาวิธีในการกำหนดและแยกข้อมูลที่จำเป็นต้องโหลดสำหรับแต่ละไทล์โดยขึ้นอยู่กับขนาดของข้อมูลที่จะต้องโหลดสำหรับไทล์ที่ร้องขอโดยอัตโนมัติ
นี่คือการแยกย่อยของหนึ่งในคำขอเหล่านี้:
{"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"},
{...}
...
]
}
เราจะทำซ้ำความเร็วประเภทเดียวกัน (หรือคล้ายกัน) โดยใช้ postgis (ซึ่งฉันใช้กับสิ่งที่พวกเขาใช้)?