logo
small logo
  • Produkty
  • Zamów
  • Wsparcie techniczne
  • About
  • Customer panel Wsparcie techniczne
    • en
    • de
    • JP
    • ZH
  • Glówna strona
  • /
  • Articles
  • /
  • Jak pracować z mapami SHP w Delphi / Lazarus / С++ Builder
  • Wykorzystanie interaktywnych map w FastReport VCL 2021

    30 kwietnia 2021

    To już ostatni artykuł z cyklu kursów programu edukacyjnego Akademik. W poprzednich publikacjach rozważaliśmy

    read more
  • Jak utworzyć jeden raport z wielu w Delphi / Lazarus / C++ Builder

    11 grudnia 2020

    Chciałbym zauważyć, że FastReport VCL jest jednym z najwygodniejszych komponentów do generowania raportów o dowolnej

    read more
  • Raporty typu Drill-Down w FastReport VCL (Delphi/Lazarus)

    9 lutego 2021

    „Wyszczególnianie” lub „zagłębianie się w dane” to pojęcie o wielu aspektach, które może odnosić się

    read more
  • Tworzenie kodu kreskowego CODE 39 i rozszerzonego CODE 39 w środowisku Delphi / Lazarus

    23 października 2020

    CODE 39 jest kodem kreskowym opracowanym przez Intermec Corporation w 1975 roku. Kod kreskowy może

    read more
  • W jaki sposób generować kod kreskowy ITF (przeplatany, przemysłowy, macierzowy) w środowisku Delphi / Lazarus / C ++ Builder

    11 listopada 2020

    Trochę teorii dotyczącej kodów kreskowych Trudno wyobrazić sobie dzisiaj nasze życie bez kodów kreskowych, szczególnie teraz,

    read more

Jak pracować z mapami SHP w Delphi / Lazarus / С++ Builder

28 września 2020

SHP

ShapeFile, znany również jako Shape, to figura lub zestaw figur o złożonym kształcie (prawdopodobnie niepowiązanych z sobą). Pole Shape może być jednym z następujących typów geometrii: punkt, polilinia lub wielokąt.

Warto również zauważyć, że wraz z plikiem *.shp tworzy się plik *.dbf, który zawiera nagłówek informacji o kształtach. Ważne jest, aby plik *.dbf miał taką samą nazwę jak plik *.shp. Główny plik .shp przechowuje dane geometryczne zindeksowane w pliku .shx (indeks) oraz rozszerzone atrybuty z ich wartościami w dBASE (.dbf). Dane ESRI posiadają pełną specyfikację formatu ShapeFile (.shp, .shx, .dbf) i wykorzystują pełną obsługę wielu systemów GIS i CAD; są szeroko stosowane do reprezentowania wszelkiego rodzaju map i warstw diagramów kartograficznych.

Jeśli jeden z plików z tego zestawu zostanie utracony, dane mogą ulec uszkodzeniu lub projekt zostanie całkowicie utracony.

Aby pracować w jednym projekcie, będziesz potrzebował wszystkich tych plików.

ArcGIS to system informacji geograficznej (GIS) do pracy z mapami i informacjami geograficznymi utrzymywany przez Environmental Systems Research Institute (Esri). Służy do tworzenia i używania map, kompilowania danych geograficznych, analizowania zmapowanych informacji, udostępniania i odkrywania informacji geograficznych, wykorzystywania map i informacji geograficznych w różnych aplikacjach oraz zarządzania informacjami geograficznymi w bazie danych. Dowiedz się więcej o technologii ArcGIS. 

W kontekście GIS, formaty danych wektorowych (lub zasadniczo modele przechowywania danych wektorowych) są jednym ze sposobów wyświetlania obiektów świata rzeczywistego.

Pliki .shp można otworzyć za pomoc programów: CADE Pro, Parallels, Tools Center, AutoCAD, ArcExplorer, Free File Viewer Pro.

Kiedy należy użyć pliku Shapefile?

  • Kiedy eksportowane dane będziemy używać w aplikacji innej firmy niż Esri
  • Kiedy eksportowane dane będziemy używać w ArcView GIS 3 lub ArcInfo Workstation
  • Kiedy trzeba szybko napisać proste funkcje i atrybuty, na przykład dla usług geoprzetwarzania (należy jednak pamiętać o ograniczeniach opisanych poniżej).

