So arbeiten Sie mit Karten im SHP-Format in Delphi / Lazarus / С ++ Builder

SHP

ShapeFile, sie sind auch "Shapes" (englische Form - Shape) sind eine Form oder eine Reihe von komplexen Formen, die möglicherweise nicht miteinander verbunden sind. Formen können eine Struktur von Punkten, Polylinien oder Polygonen haben.

Es ist auch erwähnenswert, dass zusammen mit der Formatdatei "* .shp" eine Datei im Format "* .dbf" generiert wird, in der die Header-Informationen zu unseren Formen gespeichert werden. Es ist wichtig, dass die Datei "* .dbf" denselben Namen haben wie die Datei ".shp" hat. Die .shp-Hauptdatei speichert geometrische Daten, die in der .shx-Datei (Index) indiziert und mit Attributen und deren Werten in einer dBASE-Datenbank (.dbf) erweitert sind. Veröffentlichung ESRI verfügt über eine vollständige Spezifikation des "Shapefile" -Formats (.shp, .shx, .dbf) und nutzt die vollständige Unterstützung einer Reihe von GIS- und CAD-Systemen. Es wird häufig zur Darstellung aller Arten von Karten und kartografischen Diagrammen verwendet.

Wenn eine der festgelegten Dateien verloren geht, können die Daten beschädigt werden oder das Projekt geht insgesamt verloren.

Um in einem einzigen Projekt zu arbeiten, benötigen Sie alle diese Dateien.

ArcGIS ist ein Geoinformationssystem (GIS) für die Arbeit mit Karten und Geoinformationen. Es wird zum Erstellen und Verwenden von Karten, zum Zusammenstellen von geografischen Daten, zur Analyse, zu den Austauschen und Erkennen von geografischen Daten sowie zum Verwenden von Karten und geografischen Informationen von einer Reihe der Anwendungen und Verwaltungen für geografische Informationen in einer Datenbank verwendet. Mehr über ArcGIS Technologie

Im Kontext von GIS sind Vektordatenformate (oder tatsächlich Vektordatenspeichermodelle) eine der Möglichkeiten, Objekte in der realen Welt anzuzeigen.

Sie können SHP-Dateien mit den folgenden Programmen öffnen: CADE Pro, Parallels, Tools Center, AutoCAD, ArcExplorer von ESRI, Free File Viewer Pro.

Vorteile der ShapeFiles

Nachteile der ShapeFiles

Shapefiles eignen sich zum Speichern einfacher Geometrie für Features. Es gibt jedoch ernsthafte Probleme bei der Speicherung von Attributen. Sie können beispielsweise keine Zahlen runden, Unicode-Zeichen nur eingeschränkt unterstützen, keine Felder mit Namen, die mehr als 10 Zeichen haben, speichern und keine Möglichkeit haben, Datum und Uhrzeit in einem einzigen Feld zu konsolidieren. Dies sind nur die Hauptbeschränkungen. Darüber hinaus unterstützen sie nicht die Funktionen von Geodatabases, z. B. das Arbeiten mit Domänen und Subtypen. Daher sollten Sie keine ShapeFiles verwenden, wenn Sie komplexe Attribute speichern und die Funktionen von Geodatabases nutzen sollen.

Geometrie-Beschränkungen der ShapeFiles

Jede Komponente der ShapeFile darf nicht größer als 2 GB sein, was ungefähr 70 Millionen Punktmerkmalen entspricht, da 4-Byte-Nummern für Referenzen in der Datei verwendet werden. Die Anzahl der Linien- oder Polygon-Features, die in einer ShapeFile enthalten sein können, hängt von der Anzahl der Scheitelpunkte dieser Features ab (ein Scheitelpunkt entspricht einem Punkt).

