kalmarr 0 Share Posted February 8, 2009 Sziasztok! Az 2009.02-es számában (108. oldal) láttam egy képet, hogy egy Magyarország térképén lehet makrók segítségével egyszerûen adatokat megjeleníteni. Kérdésem, hogyan? Üdv. KALMI Link to comment Share on other sites More sharing options...
Giraffe1 0 Share Posted February 8, 2009 A dologhoz három dolog kell, és ezekbõl az elsõ az egyedül macerás: 1) Kell egy olyan térkép, amiben minden egyes alakzatnak (térkép esetében ugyebár ez zárt "görbét" jelent) egyedi azonosítója van. 2) Kell egy táblázat - aminek elõkészítésérõl szólt többek között a cikk -, amiben minden egyes azonosítóhoz hozzá kell rendelni a kategóriaszámot. 3) Kell a program, ami a 2) alapján kiszínezi az alakzatokat. Maga a színezés tulajdonképpen egy utasítás: ThisDocument.Pages(oldal).Layers(retegNev).Shapes(azonosito).Fill.ApplyUniformFill(szin) Ehhez természetesen kell egy ciklus, ami végigmegy a táblázat (vagy lista) összes során, és így minden egyes területi egységet kifest. Miután a CorelDRAW makrónyelve is már egy ideje a Visual Basic for Application (VBA), így nagyon egyszerûen az is megoldható az is, hogy a CorelDRAW-ban futó makró az adatokat közvetlenül egy Excel munkafüzetbõl vegye. Itt igazából a problémát a térkép elõ- vagy elkészítése jelenti. Magyarországon jelen pillanatban - Budapest kerületeit önálló településnek tekintve - 3174 település található. Ezt a térképet a program - kikapcsolt folyamatos képernyõfrissítéssel - kb. 25-30 mp alatt festi ki. Most nem találom az itthoni gépemen a programot - az archív DVD-k között pedig lusta vagyok turkálni -, ezért azt tudom ígérni, hogy ha tényleg érdekel a dolog (é. legalább egy választ kapok erre a bejegyzésre ), akkor beemelem ide a teljes kód kissé egyszerûsített változatát. (Azért csak az egyszerûsítettet, mert a teljes programban kb. 20 térkép és kb. ugyanannyi jelkulcs közül lehet választani.) Amit sajnos nem tudok felkínálni, az a térkép, az ugyanis nem az én munkám, azt én többé-kevésbé készen kaptam. Max. a megyei és a régiós térképet tudom felajánlani, mert azok még nem akkora értékek. Link to comment Share on other sites More sharing options...
foochg 0 Share Posted April 7, 2009 Kedves Giraffe, nem én indítottam ugyan a topicot, de nagyon örülnék az egyszerûsített kódnak és a régiós/megyei szintû térképek, amennyiben áll még az ajánlat. Köszönöm, SZL Link to comment Share on other sites More sharing options...
mtmusic1 0 Share Posted May 25, 2011 Igaz, hogy régi téma, de mivel még a megoldás nem érkezett meg, így én is szeretném kérni, hogy kedves Giraffe légy szíves oszd meg velünk a kódot. Köszi! Link to comment Share on other sites More sharing options...
Giraffe1 0 Share Posted May 25, 2011 Dim oLegend() As Shape cLegendName = "red-blue" ' a jelmagyarázat csoport neve ReDim oLegend(ActivePage.Layers("Jelmagyarázat").Shapes(cLegendName).Shapes.Count) For Each oObj In ActivePage.Layers("Jelmagyarázat").Shapes(cLegendName).Shapes Set oLegend(oObj.Name) = oObj Next ' beolvassuk Excelbõl az adatokat Set xlsExcel = Excel.Application Set xlsTable = xlsExcel.Workbooks.Open(cXLSFile) Set xlsSheet = xlsTable.Worksheets(1) nValNum = 0 Do While Trim(xlsSheet.Cells(nValNum + 2, 1)) <> Empty nValNum = nValNum + 1 aVal(nValNum, 1) = Trim(xlsSheet.Cells(nValNum + 1, 1).Text) ' azonosító aVal(nValNum, 2) = Val(xlsSheet.Cells(nValNum + 1, 2)) ' kategória DoEvents Loop xlsTable.Close False: xlsExcel.Quit Set xlsSheet = Nothing: Set xlsTable = Nothing: Set xlsExcel = Nothing For nVal = 1 To nValNum ' van-e ilyen azonosítójú objektum? On Error Resume Next cName = ActivePage.Layers(cMapLayer).Shapes(aVal(nVal, 1)).Name On Error GoTo 0 If cName <> aVal(nVal, 1) Or aVal(nVal, 2) < 1 Or aVal(nVal, 2) > UBound(oLegend) Then ' hibás azonosító vagy kategória Else ActivePage.Layers(cMapLayer).Shapes(aVal(nVal, 1)).Fill = oLegend(aVal(nVal, 2)).Fill ActivePage.Layers(cMapLayer).Shapes(aVal(nVal, 1)).Selected = False End If DoEvents Next nVal Ennél a teljes kód kicsit összetettebb, mert lehetõség van térképet és jelkulcsot is választani, valamint nem csak kitöltést, hanem körvonalat és átlátszóságot is másol a teljes program, de a lényeg ebbõl is látszik. Térképet viszont felesleges kérni, mert miután annak a jogai nem nálam vannak, nem fogom senkinek sem elküldeni. Link to comment Share on other sites More sharing options...
mtmusic1 0 Share Posted May 30, 2011 Kedves Giraffe! Köszönöm szépen a kódot! Link to comment Share on other sites More sharing options...
mtmusic1 0 Share Posted June 7, 2011 Kedves Giraffe! Köszi mégegyszer a kódot, de sajnos nem boldogulok vele. Van egy megye térképem, ami tartalmaz 228 települést. Minden település egy zárt görbe és saját név van megadva mindegyikhez. Készítettem egy excel táblázatot, amiben minden településhez rendeltem egy kategóriaszámot, ami alapján színezni szeretném a térképemet. De sehogysem sikerül rájönnöm (még a kód alapján sem), hogy hogyan kell ezt megoldani. Sajnos nem túl sokat értek a Visual Basic-hez, csak próbálkozgatok vele. Tudsz-e esetleg segíteni nekem ebben? Link to comment Share on other sites More sharing options...
Giraffe1 0 Share Posted June 7, 2011 Akkor inkább azt javaslom, hogy nézz utána valami alapszintû VB könyvnek (vagy esetleg egy online tutorialnak), mert anélkül nem igazán fogod tudni megoldani ezt a feladatot. A program nagyon egyszerû, és tényleg csak 1-2 helyen kell belenyúlni, hogy saját környezetedben használni tudd... Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now