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.
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:
- 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.
- 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.
- 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.
Powinien pojawić się edytor map. Pierwsza zakładka zawiera informacje ogólne.
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:
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.
Po 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 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, jak również kolor pierwszego planu, można wybrać z gotowej palety kolorów lub ustawić klikając przycisk „Inne”.
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”.
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.
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.
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ć.
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.
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.