Toleranzwerte (x; y) werden direkt in Geodatabase-Feature-Classes gespeichert, aber ShapeFiles speichern diese Werte jedoch auf ganz andere Weise: die (x; y) -Toleranz ist der Mindestabstand zwischen Koordinaten, näher an dem sie als identisch betrachtet werden. Zwischen Features derselben Feature-Class oder zwischen Features mehrerer verschiedenen Feature-Classes wird bei der Bewertung von Beziehungen dieselbe Toleranz verwendet. Es wird auch aktiv beim Bearbeiten von Objekten verwendet. Wenn Sie Operationen und Werkzeuge wie Überlagern, Ausschneiden, Ebene nach Ort auswählen oder ein Tool verwenden, das zwei oder mehr Feature-Classes als Eingabe verwendet, ist es besser, anstelle von den ShapeFiles die Geodatabase-Feature-Class zu verwenden.

Ein ShapeFile kann drei- bis fünfmal mehr Speicherplatz anfordern als eine Datei-Geodatabase oder SDE, da es unterschiedliche Komprimierungsmethoden verwendet.

ShapeFiles unterstützen Multipatch-Funktionen, jedoch nicht die folgenden Multipatch-Funktionen:

Der räumliche Index einer ShapeFile ist im Vergleich zu einem Geodatabase-Feature-Class-Index unwirksam. Räumliche Abfragen wie das Auswählen von Features innerhalb eines Polygons dauern länger als dieselbe Feature-Class in einer Geodatabase. Dieser Nachteil wird nur bei einer großen Anzahl von räumlichen Objekten beobachtet.

Parametrisch definierte Kurven (auch als Bogensegmentkurven bezeichnet) werden in den ShapeFiles nicht unterstützt. Parametrische Kurven können durch Bearbeiten einer Geodatabase-Feature-Class erstellt werden. Zur Darstellung der Kurven werden mathematische Formeln verwendet. Wenn Sie eine Geodatabase-Feature-Class, die parametrische Kurven enthält, in eine ShapeFile exportieren, werden die Kurven in einfache Linien-Features mit sehr nahe beieinanderliegenden Scheitelpunkten umgewandelt, um eine konsistente Form beizubehalten.

Im Gegensatz zu anderen Formaten speichert eine ShapeFile numerische Attribute im Zeichenformat und nicht im Binärformat. Bei reellen numerischen Werten (z. B. mit Dezimalstellen) kann dies zu Rundungsfehlern führen. Diese Einschränkung gilt nur für Attribute und nicht fürs Speichern von Koordinaten.

Mehr informationen über ShapeFile lesen Sie hier

Und hier über die Besonderheiten der Arbeit mit diesen Dateien

Wie die Datei im SHP im Code erstellen

Wir haben über das Format selbst diskutiert. Und wie kann man die fertigen Dateien öffnen, wenn man in Delphi arbeitet? Es gibt drei Möglichkeiten:

  1. Verwenden von GDAL. Das ist eine Bibliothek vom Transformiren der Raster- und Vektor-Geodatenformate, die unter der Open Source Geospatial Foundation-Lizenz im X / MIT-Stil lizenziert sind. Die Bibliothek präsentiert die aufrufende Anwendung der abstrakten Rasterdaten- und Vektordatenmodelle für alle unterstützten Formate. Es enthält außerdem verschiedene nützliche Befehlszeilenprogramme zum Übersetzen und Bearbeiten von Daten. 
  2. Verwenden von MapWindow GIS — ein OpenSource Projekt mit GIS Code, der eine Menge der im Programm steuernden Bibliotheken hat. Es wird vom GeoSpatial Software Lab der University in Idaho entwickelt. Die Anwendung läuft nur unter dem Windows-Betriebssystem, es gibt keine Unterstützung unter Linux. Erstens ist dieses Projekt für Entwickler sehr interessant, weil der Kern dieser Anwendung ist in C ++ geschrieben und besteht aus einer ActiveX-Bibliothek, die separat von MapWindow verwendet werden kann und eigene Anwendungen zur Visualisierung und Verarbeitung von Geodaten hat (das Tool funktioniert in allen Entwicklungsumgebungen, die den Import von ActiveX-Komponenten unterstützen). Ein Beispiel der Arbeit mit dieser Bibliothek. Github. 
  3. Und die beste Variante FastReport zu verwenden! Warum? Die Tatsache ist, dass es schon einsatzbereit ist! Nehmen Sie es und laden Sie es sofort - und, wunderbar, er zeigt Ihnen bereits alles! Ohne Beschränkungen! Sie sollen nicht eine Woche lang manipulieren, wir haben alles für Sie vorbereitet! Probieren Sie einfach! 

