L ӠI NÓI ĈҪU
4.1.4 Thӵc hiӋn giҧi pháp
Lӵa chӑn gói phҫn mӅm MapsServer cho Windows (MS4W), trong ÿó có mӝt loҥt các thѭ viӋn nguӗn mӣ, hӛ trӧ nhiӅu môi trѭӡng lұp trình nhѭ: PHP MapScript, C# MapScript, Python 2.4 MapScript, Java 1.4 MapScript.
Vì MapServer không hӛ trӧ ÿӏnh dҥng bҧn ÿӗ sӕ MapInfo TAB, do vұy cҫn chuyӇn ÿәi dӳ liӋu bҧn ÿӗ tӯ MapInfor TAB sang ÿӏnh dҥng ERSI Shapefile, sӱ dөng công cө Universal Translator trong bӝ sҧn phҭm MapInfo. Mӝt tӋp cҩu hình bҧn ÿӗ có ÿuôi mӣ rӝng là .map cNJngÿѭӧc tҥo ra ÿӇ mô tҧ các lӟp bҧn ÿӗ, các chú thích, nhãn , thanh tӹ lӋ…cӫa bҧn ÿӗ. TӋp cҩu hình này có thӇ ÿѭӧc tҥo ra bҵng thӫ công hoһc dӉ dàng hѫn nhӡ mӝt sӕ công cө miӉn phí có sҹn
Trong môi trѭӡng lұp trình Visual Studio, chúng ta tham chiӃu tӟi các thѭ viӋn mapscript tѭѫngӭng hӛ trӧ và sӱ dөng các phѭѫng thӭc cNJng nhѭ ÿӕi tѭӧng trong ÿó. Trѭӟc tiên, tҥo ra mӝtÿӕi tѭӧng bҧnÿӗ trong lӟpmapObj:
ms_map = new mapObj(mapFile);
trongÿó mapFile là tham sӕ, chӍ ra ÿѭӡng dүn tӟi tӋp cҩu hình bҧnÿӗ có phҫn mӣ rӝng là .map (mapfile).
Các thuӝc tính Width và Height cӫa ÿӕi tѭӧng ms_map quy ÿӏnh chiӅu rӝng và chiӅu cao cӫa bҧn ÿӗ, và ÿѭӧc gán bҵng kích thѭӟc tѭѫng ӭng cӫa ô ҧnh mapPicBox trên giao diӋn chính:
ms_map.width = mapPicBox.Width; ms_map.height = mapPicBox.Height;
ĈӇ vӁ bҧn ÿӗ, chúng ta khai báo mӝt ÿӕi tѭӧng ҧnh nҵm trong lӟp imageObj sӁ chӭaҧnh vӁ bӣiÿӕi tѭӧng bҧnÿӗ trên:
imageObj mapImage = ms_map.draw(); byte[] img = mapImage.getBytes();
Thuӝc tính getBytes sӁ trҧ vӅ dӳ liӋu cӫa ҧnh bҧn ÿӗ dѭӟi dҥng mӝt bӝ ÿӋm nhӏ phân và ÿӏnh dҥng cӫa bӝ ÿӋm nhӏ phân này sӁ biӃn ÿәi tùy theo tӯng ngôn ngӳ lұp trình (ví dө nó là chuӛi (string) trong Python, mҧng byte trong C# và Java, hay dҥng không ÿiӅu khiӇn ÿѭӧc trong Perl). Bӝ ÿӋm nhӏ phân này sau ÿó sӁ ÿѭӧc vӁ lên khung ҧnh mapPicBox bҵng cách tҥo mӝt luӗng dӳ liӋu tӯ bӝ nhӟ:
using (MemoryStream ms = new MemoryStream(img)) {
mapPicBox.Image = System.Drawing.Image.FromStream(ms); }
Ngoài ra các thuӝc tính và phѭѫng thӭc khác cӫaÿӕi tѭӧng bҧnÿӗ nhѭ:
scale : trҧ vӅ tӹ lӋ cӫa bҧnÿӗ danh ÿӏnh
double mapScale = ms_map.scale;
numlayers: trҧ vӅ sӕ lӟp bҧnÿӗ
drawScalebar(): phѭѫng thӭc cho phép vӁ thanh tӹ lӋ bҧn ÿӗ
imageObj msScaleBar = ms_map.drawScalebar();
drawReferencemap(): phѭѫng thӭc cho phép vӁ bҧnÿӗ tham chiӃu
imageObj referenceMap = ms_map.drawReferenceMap();
drawLegend(): phѭѫng thӭc cho phép vӁ chú thích bҧnÿӗ
imageObj legend = ms_map.drawLegend();
Các chӭc năng mӣ rӝng ÿѭӧc xây dӵng kèm theo bao gӗm: phóng to, thu nhӓ, dӏch chuyӇn bҧn ÿӗ cNJng ÿѭӧc dӵa trên phѭѫng thӭc zoomPoint cӫa ÿӕi tѭӧng mapObj. Phѭѫng thӭc zoomPoint trong lӟp mapObj cho phép phóng to ҧnh bҧn ÿӗ tính tӯ mӝt ÿiӇm. Nhӡ ÿó chúng ta có thӇ dӉ dàng phóng to (hӋ sӕ zoomFactor dѭѫng) và thu nhӓ (hӋ sӕ zoomFactor âm) tính tӯ bҩt kǤ ÿiӇm nào trên ҧnh bҧn ÿӗ.
ĈӇ di chuyӇn bҧn ÿӗ, chúng ta giӳ nguyên kích thѭӟcҧnh (hӋ sӕ zoomFactor = 1) vàÿһt ÿiӇm phóng dӏch theo 4 hѭӟng cӫa bҧnÿӗ tính tӯ tâm cӫaҧnh bҧnÿӗ. Ví dө, khi muӕn dӏch bҧn ÿӗ sang bên phҧi, chúng ta sӁ ÿһt tâm ÿiӇm phóng lӋch so vӟi tâm ҧnh
bҧn ÿӗ vӅ bên phҧi vӟi khoҧng cách ÿúng bҵng khoҧng cách muӕn dӏch chuyӇn (Width/2 + Dx, Height/2) trong ÿó Width, Height là chiӅu rӝng và chiӅu cao cӫa ҧnh bҧnÿӗ, Dx là khoҧng cách muӕn dӏch chuyӇn bҧnÿӗ
ms_map.zoomPoint(1, new pointObj((double)e.X, (double)e.Y, 0, 0), mapPicBox.Width, mapPicBox.Height, ms_map.extent, null);
và phóng to, thu nhӓ bҧnÿӗ
ms_map.zoomPoint(zoomFactor, new pointObj(mapPicBox.Width / 2, mapPicBox.Height / 2, 0, 0), mapPicBox.Width, mapPicBox.Height, ms_map.extent, null);