Wady plików ShapeFile

Dopuszczalne jest, by pliki ShapeFile przechowywały proste obiekty geometrii, pewne wyjątki opisano poniżej. Jednak pliki ShapeFile mają poważne problemy z niektórymi cechami.. Na przykład, nie mogą przechowywać wartości null, zaokrąglają liczby, mają słabą obsługę ciągów znaków Unicode, nie zezwalają na nazwy pól dłuższe niż 10 znaków i nie mogą przechowywać w polu ani daty, ani godziny. To tylko najistotniejsze wady . Ponadto, nie obsługują funkcji znajdujących się w geobazach, takich jak domeny i podtypy. Więc bez bardzo prostych atrybutów i potrzeby geobazy, lepiej nie używać plików ShapeFile.

Ograniczenia geometrii

Dla każdego pliku składowego Shapefile nałożony został limit rozmiaru w wysokości 2 GB, co przekłada się na maksymalnie około 70 milionów funkcji punktowych. Rzeczywista liczba obiektów linii lub wielokąta, które można przechowywać w pliku Shapefile, zależy od liczby szczytów w każdej linii lub wielokąta (szczyt jest odpowiednikiem punktu).

Pliki Shapefile nie mają tolerancji x,y, tak jak klasy obiektów geobazy. Tolerancja x,y to minimalna odległość między współrzędnymi, zanim zostaną uznane za równe. Tolerancja x,y jest używana podczas oceny relacji między obiektami w tej samej klasie obiektów lub między kilkoma różnymi klasami obiektów. Jest również szeroko stosowana podczas edycji obiektów. Do wykonywania jakichkolwiek operacji związanych z porównaniem możliwości, takich jak użycie narzędzi Overlay, Clip, Select Layer By Location lub dowolnego narzędzia, które pobiera dwie lub więcej klas obiektów jako dane wejściowe, zamiast plików Shapefile należy użyć klas funkcji obiektów geobazy (które mają tolerancję x,y).

Plik Shapefile może zajmować od trzech do pięciu razy więcej miejsca niż geobaza plików lub SDE ze względu na metody kompresji kształtu.

Pliki Shapefile obsługują poprawki w postaci multipatch, z wyjątkiem następujących zaawansowanych funkcji poprawek typu multipatch:

  • Współrzędne tekstury
  • Tekstury i kolor części
  • Oświetlenie normalne

Indeks przestrzenny pliku shapefile jest nieefektywny w porównaniu z indeksem klasy obiektów geobazy. Oznacza to, że zapytania przestrzenne (takie jak wybieranie obiektów w obrębie wielokąta) trwają dłużej w porównaniu z klasą obiektów geobazy. Ta nieefektywność jest zauważalna tylko w przypadku dużej liczby obiektów.

Krzywe zdefiniowane parametrycznie (znane również jako krzywe łuku okręgu) nie są obsługiwane w plikach shapefile. Krzywe parametryczne są tworzone przez edycję klas obiektów geobazy, tak jak opisano w sekcji Tworzenie krzywej. Do rysowania krzywej, krzywe łuku okręgu wykorzystują wzór matematyczny. W przypadku eksportowania klasy obiektów geobazy zawierającej obiekty krzywej łuku okręgu do pliku shapefile, zakrzywione obiekty są przekształcane w proste obiekty linii z blisko rozmieszczonymi wierzchołkami, aby uchwycić zakrzywiony kształt.

W przeciwieństwie do innych formatów, pliki shapefile przechowują cechy numeryczne w formacie znakowym, a nie binarnym. W przypadku liczb rzeczywistych (czyli liczb zawierających miejsca dziesiętne), może to prowadzić do błędów zaokrąglania. Nie dotyczy to współrzędnych kształtu, a tylko atrybutów.

Tutaj możesz przeczytać więcej o plikach shapefile

Tutaj możesz przeczytać więcej o pracy z tym formatem

Jak utworzyć plik .SHP za pomocą kodu

