Tutorial Di DotSpatial Tutorial 4
Tutorial Di DotSpatial Tutorial 4
1.1) Creazione dei seguenti tipi di file shape: Punto, Polilinea, Poligono
3.2) Imposta le proprietà del documento di stampa. (Freccia del nord, Legenda, Barra delle scale, Titolo)
Crea una nuova applicazione VB o C# e fai clic con il tasto destro sul progetto nell'esplora soluzioni.
menu contestuale seleziona aggiungi riferimento e aggiungi il seguente riferimento dalla cartella DotSpatial.
2.2) Cambiare l'opzione di compilazione da .Net FrameWork 4 Client Profile a .Net FrameWork 4
1. Aggiungi quattro controlli pannello. Le proprietà del controllo pannello devono essere le seguenti:
2. Aggiungi un controllo menu strip sulla pnlOperations. Il menu dovrebbe contenere i seguenti elementi di menu.
2.1) Voce del menu principale: File, Operazioni su Shapefile, Opzioni della mappa e Operazioni sulla tabella degli attributi
Under File menu item create 3 sub menu items as follows: Load, Clear, Exit
Under the Shapefile Operations create the following sub menu items : Point , Polyline, Polygon
Sotto la voce di sottomenù Punto, creare i seguenti elementi di sottomenù: Crea Shapefile Punto, Salva Punto
Shapefile.
Sotto il sottomenu Polyline crea i seguenti sottomenu: Crea Shapefile Polilinea, Salva
Shapefile Polilinea.
Sotto il sottomenu Poligono crea i seguenti sottomenu: Crea Shapefile Poligonale, Salva
File Shapefile Poligonale.
Sotto l'elemento del menu Opzioni Mappa crea i seguenti sottogruppi: Predefinito, Informazioni,
Misura
Sotto la voce di menu Operazioni sulla Tabella degli Attributi crea i seguenti elementi di sottomenu: Visualizza Attributo
tabella, Aggiungi una colonna nella tabella degli attributi, Salva la colonna in ShapeFile, Elimina una colonna negli attributi
tabella, Aggiorna la tabella degli attributi nel Shapefile, Esporta la tabella degli attributi in Excel.
3.1 ) Aggiungere il controllo mappa sul controllo pnlMap e aggiungere il controllo legenda sul pnlLegend.
La mappa e il controllo della legenda si trovano nella Toolbox sotto i controlli DotSpatial.
Imposta le proprietà della mappa come segue: Dock = Riempire, Legenda = Legenda1
VB
[Link]
[Link]
[Link]
[Link]
C#
[Link];
[Link];
[Link];
[Link];
VB
#Fine Regione
C#
#fine_sezione
VB
Sottoprogramma CreaFileDiFormaPuntoStrumentoMenu_Click(ByVal sender As [Link], ByVal e As
[Link])Gestisce [Link]
Cambia lo stile del cursore
[Link] = [Link]
imposta il tipo di forma sulla variabile stringa classlevel
C#
MapPointLayerpointLayer = (MapPointLayer)[Link](pointF);
//Crea un nuovo simbolizzatore
PointSymbolizersymbol =newPointSymbolizer([Link], [Link], 3);
//Imposta il simbolizzatore per il livello punto
[Link] = simbolo;
//Imposta il legentText come punto
punto
//Imposta il clic sinistro del mouse come vero
vero
}
Genera l'evento di pressione del mouse Map1: Seleziona il controllo mappa e premi il tasto F4 per ottenere
la finestra delle proprietà. Nella finestra delle proprietà seleziona la scheda eventi e nella scheda eventi fai doppio clic
sopra il mouse giù.
VB
Caso"Punto"
[Link] = [Link]
Se(pointmouseClick)Allora
Questo metodo è utilizzato per convertire le coordinate dello schermo in coordinate della mappa
'[Link] è il punto di clic del mouse sul controllo della mappa
DimcoordAsCoordinate= [Link]([Link])
Crea un nuovo punto
Il parametro di input è la coordinata del punto cliccato
[Link](coord)
Aggiungi il punto nella Caratteristica Punto
assegnando la caratteristica punto a IFeature perché solo attraverso di essa possiamo impostare gli attributi.
DimcurrentFeatureAsIFeature= [Link](point)
aumentare l'ID del punto
pointID = pointID + 1
imposta l'attributo ID
[Link]("PointID") = pointID
aggiorna la mappa
[Link]()
Fine Se
Altro
[Link] = [Link]
Falso
Fine If
Fine selezione
C#
cambia(shapeType)
{
Punto
se([Link] == [Link])
{
se((puntoClicMouse))
{
Questo metodo viene utilizzato per convertire le coordinate dello schermo in coordinate della mappa
//[Link] è il punto di clic del mouse sul controllo della mappa
coordinatecoord = [Link]([Link]);
//imposta l'attributo ID
//[Link]["PointID"] = pointID;
//aggiorna la mappa
[Link]();
}
}
in caso contrario
{
//clic destro del mouse
[Link] = [Link];
pointmouseClick =false;
}
interrompere;
VB
C#
private void SalvaPuntoFormaFileToolStripMenuItem_Click(object mittente, EventArgs e)
{
[Link]("[Link]",true);
[Link]("Il file shapefile punto è stato salvato.");
[Link] = [Link];
}
VB
il livello linea
DimlineLayerAsMapLineLayer
DimlineFAs NewFeatureSet([Link])
DimlineID As Integer = 0
#Fine Regione
C#
MapLineLayerlineLayer = predefinito(MapLineLayer);
intlineID = 0;
VB
[Link] = [Link]
imposta proiezione
[Link]
Se Not([Link]("LineID")) Allora
[Link](colonna)
Fine If
DimsymbolCome NuovoSimbolizzatoreDiLinea([Link], 2)
symbolo
linea
firstClick =True
vero
Fine Sub
C#
line
//imposta proiezione
[Link] = [Link];
if()
{
[Link](colonna);
}
firstClick =true;
linemouseClick =true;
}
VB
Caso "line"
[Link]
clic sinistro - riempi array di coordinate
coordinate del punto cliccato
DimcoordAsCoordinate= [Link]([Link])
Se(linemouseClick)Allora
clic sinistro della prima volta - crea funzione riga vuota
SePrimoClicAllora
Crea una nuova lista chiamata lineArray.
In una lista non è necessario definire la dimensione e anche
Qui questa lista memorizzerà le coordinate
Memorizzeremo le coordinate dei clic del mouse in questo array.
DimlineArrayAs NuovaList(OfCoordinate)
Crea un'istanza per la classe LineString.
lineID = lineID + 1
[Link]("LineID") = lineID
firstClick =False
Altro
secondo o più clic - aggiungi punti alla funzione esistente
Dim existingFeature As IFeature = [Link]([Link] - 1)
[Link](coord)
aggiorna la mappa se la linea ha 2 o più punti
Se [Link] >= 2 Allora
[Link]()
[Link]()
Fine If
Fine Se
Fine If
Altro
clic destro - ripristina primo clic del mouse
firstClick =True
[Link]()
Fine se
C#
caso": "linea":
se([Link] == [Link])
{
//clic sinistro - riempi array di coordinate
//coordinate del punto cliccato
Coordinatecoord = [Link]([Link]);
se(linemouseClick)
{
//prima volta clic sinistro - crea funzionalità di linea vuota
se(primoClick)
{
//Crea una nuova lista chiamata lineArray.
//Questa lista conterrà le coordinate
Memorizzeremo le coordinate del clic del mouse in questo array.
List<Coordinate> lineArray = new List<Coordinate>();
IFeaturelineFeature = [Link](lineGeometry);
[Link](coord);
//imposta l'attributo della caratteristica della linea
lineID = lineID + 1;
[Link]["LineID"] = lineID;
firstClick =false;
}
altrimenti
{
//seconda o più clic - aggiungi punti alla funzionalità esistente
IFeatureexistingFeature = [Link][[Link] - 1];
[Link](coord);
VB
Sottoprogramma SalvaFileFormaPoligonaleToolStripMenuItem_Click(ByVal sender As [Link], ByVal e As
[Link])Gestisce [Link]
[Link]("c:\MW\[Link]", True)
MsgBox("Il file shapefile della linea è stato salvato in C:\MW\")
[Link] = [Link]
Falso;
Fine Sub
C#
VB
C#
variabili di livello della classe ShapeFile del poligono della regione
FeatureSetpolygonF = nuovoFeatureSet([Link]);
0;
boolpolygonmouseClick =false;
#regione
VB
[Link] = [Link]
poligono
imposta proiezione
[Link] = [Link]
poligono
firstClick =True
polygonmouseClick =True
Fine Sub
C#
[Link] = [Link];
//imposta proiezione
[Link] = [Link];
se()
{
[Link](colonna);
}
MapPolygonLayerpolygonLayer = (MapPolygonLayer)[Link](polygonF);
[Link] = simbolo;
poligono
firstClick =true;
polygonmouseClick =true;
VB
Caso "poligono"
[Link] = [Link]
clic sinistro - riempi array di coordinate
DimcoordAsCoordinate= [Link]([Link])
Se(polygonmouseClick)Allora
primo clic sinistro - crea una linea vuota funzione
SePrimoClicAllora
Crea una nuova lista chiamata polygonArray.
Qui questa lista memorizzerà le coordinate
Registreremo le coordinate del clic del mouse in questo array.
DimpolygonArrayAs NewList(OfCoordinate)
Crea un'istanza per la classe LinearRing.
Passiamo l'elenco dei poligoni al costruttore di questa classe
DimpolygonGeometryComeNuovoAnelloLineare(polygonArray)
Aggiungi l'istanza polygonGeometry a PolygonFeature
[Link](polygonGeometry)
aggiungi la prima coordinata alla funzione del poligono
[Link](coord)
imposta l'attributo della feature del poligono
polygonID = polygonID + 1
[Link]("PolygonID") = polygonID
firstClick =False
Altro
secondo o più clic - aggiungi punti alla funzionalità esistente
Dim existingFeature As IFeature = [Link]([Link] - 1)
[Link](coord)
aggiorna la mappa se la linea ha 2 o più punti
C#
caso "poligono":
se([Link] == [Link])
{
//clic sinistro - riempi l'array di coordinate
Coordinatecoord = [Link]([Link]);
se(polygonmouseClick)
{
//prima volta clic sinistro - crea funzione riga vuota
se(primoClic)
{
//Crea una nuova lista chiamata polygonArray.
[Link](coord);
VB
C#
Codice completo dell'evento mouse down di Map1: Negli esempi sopra, lo stesso evento è utilizzato per implementare
diverse funzionalità delle forme. Quindi, il seguente codice è il codice completo per l'evento mouse down di Map1.
Il seguente codice mostra tutte le diverse operazioni sulle forme.
VB
Sottoprocedura Private SubMap1_MouseDown(ByVal sender As Object, ByVal e As
[Link])[Link]
Seleziona TipoDiFormaCaso
Caso "Punto"
[Link] = [Link]
Se(pointmouseClick)Allora
Questo metodo viene utilizzato per convertire le coordinate dello schermo in coordinate mappa
'[Link] è il punto di clic del mouse sul controllo della mappa
DimcoordAsCoordinate= [Link]([Link])
DimcurrentFeatureAsIFeature= [Link](point)
imposta l'attributo ID
[Link]("PointID") = pointID
aggiorna la mappa
[Link]()
Fine Se
Altro
clic destro del mouse
[Link] = [Link]
Falso
Fine If
Caso"linea"
[Link]
clic sinistro - riempi array di coordinate
coordinate del punto cliccato
DimcoordAsCoordinate= [Link]([Link])
Se(linemouseClick)Allora
clic sinistro per la prima volta - crea funzionalità di linea vuota
SePrimoClicAllora
Crea una nuova lista chiamata lineArray.
Nella lista non è necessario definire la dimensione e anche
Qui questo elenco memorizzerà le coordinate
Stiamo per memorizzare le coordinate del clic del mouse in questo array.
DimlineArrayAs NewList(OfCoordinate)
Crea un'istanza per la classe LineString.
Dobbiamo passare una collezione di coordinate della lista
DimlineGeometryAs NewLineString(lineArray)
Aggiungi la geometria della linea alla funzione linea
DimlineFeatureAsIFeature= [Link](lineGeometry)
aggiungi la prima coordinata alla funzione linea
[Link](coord)
imposta l'attributo della linea caratteristica
lineID = lineID + 1
[Link]("LineID") = lineID
firstClick =False
Altro
secondo o più clic - aggiungi punti alla funzionalità esistente
Dim existingFeature As IFeature = [Link]([Link] - 1)
[Link](coord)
aggiorna la mappa se la linea ha 2 o più punti
Se [Link] >= 2 Allora
[Link]()
[Link]()
Fine If
Fine If
Fine If
Altro
clic destro - ripristina il primo clic del mouse
firstClick =True
[Link]()
Fine se
Caso "poligono"
[Link] = [Link]
clic sinistro - riempi array di coordinate
DimcoordAsCoordinate= [Link]([Link])
Se(polygonmouseClick)Allora
clic sinistro per la prima volta - funzione per creare una linea vuota
SePrimoClicAllora
Crea una nuova lista chiamata polygonArray.
Qui questo elenco memorizzerà le Coordinate
Andremo a memorizzare le coordinate del clic del mouse in questo array.
DimpolygonArrayAs NuovaLista(OfCoordinate)
Crea un'istanza per la classe LinearRing.
Passiamo l'elenco dei poligoni al costruttore di questa classe
DimpolygonGeometryComeNuovoAnelloLineare(polygonArray)
Aggiungi l'istanza polygonGeometry a PolygonFeature
[Link](polygonGeometry)
aggiungi la prima coordinata alla feature del poligono
[Link](coord)
imposta l'attributo della feature del poligono
polygonID = polygonID + 1
[Link]("PolygonID") = polygonID
firstClick =False
Altro
secondi o più clic - aggiungi punti alla funzionalità esistente
Dim existingFeature As IFeature = [Link]([Link] - 1)
[Link](coord)
aggiorna la mappa se la linea ha 2 o più punti
Se [Link] >= 3 Allora
aggiorna la mappa
[Link]()
[Link]()
Fine If
Fine se
Fine If
Altro
clic destro - ripristina il primo clic del mouse
firstClick =True
[Link] = [Link]
Fine If
Fine Seleziona
Fine Sub
C#
//imposta l'attributo ID
[Link]["PointID"] = pointID;
//aggiorna la mappa
[Link]();
}
}
altro
{
//clic destro del mouse
[Link] = [Link];
pointmouseClick =false;
}
interrompere;
line
se([Link] == [Link])
{
//clic sinistro - riempi array di coordinate
//coordinate del punto cliccato
Coordinatecoord = [Link]([Link]);
se(linemouseClick)
{
//primo clic sinistro - crea una funzione vuota
se(primoClick)
{
//Crea una nuova lista chiamata lineArray.
//Questa lista memorizzerà le Coordinate
Conserveremo le coordinate del clic del mouse in questo array.
List<Coordinate> lineArray = new List<Coordinate>();
IFeaturelineFeature = [Link](lineGeometry);
[Link](coord);
//impostare l'attributo della funzionalità linea
lineID = lineID + 1;
[Link]["LineID"] = lineID;
false
}
altro
{
//secondo o più clic - aggiungi punti alla funzionalità esistente
IFeature existingFeature = [Link][[Link] - 1];
[Link](coord);
poligono
se([Link] == [Link])
{
//clic sinistro - riempi array di coordinate
Coordinatecoord = [Link]([Link]);
se(polygonmouseClick)
{
//prima volta clic sinistro - crea una funzionalità di riga vuota
se(primoClick)
{
//Crea una nuova lista chiamata polygonArray.
[Link](coord);
Visualizza la tabella degli attributi del file shapefile degli Stati Uniti.
VB
DimdtAsDataTable
Se [Link] > 0 Allora
DimstateLayerAsMapPolygonLayer
stateLayer = TryCast([Link](0), MapPolygonLayer)
Se stateLayer è nullo allora
[Link]("Il layer non è un layer poligonale.")
Altro
Ottieni la tabella degli attributi del file shapefile nel nostro datatable dt
dt = [Link]
Imposta la sorgente dati del datagridview da datatable dt
[Link] = dt
Fine If
Altro
[Link]("Per favore, aggiungi un livello alla mappa.")
Fine Se
Fine Sub
C#
se([Link] > 0)
{
MapPolygonLayerstateLayer = default(MapPolygonLayer);
stateLayer = (MapPolygonLayer)[Link][0];
se(stateLayer == null)
{
[Link]("Il livello non è un livello poligonale.");
}
altro
{
//Ottieni la tabella degli attributi del shapefile nella nostra datatable dt
dt = [Link];
//Imposta la sorgente dati della datagridview dalla datatable dt
[Link] = dt;
}
}
altrimenti
{
Aggiungi una nuova colonna nella tabella degli attributi. Nel seguente esempio il nome della nuova colonna è
PercentualeMaschi
VB
Sottoprocedura CreaUnaColonnaNellaTabellaAttributiStrumentoStripMenuItem_Click(ByVal sender As [Link],
[Link])[Link]
Dichiarare una tabella dei dati
DimdtAsDataTable
Se [Link] > 0 Allora
DimstateLayerAsMapPolygonLayer
stateLayer = TryCast([Link](0), MapPolygonLayer)
Se stateLayer è nullo allora
[Link]("Il layer non è un layer poligonale.")
Altro
Ottieni la tabella degli attributi del shapefile nella nostra tabella dt
dt = [Link]
Aggiungi nuova colonna
C#
//controlla i livelli
se([Link] > 0)
{
//Dichiarare un livello mappolygon
MapPolygonLayerstateLayer =default(MapPolygonLayer);
se(stateLayer ==null)
{
[Link]("Il livello non è un livello poligonale.");
}
altro
{
//Ottieni la tabella degli attributi del shapefile nella nostra datatable dt
dt = [Link];
//calcolare valori
per ogni riga in [Link]
{
doublemales = [Link](row["males"]);
doublefemales = [Link](row["females"]);
(maschi / (maschi + femmine)) * 100;
percentualeMaschi
}
//Imposta la sorgente dati del datagridview dalla datatable dt
[Link] = dt;
}
}
altrimenti
{
[Link]("Per favore aggiungi un livello alla mappa.");
}
Fig. 10. Aggiungi una nuova colonna PercentMales nella tabella degli attributi.
VB
Private Sub SalvaLaColonnaInShapeFileToolStripMenuItem_Click(ByVal sender As [Link],
[Link])[Link]
Se [Link] > 0Allora
DimstateLayerAsMapPolygonLayer
stateLayer = TryCast([Link](0), MapPolygonLayer)
Se stateLayer è nullo allora
[Link]("Il layer non è un layer poligonale.")
Altro
[Link]()
Fine Se
Altro
[Link]("Per favore aggiungi un livello alla mappa.")
Fine Se
Fine Sub
C#
Elimina la colonna degli attributi dalla tabella degli attributi. Nell'esempio seguente, la colonna "PercentMales" sarà
essere eliminato.
VB
C#
{
//Dichiarare una tabella dei dati
[Link] dt = null;
se([Link] > 0)
{
default(MapPolygonLayer)
se(stateLayer == null)
{
[Link]("Il livello non è un livello poligonale.");
}
altro
{
//Ottieni la tabella degli attributi del shapefile nella nostra tabella dati dt
dt = [Link];
Fai clic con il tasto destro sul progetto nell'esplora soluzioni. Nel menu contestuale seleziona aggiungi riferimento e
aggiungi il riferimento .NET: [Link]
VB
Private Sub EsportaTabellaAttributiInExcelToolStripMenuItem_Click(ByVal sender As [Link],
[Link])[Link]
Dichiara una tabella dati
DimdtAsDataTable
[Link] > 0Allora
DimstateLayerAsMapPolygonLayer
stateLayer = TryCast([Link](0), MapPolygonLayer)
Se stateLayer è Niente Allora
[Link]("Il livello non è un livello poligonale.")
Altrimenti
Ottieni la tabella degli attributi del shapefile nella nostra tabella dati dt
dt = [Link]
Chiama il sub ExportToExcel
C#
se ([Link] > 0)
{
MapPolygonLayerstateLayer =default(MapPolygonLayer);
stateLayer = [Link][0] come MappaPoligonaleLayer;
se(stateLayer == null)
{
[Link]("Il layer non è un layer poligonale.");
}
altro
{
//Ottieni la tabella degli attributi del file shapefile nella nostra datatable dt
dt = [Link];
//Chiama il sotto ExportToExcel
//Questa sottoprocedura si aspetta un datatable come input
EsportaInExcel(dt);
}
}
altrimenti
{
[Link]("Per favore, aggiungi uno strato alla mappa.");
}
Scrivi il seguente sottometodo per ottenere un output di foglio di calcolo Excel da una tabella di attributi.
VB
<riassunto>
Questo metodo secondario è utilizzato per creare un foglio di lavoro Excel dalla tabella degli attributi
</riassunto>
tabella degli attributi come input di datatable
<commenti>Fai clic sulla scheda COM nella finestra di dialogo Aggiungi Riferimento e cerca Microsoft Excel 14 Object
Biblioteca.</commenti>
Private Sub EsportaInExcel(ByVal objDT As DataTable)
Aggiungi i nomi delle colonne dalla tabella degli attributi al foglio di lavoro di Excel
DimintIAs Intero= 1
ForintCol = [Link] - 1
.cells(2, intI).value = [Link](intCol).ColumnName
.celle(2, intI).[Link] = True
intI += 1
Successivo
Aggiungi i valori delle righe di dati dalla tabella degli attributi al foglio di lavoro Excel
intI = 3
DimintKAs Intero= 1
ForintCol = [Link] - 1
intI = 3
ForintRow = 0 A [Link] - 1
.Cells(intI, intK).Value = [Link](intRow).ItemArray(intCol)
intI += 1
Prossimo
intK += 1
Successivo
.[Link](strFilename)
Fine con
[Link](Excel)
Excel =Niente
MsgBox("I dati sono stati esportati in Excel con successo in '
[Link])
CatchexAsException
MsgBox([Link])
Fine Prova
L'Excel è stato creato e aperto per inserire il valore. Dobbiamo chiudere questo Excel utilizzando questo sistema.
Dimpro()ComeProcess= [Link]("EXCEL")
Per OgniProcessoInpro
[Link]()
Prossimo
Fine Sub
C#
/// <summary>
Questo sottometodo è utilizzato per creare un foglio di lavoro Excel dalla tabella degli attributi
/// </summary>
/// <param name="objDT">attribute table as a datatable input</param>
// <remarks>Fai clic sulla scheda COM della finestra di dialogo Aggiungi riferimento e trova Microsoft Excel 14 Oggetto
Biblioteca.
null;
intintCol = 0;
intintRow = 0;
//percorso per memorizzare il foglio di calcolo excel
se(xlApp ==null)
{
[Link]("Sembra che Excel non sia installato su questa macchina. Questa operazione richiede MS")
Excel deve essere installato su questa macchina.
ritorna;
}
prova
{
//var _with1 = [Link]();
[Link] = 1;
[Link]();
[Link][1].Seleziona();
//Aggiungi i nomi delle colonne dalla tabella degli attributi al foglio di lavoro di Excel
intintI = 1;
per(intCol = 0; intCol <= [Link] - 1; intCol++)
{
[Link][2, intI].value = [Link][intCol].ColumnName;
[Link][2, intI].[Link] = true;
intI += 1;
}
//Aggiungi i valori della riga di dati dalla tabella degli attributi al foglio di lavoro di Excel
intI = 3;
intintK = 1;
per(intCol = 0; intCol <= [Link] - 1; intCol++)
{
intI = 3;
per(intRow = 0; intRow <= [Link] - 1; intRow++)
{
[Link][intI, intK].Value = [Link][intRow].ItemArray[intCol];
intI += 1;
}
intK += 1;
}
se([Link]([Link] - 1, 1) !="\")
{
strPath = strPath +"\";
}
[Link](strFilename);
[Link](xlApp);
xlApp =null;
[Link]("I dati sono stati esportati in Excel con successo in '" + strFilename + "'", "",
Pulsanti della finestra di [Link], Icona della finestra di [Link]);
}
catturare(Exception ex)
{
[Link]([Link]);
}
L' excel è creato e aperto per inserire valori. Dobbiamo chiudere questo excel utilizzando questo sistema.
[Link][] pro =
([Link][])[Link]("EXCEL");
foreach([Link])
{
[Link]();
}
}
VB
C#