Wir erstellen eine Datei mit der Karte im SHP Format

Gehen Sie zu FR Designer. Suchen Sie das Objekt "Map" und fügen Sie es dem Dokument hinzu.

FR Designer

Ein Karteneditor sollte erscheinen. Die erste Registerkarte enthält allgemeine Informationen.

Karteneditor

Karte - Wir geben den Namen unserer Karte an. Außerdem werden hier die Ebenen der Karte angezeigt, die mit den Pfeilen verschoben werden können.

Hinzufügen - Laden Sie eine Datei im Format shp, osm oder gpx hoch (in unserem Fall SHP).

Löschen - Löscht eine Kartenebene.

Seitenverhältnis beibehalten - Behalten Sie das Seitenverhältnis der Karte bei.

Mercator Projection – Verwenden der Marcator Projektion.

Um eine neue Ebene hinzuzufügen, klicken Sie auf die Schaltfläche "Hinzufügen ...". Das folgende Fenster wird angezeigt:

Ebene hinzufügen

In diesem Schritt sollen Sie den Layertyp auswählen:

- Karte aus der Datei (.shp / .dbf, .osm, .gpx). Dies ist ein der am häufigste verwendeten Kartentypen. Sie können beispielsweise eine Weltkarte drucken und die Länder hervorheben, in denen der Umsatz über einem bestimmten Wert lag.

- eine leere Ebene mit vom Programm bereitgestellten Geodaten. Ihre Anwendung sollte geografische Koordinaten (ein Wertepaar - Längen- und Breitengrad) enthalten, die als Punkt auf der Karte angezeigt werden. Der Punkt kann signiert werden und je nach Daten auch unterschiedliche Größen und / oder Farben haben. In der Praxis wird dieser Kartentyp als zweite Ebene verwendet (die erste Ebene, die Basisebene, wird aus der Kartendatei entnommen). Auf der Basisebene wird beispielsweise eine Karte eines Landes angezeigt, und auf der zweiten Ebene werden Punkte mit den Namen der Städte angezeigt, in denen Verkäufe getätigt wurden. Die Größe und die Farbe des Punktes kann so angepasst werden, dass das Umsatzniveau in einer bestimmten Stadt klar ist.

Wenn Sie einen Layer basierend auf einer Kartendatei ausgewählt haben, geben Sie zusätzlich an, wie die Kartendaten gespeichert werden sollen:

- Die Daten sind in die Reportdatei eingebettet. In diesem Fall kann der Report erheblich größer werden.

- Die Reportdatei bezieht sich auf die Kartendatei. Es erfolgt keine Einbettung. Dieser Modus ist nützlich, wenn Sie mehrere Reporte mit denselben Karten haben.

Große Karten (mehr als 30 MB) oder eine große Anzahl von Polygonen (mehr als 20.000) verlangsamen den Report erheblich.

Füllen-EditorWenn Sie auf Füllen klicken, gelangen wir in den Fülleditor. Die Registerkarte Pinsel hat 3 Eigenschaften:

Pinsel stil

Der Pinselstil verfügt über mehrere vordefinierte Formatierungsoptionen:

Fest - mit einer einzigen Farbe füllen;

Klar - klarer Hintergrund ohne Farbe;

Horizontal - horizontale Linien für den gesamten Hintergrund;

Vertikal - vertikale Linien für den gesamten Hintergrund;

Vorwärtsdiagonale - diagonale Linien für den gesamten Hintergrund;

Rückwärtsdiagonale - Rückwärtsdiagonallinien für den gesamten Hintergrund;

Cross-Linien für den gesamten Hintergrund;