Omówiliśmy sam format i dowiedzieliśmy się, jak otwierać gotowe pliki, ale jak możemy z nimi pracować w Delphi? Są trzy sposoby:

  1. GDAL - biblioteka translatora dla rastrowych i wektorowych formatów danych geoprzestrzennych, wydana na licencji Open Source w stylu X/MIT przez Open Source Geospatial Foundation. Jako biblioteka, prezentuje pojedynczy rastrowy abstrakcyjny model danych i pojedynczy wektorowy abstrakcyjny model danych aplikacji wywołującej dla wszystkich obsługiwanych formatów. Zawiera również wiele przydatnych narzędzi wiersza poleceń do tłumaczenia i przetwarzania danych.
  2. MapWindow GIS – open-source'owa aplikacja GIS (mapowanie) i pakiet komponentów mapowania. Projekt ten został opracowany przez Geospatial Software Lab Uniwersytetu Stanowego Idaho. Aplikacja działa tylko w systemie Windows, nie obsługuje systemu operacyjnego Linux. Przede wszystkim, projekt jest bardzo interesujący dla programistów, ponieważ rdzeń tej aplikacji jest napisany w C++ i jest to biblioteka ActiveX, z której można korzystać niezależnie od MapWindow i rozwijać własną aplikację do wizualizacji i przetwarzania geodanych (działa we wszystkich środowiskach programistycznych obsługujących import komponentów ActiveX). Więcej można o tym przeczytać tutaj. Githab. 
  3. Najlepszym wyborem jest zastosowanie z FastReports. Dlaczego? Ponieważ jest gotowy do użycia! Wystarczy pobrać – i oto – pokazuje wszystko! To jak pieczona kaczka po pekińsku. Gdybyście sami ją ugotowali, musielibyście ją marynować przez tydzień, a w naszym przypadku, już ją dla Ciebie zamarynowaliśmy! Przyjdź i zjedz ją od razu!

Tworzenie pliku mapy SHP

Przejd do programu FR Designer. Znajdź Obiekt Mapa i dodaj go do dokumentu.

FR Designer

Powinien pojawić się edytor map. Pierwsza zakładka zawiera informacje ogólne.

Edytor Map

Mapa –nadaj nazwę swojej mapie. W tym miejscu będą również wyświetlane warstwy mapy, które można przesuwać za pomocą strzałek.

Dodaj – wyślij plik w formacie shp, osm lub gpx (w naszym przypadku: SHP).

Usuń – usuń warstwę mapy.

Zachowaj proporcje – zachowaj proporcje.

Mercator Projection – użyj Mercator Projection.

Aby dodać nową warstwę, kliknij przycisk „Dodaj ...”. Wyświetli się następujące okno:

Dodaj Warstwę

Teraz wybierz rodzaj warstwy:

- mapę z pliku (.shp / .dbf, .osm, .gpx). To najczęściej używany typ mapy. Na przykład, można wydrukować mapę świata i zaznaczyć kraje, w których sprzedaż przekroczyła określoną wartość;

- program przedstawi pustą warstwę geodanych. Twoja aplikacja powinna dostarczyć współrzędne geograficzne (para wartości – szerokość i długość geograficzną), która zostanie wyświetlona jako punkt na mapie. Punkt może mieć oznaczenie, a także inny rozmiar i/lub kolor, w zależności od niektórych danych. W praktyce ten typ mapy jest używany jako druga warstwa (pierwsza warstwa – podstawowa – pobierana jest z pliku mapy). Na przykład, w warstwie bazowej wyświetlana jest mapa kraju, a w warstwie drugiej punkty z nazwami miast, w których odbywała się sprzedaż. Wielkość i kolor punktu można dostosować tak, aby poziom sprzedaży w danym mieście był zrozumiały.

Jeśli wybrałeś warstwę na podstawie pliku mapy, określ dodatkowo sposób przechowywania danych mapy:

- Dane zostaną zaimplementowane w pliku raportu. Ponadto raport może znacznie zwiększyć rozmiar.

- Plik raportu będzie odnosić się do pliku mapy, wdrożenie nie wystąpi. Ten tryb jest przydatny, jeśli masz kilka raportów korzystających z tych samych map.

Mapy z dużym rozmiarem (ponad 30 MB) lub mapy z dużą liczbą wielokątów (ponad 20 000) bardzo spowolnią wykonanie raportu.

Edytor WypełnieniaPo kliknięciu przycisku „Wypełnij”, wchodzimy do edytora wypełnienia. W zakładce „Pędzel” znajdują się 3 właściwości:

Styl pędzla

Styl pędzla ma kilka gotowych formatów:

Pełne – wypełnienie jednym kolorem;

Przejrzyste – jasne tło bez koloru;

Poziomo – poziome linie na całym tle;

Pionowo – pionowe linie na całym tle;

Przekątne do przodu – linie ukośne na całym tle;

Przekątne do tyłu – linie ukośne do tyłu na całym tle;

Skrzyżowane – skrzyżowane linie na całym tle;

Przekątne skrzyżowane – skrzyżowane linie ukośne na całym tle;

Kolor tła Kolor pierwszego planu

Kolor tła, jak również kolor pierwszego planu, można wybrać z gotowej palety kolorów lub ustawić klikając przycisk „Inne”.

Color Editor

W drugiej zakładce mamy ustawienia gradientu dla tła.

Styl gradientu może być poziomy, pionowy, owalny, prostokątny, pionowy z przejściem na inny kolor pośrodku, poziomy z przejściem na inny kolor pośrodku.

Kolor początkowy i końcowy można wybrać z gotowej palety kolorów lub ustawić, klikając przycisk „Inne”.

Styl gradientowy Styl gradientowy

W trzeciej zakładce widzimy edytor Wypełnienia w postaci szkła.

W tym miejscu mamy wybór orientacji: pionowe, poziome, pionowe lustrzane i poziome lustrzane.

Możesz wybrać kolor z gotowej palety lub ustawić ten który potrzebujesz klikając przycisk „Inne”.

Blend– współczynnik łączenia kolorów (na zrzucie ekranu wartość wynosi 0,5).

Pokaż kreskowanie – wyświetl kreskowanie.

Edytor wypełnienia w postaci szkła Edytor wypełnienia w postaci szkła

Wróćmy do edytora map i znajdźmy edytor ramek.

Blok linii: można wybrać styl z oferowanego zakresu, ustawić szerokość linii i wybrać kolor.

Blok ramki: w środku znajduje się próbka ramki i poprzez próbkę lub za pomocą przycisków (ramki ze wszystkich stron, bez ramek lub krawędzie z niektórych stron) możemy wybrać, gdzie zastosować styl linii.

Dodąc cień możemy również określić szerokość i kolor.

Edytor ramek Edytor ramek

Przykład skali kolorów

Przeanalizujmy teraz drugą zakładkę edytora map – Skalę Kolorów.

Kolor ramki można wybrać z gotowej palety kolorów podczas ustawiania szerokości ramek. Ustaw pozycję skali. Na naszym przykładzie mamy lokalizację w prawym dolnym rogu.

Wprowadź nazwę skali w polu „Tekst” i skonfiguruj czcionkę i jej rozmiar, naciskając przycisk „Czcionka…”.

Zakładka „Skala Rozmiaru” nie różni się od „Skali Kolorów”, więc nie będę tego omawiać.

Edytor Map

Po zapisaniu wyniku przejdź do zakładki podglądu i zobacz gotowy wynik.  Mapa nie będzie statyczna; nadal można ją skalować w dowolnym miejscu, a po najechaniu myszką na wybrany obszar (w naszym przypadku na dowolny kraj) cały ten fragment zostanie podświetlony. 

Przykład mapy w raporcie

Tworzenie mapy SHP za pomocą kodu

Saving 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;

Shape nie jest jedynym formatem do pracy z mapami: są też OpenStreetMap (OSM) i GPS eXchange Format, ale o nich opowiem w innych artykułach. 

about product zamów
avatar
Michael Philippenko
VP
Fast Reports Team: Michae Philippenko - VP at Fast Reports
VCL Lazarus FastReport Delphi Map

Add comment
logo
  • 800-985-8986 (English, US)
  • +4930568373928 (German)
  • +55 19 98147-8148 (Portuguese)
  • info@fast-report.com
  • 901 N Pitt Str #325 Alexandria VA 22314
  • Zamów
  • Pobierz
  • Dokumentacja
  • Opinie użytkowników
  • Jak odinstalować nasze produkty
  • FAQ
  • Tutorial Video
  • Forum
  • Articles
  • Our News
  • Prasa o nas
  • Partnerzy
  • Extended licensing
  • Kontakty

© 1998-2023 by Fast Reports Inc.

  • Poufność