Colorare un'area irregolare (es. regioni di cartina geografica)

di il
14 risposte

Colorare un'area irregolare (es. regioni di cartina geografica)

Ciao a tutti,

ho bisogno di colorare le diverse regioni sulla cartina dell’Italia al passaggio del mouse (come avviene nell’esempio in html all’indirizzo https://www.weweb.in/post.php?p=1036

# )

e ricavare il nome della regione col click. Qualcuno può darmi delle dritte?

Grazie, Vic.

14 Risposte

  • Re: Colorare un'area irregolare (es. regioni di cartina geografica)

    https://learn.microsoft.com/en-us/dotnet/api/system.drawing.graphics.drawline?view=windowsdesktop-7.0

    Dritte? 

    1) devi ricavarti i punti (coordinate) del perimetro. Scegli tu come salvarli se su tabella o array. Avrai il nome della regione e il suo perimetro.

    2) disegni la regione dalle coordinate del perimetro e nomini l'oggetto per regione

    3) al passaggio del mouse sulla regione cambi colore e mostri il nome… 

    4) dal nome cerchi in altre tabelle e visualizzi abitnti, superficie, economia, monti, fiumi….

  • Re: Colorare un'area irregolare (es. regioni di cartina geografica)

    24/06/2023 - sihsandrea ha scritto:


    1) devi ricavarti i punti (coordinate) del perimetro.

    Sì, grazie per la veloce risposta.

    Questo, a parte la migliaia di coordinate da trovare (se vuoi una definizione adeguata), ti costringe a non poter ridimensionare l'immagine perché poi le coordinate sarebbero sfalsate  (o esiste un modo per correggerle?).

    Pensavo a qualcosa di più radicale: cioè individuare un punto nell'immagine (coordinate del puntatore) e da qui riempire la figura contornata (la regione) con un colore. Se questo è possibile, diventerebbe secondario ricavare il nome della regione (meglio se fattibile anche questo).

    Grazie, Vic.

  • Re: Colorare un'area irregolare (es. regioni di cartina geografica)

    24/06/2023 - Vic ha scritto:


    24/06/2023 - sihsandrea ha scritto:


    1) devi ricavarti i punti (coordinate) del perimetro.

    Sì, grazie per la veloce risposta.

    Questo, a parte la migliaia di coordinate da trovare (se vuoi una definizione adeguata), ti costringe a non poter ridimensionare l'immagine perché poi le coordinate sarebbero sfalsate  (o esiste un modo per correggerle?).

    Pensavo a qualcosa di più radicale: cioè individuare un punto nell'immagine (coordinate del puntatore) e da qui riempire la figura contornata (la regione) con un colore. Se questo è possibile, diventerebbe secondario ricavare il nome della regione (meglio se fattibile anche questo).

    Grazie, Vic.

    Beh, hai messo un link, pensavo che volessi intraprendere quella strada…

    Alternativa allo studio di files immagine e array da 700 giga?

    Una furbata potrebbe essere un riquadro bitmap dove carichi la regione colorata silver con sfondo trasparente.

    Accosti le varie tbitmap (o come si chiamano in vb net), componi la cartina e quando sei sopra l'oggetto bitmap sostituisci l'immagine con una colorata di giallo, o del colore che preferisci. La hint ti mostra il nome della regione ecc…

    Righe di codice? Una decina. 

    Meno male che non si deve programmare il rover… penso che questo accrocchio possa funzionare.

    Oh! Fammi sapere…

  • Re: Colorare un'area irregolare (es. regioni di cartina geografica)

    24/06/2023 - sihsandrea ha scritto:


    1) devi ricavarti i punti (coordinate) del perimetro.

    Sì, grazie per la veloce risposta.

    Questo, a parte la migliaia di coordinate da trovare (se vuoi una definizione adeguata), ti costringe a non poter ridimensionare l'immagine perché poi le coordinate sarebbero sfalsate  (o esiste un modo per correggerle?).

    Pensavo a qualcosa di più radicale: cioè individuare un punto nell'immagine (coordinate del puntatore) e da qui riempire la figura contornata (la regione) con un colore. Se questo è possibile, diventerebbe secondario ricavare il nome della regione (meglio se fattibile anche questo).

    Grazie, Vic.

  • Re: Colorare un'area irregolare (es. regioni di cartina geografica)

    OK, Sihsandrea, grazie ancora per il tuo intervento.

    Come avrai capito, abitualmente non programmo il rover, ma, anche se alla luna non lui ci andrà prestissimo, credo che lo manderò, magari (spero) anche con l’aiuto della comunità.

    Vengo da VB e non scrivo una riga di codice VB da più di 15 anni. A suo tempo me la cavavo. Adesso mi trovo in un ambiente, mi capisci, totalmente diverso, ma ci sto entrando. (a proposito come si formatta il codice VB in questo testo? non trovo vb nella lista code) 

    Ho provato sia il tuo primo suggerimento; ho realizzato il primo e il secondo punto con una regione (valle d’aosta perché ha poche coordinate), ma non so come completare il terzo punto, mentre non mi serve realizzare il quarto (mi serve solo evidenziare la regione con un colore e conoscerne il nome). Mi piacerebbe, a livello di formazione, conoscere il prosieguo, quindi ti chiedo una mano per questo, anche se mi sembra meno … “faticosa” la seconda tua ipotesi. Ma non meno limpida e vicina la soluzione.

    Dim Aosta_ As New Drawing2D.GraphicsPath
    Private Sub picItalia_Paint(sender As Object, e As PaintEventArgs) Handles picItalia.Paint
    Dim punto() As Point = {
    New Point(61, 53),
    New Point(62, 65),
    New Point(56, 67),
    New Point(37, 69),
    New Point(35, 61),
    New Point(30, 55),
    New Point(38, 52),
    New Point(41, 55),
    New Point(50, 53),
    New Point(54, 49)
    }
    Aosta_.AddPolygon(punto)
    Dim AostaR As New Region(Aosta_)
    ' e.Graphics.DrawPolygon(PennaGrigia, punto)
    ' non mi serve disegnare la regione perché sporcherebbe il disegno sottostante

    Ho provato a costruire venti file .gif con lo sfondo trasparente e su ognuna la singola regione colorata. Naturalmente mi servirebbe quella decina di righe di codice a cui ti riferivi. Ti chiedo troppo se spero di ottenere una mano (sostanziosa)? Il mio scopo è naturalmente ottenere il codice per completare il mio progetto, ma non meno importante, studiare la soluzione e riproporla con i miei adattamenti a progetti futuri. (conosco le regole del forum a questo proposito e sto facendo uno studio sistematico, ma necessariamente lento).

    Spero di non averti e avervi annoiati troppo, aspetto un riscontro. Grazie, Vic.

    P.S. C’è un altro modo, meno … ingombrante per dichiarare i punti o disegnare nell’area grafica il poligono? Io ho già degli array (uno per ogni regione) con le coordinate in sequenza: è obbligatorio usare questa modalità?

  • Re: Colorare un'area irregolare (es. regioni di cartina geografica)

    Io ho seguito la via piu breve e leggera. Disegni l'area su sfondo trasparente, la salvi con nome e ne crei una uguale di altro colore. Poi al passaggio del mouse la sostituisci. 

    Le uniche righe di codice sono quelle per sostituire l'immagine…

    https://ibb.co/PZc9GHm

    Rende e gira pure su qualsiasi pc vetusto…

  • Re: Colorare un'area irregolare (es. regioni di cartina geografica)

    26/06/2023 - sihsandrea ha scritto:


    Io ho seguito la via piu breve e leggera. Disegni l'area su sfondo trasparente, la salvi con nome e ne crei una uguale di altro colore. Poi al passaggio del mouse la sostituisci. 

    Le uniche righe di codice sono quelle per sostituire l'immagine…

    https://ibb.co/PZc9GHm

    Rende e gira pure su qualsiasi pc vetusto…

    Grazie per la risposta, ma io non ho capito il senso del tuo discorso. Non capisco il link che mi hai inviato: ha del codice in vb?
    Io ho già le immagini (20) della cartina dell'Italia con le regioni colorate sia con lo sfondo trasparente che non.
    Io conosco, a livello concettuale, le operazioni logiche da svolgere. Non ho individuato a livello operativo come effettuare il compito.
    Per esempio (vedi codice inviato) ho definito la regione (Aosta_) ma non so come (operativamente su quale controllo) individuare il passaggio del mouse sull'area; poi saprei come reagire.

    Rispetto alla soluzione 2, come procedo operativamente? Uso una pictureBox per caricare un'immagine alla volta o in altro modo? Come individuo la regione? Dall'immagine del momento o dalla posizione del mouse? e altro, ma forse è chiedere troppo.

    Ti ringrazio per il tempo che vorrai usare, Vic.

  • Re: Colorare un'area irregolare (es. regioni di cartina geografica)

    Crei la cornice immagine, loadfromfile ecc…

    Nell'oggetto immagine all'evento mousemove loadfromfile e carichi quella colorata…

    Il link è per dare l'idea di cosa viene fuori… i dentini colorati..

    Usi una picturebox per ogni regione e al passaggio del mouse cambi l'immagine di quella regione.

    Potresti fare lo stesso creandoti un poligono irregolare, ma già ti stai confondendo con le picturebox…

    Le accosti per formare la cartina… 

    In effetti, ti converrebbe usare i poligoni… dai il nome al poligono e segui la stessa logica per colorarlo. 

    Butta giù un po di codice per una regione poi devi solo replicare per 20 regioni… il codice lo scrivi tu…

    Fai quello che faresti con un rettangolo o un cerchio… esercitati con quelli, poi al posto del cerchio usi il tuo poligono…

  • Re: Colorare un'area irregolare (es. regioni di cartina geografica)

    OK, se hai tempo puoi riguardare il codice inviato prima: vedi che avevo creato la regione usando il metodo DrawPolygon (come detto), ma non so come fare a gestire questa. (sono due strade diverse)

    Riguardo ai dentini colorati: non li vedo, quindi non mi da' nessuna idea. Capisco che è utile un po' di mistero …

    Seconda strada: Riguardo alle picture, sto proprio provando a fare quello che suggerisci tu (diverse prove), però non trovo la modalità. Era questo soprattutto l'aiuto richiesto. Sul cosa ci siamo: è sul come il problema. Sullo studio siamo d'accordo, volevo superare la lunghissima fase dell'apprendimento per tentativi ed errori, soprattutto se i tentativi sono al buio.

    Ho provato a usare la cartina dell'italia con una regione colorata sfondo Trasparent, poi un'altra cartina uguale, stesse dimensioni e con un'altra regione colorata con la proprietà Trasparent attiva.

    Le immagini sono .gif con trasparenza sullo sfondo. Poi le picture non le accosto, ma le sovrappongo, però l'ultima copre le sottostanti. Cosa sbaglio? Cambia qualcosa se carico le immagini in runtime o in progettazione?

  • Re: Colorare un'area irregolare (es. regioni di cartina geografica)

    Point [] coordinateaosta=

     {
    New Point(61, 53),
    New Point(62, 65),
    New Point(56, 67),
    New Point(37, 69),
    New Point(35, 61),
    New Point(30, 55),
    New Point(38, 52),
    New Point(41, 55),
    New Point(50, 53),
    New Point(54, 49)
    }

    Per costruirlo:

    https://learn.microsoft.com/it-it/dotnet/desktop/winforms/advanced/polygons-in-gdi?view=netframeworkdesktop-4

  • Re: Colorare un'area irregolare (es. regioni di cartina geografica)

    Non credo che tu abbia utilizzato un istante per leggere realmente quanto ho scritto in precedenza.
    Dai risposte senza grande significato e mi sembra realmente di perdere il mio tempo a parlare con te.
    Devo constatare comunque una grande propensione alla considerazione verso gli altri e una enorme capacità di motivare chi sta chiedendo aiuto. Grazie, veramente, grazie.

    Qualcuno vuole realmente dare una mano? Sarebbe gradito.

  • Re: Colorare un'area irregolare (es. regioni di cartina geografica)

    26/06/2023 - Vic ha scritto:


    Non credo che tu abbia utilizzato un istante per leggere realmente quanto ho scritto in precedenza.
    Dai risposte senza grande significato e mi sembra realmente di perdere il mio tempo a parlare con te.
    Devo constatare comunque una grande propensione alla considerazione verso gli altri e una enorme capacità di motivare chi sta chiedendo aiuto. Grazie, veramente, grazie.

    Qualcuno vuole realmente dare una mano? Sarebbe gradito.

    Se per aiuto intendi qualcuno che scrive al posto tuo mi sa che hai sbagliato forum.

    Se conosci vb allora sai come creare le sagome, sai come scrivere il codice, conosci tutti i metodi, i comandi ecc..

    Di solito la dritta di da su come fare qualcosa. Ti ho suggerito di mettere su un oggetto grafico l'immagine neutra e quella selezionata ma forse non sai come si carica un'immagine su un oggetto grafico… 

    Non sai neanche dove scrivere il codice per il passaggio del mouse? Evento mousemove.

    Se vuoi perseguire la strada del poligono usi pen per definire i bordi e brush per colorarlo. 

    Non capisco cosa non riesci a fare.

    Io non ho vb dai tempi della prima peluria e non intendo spenderci un euro… se vuoi te lo scrivo in delphi. Li conosco quasi tutto, il quasi è sempre d'obbligo, ma se spulcio in giro riesco a decifrare le sintassi per modellarle ai miei bisogni.

    Chiama quel poligono che hai creato in qualche modo, poi si comporta come qualunque shape che inserisci su qualsivoglia progetto. 

    Tu un rettangolo come fai per colorarlo di verde?

    Fai la stessa cosa con l'oggetto regione che hai creato.

  • Re: Colorare un'area irregolare (es. regioni di cartina geografica)

    Mi sorprendi, quanto tempo hai speso per scrivere tutto questo. Riposati.

    Credo che non avrai sicuramente energie e tempo per arrivare in fondo al mio messaggio, sicuro.

    Hai ricavato quello che non so fare (secondo te), ma non hai letto quello che ho scritto. Le tue deduzioni sono semplicistiche e poco corrette!

    Io producevo programmi multimediali didattici in vb3 20-25 anni fa. Potrei mostrarti prodotti ottenuti quando pochi sapevano cosa significava programmare e multimedialità, anche se il mio lavoro era un altro. … Riprendo adesso (dopo 25 anni) a scrivere codice, ma come (forse) sai, il linguaggio è totalmente diverso specialmente dal punto di vista della sintassi oltre che della struttura. E’ questo lo scoglio che ho incontrato, so cosa si può fare, ma non conosco adeguatamente le strutture e la sintassi per farlo.
    Un aiuto significa dare una mano per superare l'ostacolo che hai davanti. Per te aiutare è indicare la direzione (teorica) del percorso. Me l’hai detto più volte, ma se il mio ostacolo è come applicare OPERATIVAMENTE il percorso individuato, allora le tue indicazioni non valgono niente.
    Tu dici: “La dritta si da su come fare qualcosa” è proprio quello che ti ho chiesto, solo che tu lo intendi teorico, io operativo.

    Se tu conosci (dal punto di vista pratico) vb meno di quanto lo conosco io, allora mi domando: perché rispondi a richieste di aiuto su attività dichiaratamente operative in VB? Perché non curi la sezione di delphi e rispondi su operazioni che riguardano vb? Non puoi far rispondere qualcuno … “esperto”?

    Oppure (viste le premesse) mi dici: io non faccio la balia, vai da un’altra parte, ok l’accetto: come sopra: fai rispondere qualcuno che ne ha voglia (...).

    Se invece, la tua spinta è … educativa e motivazionale, beh allora ti posso assicurare che hai raggiunto il tuo scopo. Mi hai sconvolto, tanto che ho perso la voglia di chiedere una mano. Farò quanto ti avevo detto in uno dei primi messaggi: studierò in modo sistematico, rinunciando ad arricchire (solo dal punto di vista visivo e non funzionale) il mio nuovo progetto (che è concluso, ma richiede alcuni effetti grafici).

    Auguri per la tua efficace attività, ah scusa, complimenti per la trasmissione.

  • Re: Colorare un'area irregolare (es. regioni di cartina geografica)

    Io producevo programmi multimediali didattici in vb3 20-25 anni fa. Potrei mostrarti prodotti ottenuti quando pochi sapevano cosa significava programmare e multimedialità 

    Quindi un esperto deus ex program con quel curriculum sono io che ti chiedo dritte ;)

    La differenza tra 25 anni fa e oggi riguardano i dispositivi mobili, internet, e compagnia bella. 

    Creare e disegnare un poligono o schiaffare un'immagine in una picture è lo stesso di 30 anni fa' con win3.1..

    Non puoi far rispondere qualcuno … “esperto”?

    I forum funzionano come 30 anni fa', chi vuole risponde e lo fa nello stesso modo che ho fatto io. Basta dare uno sguardo ai 3D per rendersene conto.

    Oppure (viste le premesse) mi dici: io non faccio la balia, vai da un’altra parte, ok l’accetto: come sopra: fai rispondere qualcuno che ne ha voglia (...).

    Il regolamento dice niente pappa pronta… io, spolverando vb riconosco il codice per come è scritto sulle guide, non capisco la tua difficoltà. Da multimedialman deus ex machina…

    La dritta si da su come fare qualcosa” è proprio quello che ti ho chiesto, solo che tu lo intendi teorico, io operativo. (E il forum lo chiama pappa in bocca).

    Faccio un salto indietro…

    Se tu conosci (dal punto di vista pratico) vb meno di quanto lo conosco io, allora mi domando: perché rispondi a richieste di aiuto su attività dichiaratamente operative in VB? Perché non curi la sezione di delphi e rispondi su operazioni che riguardano vb? Non puoi far rispondere qualcuno … “esperto”?

    Forse non hai letto bene.( Io si e fino in fondo) Io non ho vb e non posso fare prove e non intendo buttare 1 euro per comprarlo, anche peché non lo userei ma scrivi il codice e ti arrivano messaggi di correzione, non da me ovviamente. Per me il 3D è chiuso. Buona giornata.

Devi accedere o registrarti per scrivere nel forum
14 risposte