Diagonales Kreuz - diagonale Kreuzlinien für den gesamten Hintergrund;

Hintergrundfarbe Vordergrundfarbe

Die Hintergrundfarbe sowie die Vordergrundfarbe können aus einer vorgefertigten Farbpalette ausgewählt oder durch Klicken auf Andere die gewünschte Farbe angepasst werden.

Farbeditor

Auf der zweiten Registerkarte haben wir die Verlaufseinstellungen für den Hintergrund.

Der Verlaufsstil kann horizontal, vertikal, oval, rechteckig, vertikal mit einem Übergang zu einer anderen Farbe in der Mitte und horizontal mit einem Übergang zu einer anderen Farbe in der Mitte sein.

Die Start- und Endfarbe kann aus einer vorgefertigten Farbpalette ausgewählt werden oder Sie können die gewünschte Farbe anpassen, indem Sie auf Andere klicken.

Farbverlauf Farbverlauf

In der dritten Registerkarte sind die Glasfüllungseinstellungen.

Sie haben eine Wahl zwischen verschiedenen Ausrichtungen: vertikaler, horizontaler, vertikaler und horizontaler Spiegel.

Sie können eine Farbe aus einer vorgefertigten Palette auswählen oder die gewünschte Farbe anpassen, indem Sie auf Andere klicken.

Mischen - Farbmischungsverhältnis (im Screenshot ist es 0,5).

Schraffur anzeigen - Schraffur anzeigen.

Füllen Sie es in Form von Glas Füllen Sie es in Form von Glas

Kehren wir zum Karteneditor zurück und suchen den Frame-Editor bereits.

Linienblock: Sie können einen Stil aus den bereitgestellten Optionen auswählen, die Linienbreite festlegen und eine Farbe auswählen.

Rahmenblock: In der Mitte befindet sich ein Beispielrahmen. Wählen Sie aus, auf welche Seiten der Linienstil durch das Beispiel angewendet werden soll, oder verwenden Sie die Schaltflächen (Ränder auf allen Seiten, ohne Ränder oder Seiten separat).

Durch Hinzufügen eines Schattens können wir auch die Breite und Farbe angeben.

Frame editor Frame editor

Beispiel einer Farbskala

Schauen wir uns nun die zweite Registerkarte im Karteneditor an - Farbskala.

Die Rahmenfarbe kann durch Einstellen der Rahmenbreite aus der vorgefertigten Farbpalette ausgewählt werden. Wir legen die Position der Waage fest. Zum Beispiel haben wir die Position in der unteren rechten Ecke.

Geben Sie den Namen der Skala in das Feld Text ein und legen Sie mit Schriftart ... die Schriftart und ihre Größe fest.

Die Registerkarte "Skalierungsgröße" unterscheidet sich im Erscheinungsbild nicht von den Skalierungsfarben.

Karteneditor

Nachdem Sie das erhaltene Ergebnis gespeichert haben, wechseln Sie zur Registerkarte Vorschau und sehen Sie das fertige Ergebnis. Unsere Karte ist nicht statisch, Sie können sie dennoch überall skalieren. Wenn Sie mit der Maus über ein bestimmtes Gebiet (in unserem Fall ein beliebiges Land) bewegen, wird das gesamte Fragment hervorgehoben.

Beispiel einer Karte im Bericht

So erstellen Sie eine Karte im SHP-Format mit dem Code

Speichern Sie in SHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
procedure TForm1.FormCreate(Sender: TObject);
var page: TfrxReportPage;
 map: TfrxMapView;
 layer: TfrxMapFileLayer;
 applayer: TfrxApplicationLayer;
