Harti pentru Internet
 

News  Technical Articles  Romanian Press 

WebMapping cu MapXtreme

Eugen Cretu
Geo Strategies SA, Sibiu

MapXtreme este un produs software al firmei de desktop mapping MapInfo, gândit sub forma unui instrument de dezvoltare aplicaţii client-server, ce permit programatorilor de aplicaţii Web să creeze pagini interesante, prin adăugarea harţilor interactive în pagini. El se bazează pe nucleul MapInfo MapX care este o biblioteca excelenta de gestiune si manipulare harţi. Pe baza acestei biblioteci este construit si MapInfo Professional, software-ul de desktop mapping.

Pachetul software conţine un mediu de dezvoltare aplicaţii Web, numit HahtSite, orientat pe posibilitatea adăugării de cod intr-un limbaj clasic (JScript, VBScript) sau in HahtTalk Basic - un limbai asemănător Basic-ului. Astfel, paginile create in HahtSite beneficiază de avantajele unui limbaj cele programare de nivel înalt, flexibil, cu multe facilităţi.

Cum funcţionează?

Pentru a putea crea pagini dinamice ce conţin hărţi MapXtreme, avem nevoie de câteva module care lucrează împreuna cu serverul de Web. Acestea sunt de două tipuri: instrumente de dezvoltare şi soft pentru server.

MapXtreme foloseşte ca instrument de dezvoltare un produs de la HahtSite Inc. şi anume HahtSite Integrated Development Environment, aflat pe calculatorul unde se dezvoltă aplicaţia de Web. Odată creat proiectul de Web pe calculatorul gazdă, el este publicat prin copiere (Intranet) sau via FTP (Internet) pe host-ul unde se va afla în final.

Din punct de vedere al proiectantului de aplicaţii, mediul HahtSite este un instrument de dezvoltare vizual, extrem de plăcut. Printre caracteristicile ce-l propulsează printre cele mai apreciate produse de acest fel, menţionăm câteva: suport controale, frame-uri, forme, un editor de imagini performant, permite inserarea de scripturi Jscript şi VBScript şi posedă un limbaj propriu de CGI-uri, numit HahtTalk Basic.

În categoria de software de server trebuie amintite componentele ce se execută în conjuncţie cu serverul de Web,
aşa cum ilustrează exemplul de specificare a unei instrucţiuni HahtTalk într-o pagină Web:

<BODY BACKGROUND = "backgrnd.gif">
<P><SCRIPT LANGUAGE=HAHTSite HAHTCONTEXT=statement>
<!- Call BrowseTable -></SCRIPT></P>
</BODY>

Tot în această categorie mai intră MapX (modulul de bază al lui MapXtreme), Remote Geocoder (modulul de geo-codare hărţi), serverul de aplicaţii HahtSite şi administratorul serverului de aplicaţii.

După cum se poate observa în exemplul anterior, o cerere client ce conţine specificaţii HahtTalk este preluată de către serverul de aplicaţii şi rezultatul este returnat, via serverul de Web, clientului. Cheia întregului proces o constituie însă posibilitatea de comunicare între serverul de aplicaţii şi map engine-ul MapX.

Nucleul MapX

MapXtreme instalează MapX, sub formă de control ActiveX. Cu acest control, se pot adăuga facilităţi de mapping unei game largi de programe care suportă astfel de controale.

Pentru HahtTalk, varianta interfeţei în Basic a lui MapX vine cu MapXtreme. MapInfo foloseşte modelul logic al lui MapX în map engine-ul lui MapInfo Professional, unde rezultatele sunt remarcabile în ceea ce priveşte rapiditatea şi calitatea răspunsului.

Ierarhia claselor in MapX

Clasele cele mai importante care alcătuiesc aceasta colecţie sunt: CMap ( harta cu proprietăţile ei legate de afişare, zoom, center, scale), CDataSet (se referă la baza de date asociată hărţii, bază ce poate fi accesată via ODBC), CLayer (stratul de informaţie grafică), CAnnotation (stratul de adnotări făcute de user), CStyle (gestionează stilul tuturor parametrilor grafici: font, culoare, lăţime linie, tip umplere, etc.).

Harta permite diferite operaţii grafice afară de cele legate de afişare: etichetare, selectare/vizualizare layer, creare hartă tematică, creare legendă.

Exemplu de program care afişează o hartă

Pentru că MapX este un control, el vine instalat cu două utilitare distincte:

  • BaseMap Data Manager, care setează directoarele unde dicţionarul MapX va reţine fişierele cu hărţi
  • GeoSetManager, creează şi setează dicţionarul lui MapX colecţiile de tabelă (layere) ce alcătuiesc o hartă, noua denumire "geoset" fiind omoloagă celei de "workspace" din MapInfo.

Odată cunoscute geo-seturile înregistrate în MapX, acestea sunt gestionate la cerere de către controlul ActiveX, prin intermediul programului de interfaţă HSRUN.EXE (HahtSite Run Time) apelat din pagina Web cu parametrii.

Presupunând că avem un control cboMaps tip ComboBox cu opţiunile reprezentând geoset-urile din MapX, în pagina de Web va apela rutina HahtBasic OpenGeoset care încarcă harta pentru, ca mai apoi, subrutina CreateMap să producă fişierul grafic ce reprezintă harta. Codul HahtTalk al acestor subrutine este prezentat în listing-ul alăturat.

Undeva în pagina de Web vom avea următoarele instrucţiuni HahtTalk:

......
Call OpenGeoSet
......
Print "<IMG SRC =""map1.gif""WIDTH = 490 HEIGHT = 300>"
......

De exemplu, o căutare în layer-ul "Gazeteer" după numele "Sea" poate fi realizată simplu cu funcţia Search:

......
' Variabila ftrFound va contine rezultatul cautarii
Set strFound = g_objMap.Layers("Gazeteer").Find.Search("Sea","")
If (ftrFound.FindRC = 1) Then

' CenterX si CenterY sunt coordonatele centrului pentru obiectul gasit
db1X = ftrFound.CenterX
db1Y = ftrFound.CenterY
......

Concluzii

O soluţie flexibilă, excelentă pentru platformele Windows, MapXtreme se pretează foarte bine la implementări Intranet. Faptul că lucrurile se mişcă într-un ritm rapid, îl face pe MapInfo promotor de idei în domeniu. Dovadă este şi versiunea anunţată, cu server şi client 100% Java, care îi conferă independenţa de platformă (vedeţi şi http <// www. mapxtreme.com). Dar, despre aceasta, într-un articol viitor.

Codul HahtTalk al subrutinelor Create Map si OpenGeoset

Global g_objMap. 9_objMapXserver As Object
Global g_strGeoSet As String

'-----------------

Sub OpenGeoSet

Dim stDataset As String
Dim bErr As Boolean
On Error GOTO ErrHandler

'Retine in stDataset numele geosetului selectat
stDataset = LTrim$(Rtrim$(WebApp.URLFIELD$("cboMaps")))
if(stDataset<>"") Then
g_strCurrentDataset = stDataset
End If
g_strGeoSet = g_strCurrentDataset & ".GST"

'Creaza in MapX reprezentarea harti curente
CreateMap

'Exporta harta la zoom-ul si scala specificate
g_objMap.ExportMap "mapl.gif", miFormatGIF
Exit Sub

'-----------------

Sub CreateMap()

Dim objLayer As Object
Dim objNDS As Object

'Creaza obiectele MapX (server si clienti)
#If USE_MAPXSERVER_OBJ, Then
          Set g_objMapXserver = createObject(fnObjectMapXserver)
          Set g_objMap = g_objMapXserver.GetMapX
#Else
          Set g_objMap = CreateObject(fnObjectMapX)
#End if

' Seteaza parametrii hartii
g_objMap.GeoSet = g_strGeoSet
g_objMap.Zoom = 100
g_objMap.TitleText = ""

' Pentru fiecare layer selectabil incarca atributele sale pentru ulterioare interogari
For Each objLayer In g_objMap.Layers
          If obj_Layer.Selectable Then
                    Set objDS = g_objMap.DataSets.Add(miDataSetLayer, objLayer, objLayer.Name
          End If
Next objLayer
End Sub

PC Report, Byte
Ianuarie 1999

 


Copyright © Geo Strategies 1995-2004

January 2004