begin
 page := TfrxReportPage(frxReport1.FindObject('Page1'));
 map := TfrxMapView.Create(page);
 with map do
 begin
 CreateUniqueName();
 SetBounds(0, 0, 700, 800);
 MaxZoom := 50;
 MinZoom := 1;
 KeepAspectRatio := True;
 MercatorProjection := True;
 with ColorScale do
 begin
 Visible := True;
 BorderColor := 0;
 BorderWidth := 1;
 Dock := sdBottomRight;
 FillColor := 16777215;
 ValueFormat := '%1.0f';
 with Font do
 begin
 Charset := 1;
 Color := -16777208;
 Height := -13;
 Name := 'Tahoma';
 Style := [];
 end;
 with TitleFont do
 begin
 Charset := 1;
 Color := -16777208;
 Height := -13;
 Name := 'Tahoma';
 Style := [];
 end;
 end;
 with SizeScale do
 begin
 Visible := True;
 BorderColor := 0;
 BorderWidth := 1;
 Dock := sdTopLeft;
 FillColor := 16777215;
 ValueFormat := '%1.0f';
 with Font do
 begin
 Charset := 1;
 Color := -16777208;
 Height := -13;
 Name := 'Tahoma';
 Style := [];
 end;
 with TitleFont do
 begin
 Charset := 1;
 Color := -16777208;
 Height := -13;
 Name := 'Tahoma';
 Style := [];
 end;
 end;
 end;
 layer := TfrxMapFileLayer.Create(map);
 with layer do
 begin
 CreateUniqueName();
 MapFileName := 'C:\Program Files (x86)\FastReport 6 VCL Enterprise\Demos\Main\Maps\world.shp';
 DataSet := MapOrderDetailsDS;
 LabelColumn := 'NAME';
 SpatialColumn := 'NAME';
 ZoomPolygon := 'Germany';
 LabelKind := mlName;
 MapPalette := mpNone;
 MapAccuracy := 0;
 PixelAccuracy := 0;
 HighlightColor := 65280;
 Operation := opSum;
 ValueFormat := '%1.0f';
 PointLabelsVisibleAtZoom := 1;
 with ColorRanges do
 begin
 RangeFactor := rfValue;
 RangeCount := 0;
 Visible := True;
 StartColor := 255;
 MiddleColor := 65535;
 EndColor := 32768;
 end;
 with SizeRanges do
 begin
 RangeFactor := rfValue; {uses frxMapRanges}
 RangeCount := 0;
 Visible := True;
 StartSize := 4;
 EndSize := 20;
 end;
 end;
 applayer := TfrxApplicationLayer.Create(map);
 applayer.CreateUniqueName();
 with applayer do
 begin
 DataSet := MapOrderDetailsDS;
 AnalyticalValue := '<MapOrderDetails."UnitPrice"> * <MapOrderDetails."Quantity"> * (1 - <MapOrderDetails."Discount">)';
 Filter := '<MapOrders."ShipCountry"> = ''Germany''';
 HighlightColor := 65280;
 Operation := opSum;
 ValueFormat := '%1.0f';
 LabelKind := mlName;
 MapPalette := mpNone;
 PointLabelsVisibleAtZoom := 1;
 LabelValue := '<MapOrders."ShipCity">';
 LatitudeValue := '<MapOrders."Latitude">';
 LongitudeValue := '<MapOrders."Longitude">';
 SizeRanges.RangeFactor := rfValue;
 SizeRanges.RangeCount := 3;
 SizeRanges.Visible := True;
 SizeRanges.StartSize := 8;
 SizeRanges.EndSize := 20;
 ColorRanges.RangeFactor := rfValue;
 ColorRanges.RangeCount := 3;
 ColorRanges.Visible := True;
 ColorRanges.StartColor := 255;
 ColorRanges.MiddleColor := 65535;
 ColorRanges.EndColor := 32768;
 end;
 frxReport1.ShowReport;
end;

Die Form ist bei weiterem nicht das einzige Format für die Arbeit mit Karten. Es gibt auch OpenStreetMap (OSM) und GPS eXchange Format, aber ich werde in anderen Artikeln darüber sprechen.

Fast Reports
  • 800-985-8986 (Englisch, die USA)
  • +4930568373928 (Deutsch)
  • +55 19 98147-8148 (Portugiesisch)
  • info@fast-report.com
  • 901 N Pitt Str #325 Alexandria VA 22314

© 1998-2024 Fast Reports Inc.
Trustpilot