현장 서비스와 물류
기술자와 운전자는 통신이 불안한 곳에서 지도가 필요합니다. 한 지역의 타일을 미리 준비하고, 오프라인 라우터로 자동차 경로를 장치에서 계산하고, 오프라인 지오코더로 주소를 찾으세요. 사무실로 돌아오면 같은 코드로 계획된 경로와 배송 구역을 그리고, 각 경로의 PNG를 배송 명세서용으로 렌더링합니다.
- 오프라인에서도 동작
- 오프라인 경로 탐색
- 경로와 구역
- 지도 이미지
브라우저 컨트롤이나 JavaScript 한 줄 없이 애플리케이션에 제대로 된 지도를 넣으세요. sgcMaps는 래스터 및 벡터 타일을 직접 그리고, WMS 및 WMTS 서버의 레이어를 추가하고, 수천 개의 클러스터링 마커, 경로, 영역을 표시하고, 주소를 지오코딩하며, 로컬 타일과 오프라인 라우터로 오프라인에서도 계속 동작합니다.
실제 API와 그 뒤의 도움말 항목을 갖춘 18가지 기능입니다.
지도 컨트롤은 타일 서버, WMS 또는 WMTS 서비스, 벡터 소스, 디스크의 파일에서 모든 타일을 직접 그립니다.
타일과 지도 데이터
대부분의 지도 컴포넌트는 웹 뷰와 JavaScript 라이브러리를 감싸고 있어서 데스크톱 애플리케이션이 결국 브라우저를 함께 배포하게 됩니다. sgcMaps는 그렇지 않습니다. TsgcVCLMap과 TsgcFMXMap은 자체 캔버스에서 타일을 다운로드하고, 캐시하고, 그리며, 마우스 휠 확대/축소와 끌어서 이동을 처리하고, 일반적인 Delphi 이벤트를 발생시킵니다. 지도는 다른 컨트롤과 같은 네이티브 컨트롤입니다. 도킹되고, 폼과 함께 테마가 적용되며, 나머지 코드처럼 디버깅할 수 있습니다. 배포하거나 보안을 챙길 추가 프로세스가 없으며, 애플리케이션이 실행되는 모든 컴퓨터에서 지도가 똑같이 동작합니다.
Layers 컬렉션은 각자 TileSourceType을 가진 TsgcMapLayer 항목을 하나 이상 담습니다TsgcFMXMap은 Windows에서는 Delphi XE6부터, macOS, iOS, Android에서는 Delphi 10.4부터 실행됩니다SgcMapControl, WPF용 TsgcWpfMap, Avalonia 12용 TsgcAvaloniaMap, 헤드리스 MapView가 하나의 엔진을 공유합니다
타일과 지도 데이터
기본 지도를 고르는 데 타일 서버 문서를 읽어야 해서는 안 됩니다. 레이어의 Provider를 설정하고 sgcMapApplyProvider를 호출하면 레이어가 해당 제공자의 URL 템플릿, 최대 확대/축소 수준, 저작권 표시 텍스트를 받습니다. OpenStreetMap, OpenTopoMap, Esri World Imagery, Esri World Street는 키 없이 동작합니다. MapTiler, Thunderforest, Stadia는 직접 발급한 API 키를 사용합니다. 자체 타일 서버는 URL 템플릿 하나면 됩니다. 각 레이어가 자신의 제공자를 가지므로 위성 레이어와 거리 레이어를 한 지도에 두고 사용자가 지도에서 직접 전환하게 할 수 있습니다.
mtpOpenStreetMap, mtpOpenTopoMap, mtpEsriWorldImagery, mtpEsriWorldStreetmtpMapTilerStreets, mtpMapTilerSatellite, mtpThunderforestCycle, mtpThunderforestTransport, mtpStadiaAlidadeSmoothmtpCustom과 URLTemplate으로 모든 {z}/{x}/{y} 서버를 읽습니다ShowLayerSwitcher는 지도에 레이어 버튼을 표시합니다
타일과 지도 데이터
래스터 타일은 확대하면 흐려지고, 스타일을 바꿀 때마다 서버에서 새 이미지를 받아야 합니다. 벡터 타일을 사용하면 컨트롤이 지오메트리를 받아 도로, 물, 건물, 레이블을 직접 그리므로 고해상도 화면과 내보낸 이미지에서도 텍스트가 선명합니다. 레이어가 Mapbox Vector Tile 서버를 가리키게 하고 VectorStyleFile을 비워 두면 내장 스타일을 사용하며, MapLibre 또는 Mapbox GL 스타일 파일을 불러와 브랜드에 맞출 수도 있습니다. 벡터 레이어는 VCL과 FireMonkey 컨트롤 모두에서 동작합니다.
mtsVectorHTTP는 Delphi XE2부터 벡터 타일 서버를 읽습니다mtsVectorMBTiles는 로컬 벡터 MBTiles 파일(오프라인 팩)을 읽습니다mtsVectorPMTiles는 PMTiles 아카이브(로컬 파일 또는 URL)에서 벡터 타일을 읽습니다(오프라인 팩)TsgcMapVectorStyle은 LoadFromFile 또는 LoadFromJSON으로 스타일을 불러옵니다TsgcMapTileSource_MVT에 있습니다타일과 지도 데이터
도시, 공공 사업자, 지도 제작 기관은 토지 이용, 지적, 정사영상을 z/x/y 타일이 아니라 OGC 웹 서비스로 게시합니다. TileSourceType을 mtsWMS 또는 mtsWMTS로 설정하면 레이어가 서비스에서 이미지를 요청하며, 기본 지도 위의 투명 오버레이로 쓰거나 기본 지도 자체로 쓸 수 있습니다. capabilities 리더가 서비스가 제공하는 레이어를 나열하고 레이어를 대신 설정해 주므로, 사용자는 요청 매개변수를 입력하는 대신 제목으로 레이어를 고를 수 있습니다.
mtsWMS는 WMS 1.3.0 또는 1.1.1 GetMap 요청을 보내며, Layers, Styles, ImageFormat, Transparent는 레이어의 WMS 옵션에서 지정합니다mtsWMTS는 레이어의 WMTS 옵션을 통해 KVP 및 REST 서비스를 읽습니다TsgcMapWMSCapabilities와 TsgcMapWMTSCapabilities는 capabilities 문서를 불러오고, ApplyToLayer는 이를 바탕으로 레이어를 설정합니다OnTileError로 전달됩니다TileSourceType.Wms와 TileSourceType.Wmts, 그리고 WmsCapabilities와 WmtsCapabilities무료 Community 에디션을 포함한 모든 에디션에서 Delphi 2009부터 사용할 수 있습니다. 지도는 Web Mercator를 유지합니다. WMS 레이어는 EPSG:3857로 요청되고, WMTS 레이어에는 GoogleMapsCompatible 같은 Web Mercator 타일 매트릭스 세트가 필요하며, GetFeatureInfo는 지원되지 않습니다.
도움말 항목 읽기타일과 지도 데이터 Registered 에디션 전용
지하실의 현장 기술자, 바다 위의 선박, 공장 현장 네트워크는 타일 서버에 의존할 수 없습니다. sgcMaps는 웹에서 읽을 때와 똑같이 디스크에서 타일을 읽습니다. 레이어에 CacheFolder를 지정하면 가져온 모든 타일이 다음 실행을 위해 보관됩니다. 완전한 오프라인 팩은 TsgcMapTileDownloader가 한 영역과 확대/축소 범위를 미리 폴더나 MBTiles 파일로 가져옵니다.
mtsFolder는 PNG 또는 JPEG 타일의 z/x/y 폴더를 읽습니다mtsMBTiles는 Delphi XE7부터(FireDAC SQLite) 래스터 MBTiles 파일을 읽습니다CountTiles는 다운로드를 시작하기 전에 크기를 알려 주며, DelayMS와 OnProgress로 서버에 부담을 주지 않고 진행 상황을 볼 수 있습니다Community 에디션은 z/x/y 타일 폴더를 읽고 레이어별 CacheFolder를 유지합니다. 타일 다운로더, MBTiles 파일, PMTiles 파일은 오프라인 팩에 속합니다.
도움말 항목 읽기타일과 지도 데이터 Registered 에디션 전용
PMTiles 아카이브는 전체 타일 피라미드를 하나의 파일에 담으며, 이 파일을 노트북에 복사하거나 아무 정적 웹 서버에 올릴 수 있어 별도의 타일 서버를 운영할 필요가 없습니다. sgcMaps는 아카이브를 로컬 파일에서 읽거나 HTTP range 요청으로 웹 서버에서 직접 읽고, 읽은 디렉터리를 캐시에 보관하므로 보이는 영역의 타일만 네트워크를 통해 전송됩니다.
mtsPMTiles, Mapbox Vector Tile 아카이브에는 mtsVectorPMTilesTileSourcePath에는 파일 이름 또는 http나 https URL을 지정할 수 있습니다TsgcMapTileSource_PMTiles는 아카이브의 확대/축소 범위, 경계, 중심, 메타데이터를 알려 줍니다esegece.sgcMaps 패키지에서 사용할 수 있습니다PMTiles는 MBTiles와 마찬가지로 오프라인 팩에 속하므로 Registered 에디션에 포함되며 무료 Community 에디션에는 포함되지 않습니다.
도움말 항목 읽기내 데이터를 지도에 올리고, 모든 확대/축소 수준에서 읽기 쉽게 유지하며, 그 뒤의 계산을 처리합니다.
마커, 도형, 지오메트리
차량 대수, 매장 네트워크, 센서 그리드는 금세 겹친 핀 덩어리가 됩니다. 클러스터링을 켜면 가까운 마커가 번호가 붙은 하나의 말풍선으로 합쳐지고, 사용자가 확대하면 다시 나뉘며, 모든 확대/축소 수준에서 다시 계산됩니다. 각 마커는 고유한 팝업, 툴팁, 아이콘을 가지며, 클릭, 드래그, 클러스터 클릭이 이벤트로 전달되므로 지도가 그림이 아니라 워크플로의 일부가 됩니다. 마커는 데이터에서 반복문으로 추가하거나 GeoJSON, GPX, KML 파일에서 가져올 수 있고, ClearMarkers는 한 번의 호출로 초기화합니다.
GridSize, MinClusterSize, ZoomOnClick을 갖춘 MarkerOptions.ClusteringPopupText, TooltipText, IconBitmapOnMarkerClick, OnClusterClick, OnMarkerDragEnd 이벤트BeginUpdate와 EndUpdate로 감싸고, FitToMarkers가 모든 마커가 보이도록 맞춥니다MarkerAtScreen과 ClusterAtScreen이 모든 픽셀을 히트 테스트합니다
마커, 도형, 지오메트리
대부분의 지도 화면에는 핀 이상이 필요합니다. 계획된 배송 경로, 물류 창고가 담당하는 영역, 고객 주변 반경, 주문이 들어오는 지점 같은 것입니다. sgcMaps는 이 모두를 마커와 같은 좌표로 지도 모델의 항목으로 그립니다. 도형을 편집 가능하게 만들면 사용자가 마우스로 영역의 꼭짓점을 끌 수 있고 편집이 끝나면 코드에 알려 줍니다. 레이블은 고유한 글꼴, 색상, 배경으로 좌표에 텍스트를 놓아 영역 이름과 경로 번호가 지도에 붙어 있게 합니다.
Dashed 및 Geodesic 선을 갖춘 AddPolylineAddHole을 갖춘 AddPolygon, 그리고 AddRectangle, AddCircle(RadiusMeters), AddLabelEditable 도형은 OnShapeEdited로 변경을 알립니다TsgcMapHeatmap은 AddPoint로 가중치가 있는 점과 MaxIntensity를 받습니다마커, 도형, 지오메트리
이 차량이 영역 안에 있는가? 가장 가까운 물류 창고는 얼마나 먼가? 경로의 어느 지점이 고객과 가장 가까운가? 이런 질문은 모든 지도 애플리케이션에서 나오며 극지방 근처나 먼 거리에서는 틀리기 쉽습니다. 지오메트리 유닛은 WGS84 구면에서 이를 일반 함수로 해결하며, 지도가 전혀 없는 서비스에서도 호출할 수 있습니다. 함수는 일반 TsgcMapCoord 레코드를 받고, 직접 오버레이를 그릴 때는 sgcMapLatLonToPixel과 sgcMapPixelToLatLon이 화면 좌표와 월드 좌표를 변환합니다.
sgcMapDistance, sgcMapInitialBearing, sgcMapDestinationPointsgcMapPointInPolygon과 sgcMapPointInPolygonWithHolessgcMapNearestPointOnPolyline은 위치를 경로에 맞춥니다sgcMapGeodesicInterpolate와 sgcMapSimplify온라인 제공자로 주소를 찾고 경로를 계획하거나, API 키 없이 완전히 오프라인으로 처리합니다.
검색과 경로 탐색
지오코딩 및 경로 탐색 제공자마다 고유한 REST 형식, 키, 특이점이 있습니다. 서비스 컴포넌트가 이를 감춰 줍니다. 제공자를 고르고, 필요하면 키를 설정하고, 동기 또는 비동기로 같은 메서드를 호출하면 됩니다. 제공자를 바꾸는 것은 속성 변경이지 다시 작성하는 일이 아니며, 결과는 지도에 바로 올릴 수 있는 Delphi 객체로 돌아옵니다. 모든 컴포넌트가 TsgcMapService 기본 클래스를 공유하므로 ApiKey, UserAgent, LastError는 모든 제공자에서 똑같이 동작합니다.
TsgcMapGeocoder: Nominatim, Google, HERE, Azure Maps, Mapbox, OpenRouteService, GeoapifyTsgcMapDirections: OSRM, OpenRouteService, Google Routes, HERE, Azure Maps, Mapbox, GeoapifyTsgcMapPlaces, 그리고 TsgcMapElevation과 TsgcMapTimeZoneGeocodeAsync, GetRouteAsync, SuggestAsync가 UI 응답성을 유지하며, 오류는 OnError로 전달됩니다검색과 경로 탐색 Registered 에디션 전용
온라인 경로 탐색은 현장 앱을 쓰는 바로 그 장소에서 실패하며, 요청마다 비용이 들 수 있습니다. 오프라인 라우터는 OpenStreetMap 추출본에서 한 번 만든 경로 그래프로 자동차, 자전거, 도보 경로를 장치에서 계산합니다. 오프라인 지오코더는 SQLite의 GeoNames 인덱스에서 지명을 검색하고 클릭 지점을 역지오코딩합니다. 둘 다 네트워크, 계정, 요청당 요금 없이 동작합니다. 라우터와 지오코더는 비시각 컴포넌트이므로 Windows 서비스나 콘솔 도구가 화면에 지도 없이 경로와 주소 요청에 응답할 수 있습니다.
TsgcMapOfflineRouter는 .osm.pbf에서 TsgcMapRouteGraphBuilder가 만든 그래프로 GetRoute에 응답합니다sgcMapAddRouteToPolylines는 결과를 지도에 그립니다TsgcMapGeoIndexBuilder가 만든 인덱스 위에서 ReverseGeocode를 지원하는 TsgcMapOfflineGeocoderCommunity 에디션은 온라인 서비스를 사용하며, 오프라인 라우터와 지오코더는 오프라인 팩에 속합니다.
도움말 항목 읽기다른 도구와 지리 데이터를 교환하고, 화면이 없는 곳에서 지도를 렌더링하며, 지도를 휴대폰, WPF 창, Avalonia 창으로 가져갑니다.
파일, 렌더링, 모바일
고객은 GPS 시계의 트랙, GIS 도구로 그린 영역, 다른 시스템의 KML을 보내 옵니다. sgcMaps는 GeoJSON, GPX, KML을 지도 모델로 바로 읽고 쓰므로 가져오기도 호출 한 번, 내보내기도 호출 한 번입니다. GPX 트랙은 통계와 함께 제공되며 고도에 따라 색을 입힐 수 있고, 스트리밍 리더가 대용량 OpenStreetMap 추출본을 메모리에 올리지 않고 처리합니다. 내보내기는 같은 함수를 반대로 사용하므로 사용자가 지도에 그린 영역을 GeoJSON이나 KML로 저장해 다른 GIS 도구에서 열 수 있습니다.
sgcMapLoadGeoJSONFile과 sgcMapSaveGeoJSONFileTrackStats(TotalAscent, TotalDescent)와 ColorByElevation을 갖춘 TsgcMapGPXsgcMapLoadKMLFile과 sgcMapSaveKMLFilesgcMapGeoJSONAsText는 지도의 GeoJSON을 문자열로 반환합니다파일, 렌더링, 모바일
공개 지리 데이터는 여전히 Esri shapefile로 배포되는 경우가 많고, 공간 데이터베이스는 Well Known Text로 지오메트리를 교환합니다. TsgcMapShapefile은 shapefile의 점, 선, 다각형을 속성 테이블과 함께 가져오므로 모든 마커가 자신이 유래한 레코드를 보여 줄 수 있습니다. WKT와 PostGIS가 쓰는 EWKT도 읽고 쓸 수 있어, 지도와 데이터베이스의 지오메트리 열 사이에서 영역을 옮기는 가장 간단한 방법입니다.
LoadFromFile은 .shp를 .shx, .dbf, .prj, .cpg 파일과 함께 읽습니다. OnItem은 각 속성 행을 받고, LabelField는 점의 팝업 텍스트를 지정합니다OnTransform 핸들러가 좌표를 변환하지 않는 한 명확한 오류를 발생시킵니다sgcMapLoadWKT와 TsgcMapWKT는 POINT, LINESTRING, POLYGON, 그 MULTI 형식, GEOMETRYCOLLECTION을 도 단위 또는 Web Mercator 미터 단위로 읽고, AsText는 지도를 다시 WKT로 씁니다Transform 콜백을 갖춘 ShapefileFormat과 WktFormat
파일, 렌더링, 모바일
경로가 있는 배송 명세서, 오늘의 사고가 담긴 일일 보고서, 웹 페이지 썸네일처럼 창에 표시되지 않는 지도도 많습니다. 같은 컨트롤이 화면에 보이지 않은 채로 콘솔 애플리케이션이나 Windows 서비스에서 PNG나 비트맵으로 렌더링합니다. 이미지를 보내기 전에 모든 타일이 도착했는지 확인할 수 있어서, 느린 타일 서버 때문에 고객 문서에 회색 사각형이 들어가는 일이 없습니다. 서버 측 렌더링은 대화형 컨트롤과 같은 레이어, 마커, 도형을 사용하므로 화면에서 디자인한 지도가 PNG에서도 똑같이 보입니다.
SaveToPNG와 SaveToPNGFileRenderToBitmap과 SaveToBMPFileLastRenderMissingTiles는 사용할 수 없었던 타일을 알려 줍니다MapView.RenderToPng도 Linux에서 실행됩니다파일, 렌더링, 모바일
배차 담당자는 Windows 데스크톱에서 계획하고 운전자는 휴대폰에서 그 계획을 따릅니다. TsgcFMXMap은 같은 모델, 레이어, 마커, 도형, 서비스를 Windows, macOS, iOS, Android의 FireMonkey로 가져오므로 VCL 지도용으로 작성한 코드를 그대로 사용할 수 있습니다. TsgcMapLocation은 장치의 위치를 읽어 지도가 사용자를 중심으로 따라가게 합니다. 레이어별 타일 캐시는 모바일에서도 동작하므로 휴대폰은 이미 불러온 지역을 계속 표시합니다.
TsgcFMXMap은 TsgcVCLMap과 같은 컬렉션을 가집니다TsgcMapLocationsgcMaps(코어), sgcMapsVCL, sgcMapsFMX로 나뉘어 FireMonkey 애플리케이션이 더 이상 VCL 패키지를 로드하지 않습니다파일, 렌더링, 모바일
TsgcWpfMap과 TsgcAvaloniaMap은 .NET 지도 엔진을 WPF와 Avalonia 12로 가져오며, WinForms 컨트롤의 기능을 그대로 제공합니다. 마우스, 터치, 키보드로 이동과 확대/축소, 레이어, 마커, 도형, 인쇄, PDF 내보내기, UI Automation을 지원합니다. 레이어와 마커는 sgc 접두사로 XAML에 선언하고, 뷰 모델의 컬렉션은 ItemsSource를 통해 마커가 됩니다. 컬렉션에 매장을 추가하면 지도에 표시되고, 마커를 끌면 새 위치가 다시 기록됩니다.
LatitudeMember, LongitudeMember, TooltipMember, PopupMember, ColorMember, DraggableMember가 사용자의 속성을 마커에 연결합니다SelectedItem, Zoom, Bearing, CenterLatitude, CenterLongitude는 양방향으로 바인딩됩니다esegece.sgcMaps.Wpf(net8.0-windows부터 net10.0-windows까지)와 esegece.sgcMaps.Avalonia(net8.0부터 net10.0까지)는 모두 무료 Community 패키지가 있습니다미리 보기에는 프린터와 PDF가 받는 내용이 그대로 표시됩니다.
인쇄, 미리 보기, PDF
지도는 현재 보기의 그림으로 한 페이지에 인쇄됩니다. 영역은 컨트롤과 같으며 중심, 확대/축소 수준, 타일, 레이어, 마커, 도형이 포함됩니다. 축척 막대와 출처 표시는 인쇄되고, 확대/축소 버튼, 레이어 전환기, 나침반은 인쇄되지 않으며, 인쇄가 보기를 움직이는 일은 없습니다.
Print는 인쇄 대화 상자를 표시하거나 기본 프린터로 바로 인쇄하고, ShowPrintPreview는 페이지 이동, 확대/축소, 페이지 설정, 인쇄, PDF 내보내기를 갖춘 미리 보기를 엽니다PrintSettings는 용지, 방향, 여백, 배율, 머리글과 바닥글 텍스트를 담고 있으며, 프린터, 미리 보기, PDF가 모두 이를 사용합니다ExportToPDF는 페이지를 태그가 지정된 그림 하나(기본 192 dpi)로 기록하며, 중심, 확대/축소 수준, 레이어와 마커 수를 알려 주는 대체 텍스트를 붙입니다TsgcUIPDFOptions의 PDFALevel은 보관용으로 PDF/A-2a 또는 PDF/A-3a를 추가하며, 단독으로도 PDF/UA와 함께도 사용할 수 있습니다인쇄와 미리 보기는 무료 Community 에디션을 포함한 모든 에디션에서 VCL, FireMonkey, WinForms, WPF, Avalonia에서 사용할 수 있습니다. FireMonkey에서는 인쇄가 Windows와 macOS에서, 미리 보기와 PDF 내보내기는 모든 플랫폼에서 동작합니다. PDF 내보내기에는 sgcUIPDF 브리지와 라이선스가 있는 sgcPDF(.NET에서는 NuGet 패키지 esegece.sgcUICore.sgcPDF)가 필요하므로 Community 에디션에는 포함되지 않습니다.
UI Automation을 통한 화면 읽기 프로그램과 키보드 지원, 별도 설정이 필요 없습니다.
접근성
sgcMaps는 지도를 대체 텍스트와 함께, 마커를 목록으로, 레이어를 목록으로 Microsoft UI Automation에 노출하며, 각 레이어는 표시 여부를 보고합니다. 마커에는 키보드로 도달할 수 있습니다.
접근성은 무료 Community 에디션을 포함한 모든 에디션에서 기본으로 켜져 있으며, Delphi 7부터 Delphi 13까지 모든 Delphi 및 C++Builder 버전의 VCL, Windows의 FireMonkey, 그리고 WinForms, WPF, Avalonia에서 지원됩니다. Delphi와 C++Builder에서는 AccessibleName과 AccessibleDescription이 UI Automation에 노출되는 이름과 설명을 설정하고, .NET에서는 각 프레임워크의 표준 접근성 이름과 도움말 텍스트가 같은 역할을 합니다. 접근성 적합성 보고서를 참조하세요(새 WPF 및 Avalonia 지도 컨트롤은 아직 다루지 않습니다). 지도 이미지는 중심과 확대/축소 수준으로만 설명되며, 지도 이미지가 제공자의 타일 이미지이기 때문에 지도 렌더러는 Windows 고대비를 따르지 않습니다.
sgcUI 제품군 데모 속의 sgcMaps: 내장 시뮬레이션 데이터로 오프라인에서 실행되는 완전한 애플리케이션입니다.
차량 48대, 그 경로, 폐쇄 구역 다각형을 한 지도에.
Altamira Fleet →
거리 수준으로 보는 도시 배송 라운드와 배송지.
Altamira Fleet →
상태 마커로 표시한 공장 네 곳과 사이트별 생산량.
Altamira Plant →
RAG 상태별 색상의 마커로 표시한 프로젝트 사이트.
Altamira PMO →
기술자와 운전자는 통신이 불안한 곳에서 지도가 필요합니다. 한 지역의 타일을 미리 준비하고, 오프라인 라우터로 자동차 경로를 장치에서 계산하고, 오프라인 지오코더로 주소를 찾으세요. 사무실로 돌아오면 같은 코드로 계획된 경로와 배송 구역을 그리고, 각 경로의 PNG를 배송 명세서용으로 렌더링합니다.
관제실은 수백 대의 차량, 기계, 센서를 한꺼번에 지켜봅니다. 클러스터링은 국가 수준에서 지도를 읽기 쉽게 유지하고 거리 수준에서는 개별 핀으로 나뉩니다. 히트맵은 사고가 집중되는 곳을 보여 주고, 다각형 내 점 판정을 이용한 지오펜스 검사는 경보를 발생시키며, 마커 클릭 이벤트는 내 폼에서 자산의 레코드를 엽니다.
계획 도구, 스포츠 앱, 측량 소프트웨어는 GPX 트랙, KML 레이어, GeoJSON 영역을 기반으로 합니다. sgcMaps는 세 형식을 모두 가져오고 내보내며, 트랙 통계와 고도 색상을 표시하고, 결과를 지형도 기본 지도 위에 올립니다. FireMonkey 컨트롤은 같은 기능을 현장의 태블릿이나 휴대폰으로 가져갑니다. 트랙 통계는 경로의 총 상승과 하강을 한눈에 보여 줍니다.
Delphi, C++ Builder, C#에서 같은 API를 사용합니다. OpenStreetMap 타일, 마커 세 개, 측지선, 반경을 마커에 맞춰 표시하고 PNG로 저장합니다.
코드로 만든 VCL 지도: 캐시되는 OpenStreetMap 레이어, 마커, 측지선, 원을 만든 다음 결과를 PNG로 저장합니다.
uses
SysUtils, Controls, Graphics, sgcMaps_Classes, sgcMaps_Providers,
sgcMaps_Geometry, sgcMaps_VCL;
// OpenStreetMap with cached tiles, three capitals, a geodesic flight line
// and a 300 km radius, fitted to the markers and saved as PNG.
procedure BuildMap(aOwner: TWinControl);
var
oMap: TsgcVCLMap;
oLayer: TsgcMapLayer;
oLine: TsgcMapPolyline;
begin
oMap := TsgcVCLMap.Create(aOwner);
oMap.Parent := aOwner;
oMap.Align := alClient;
oLayer := oMap.Layers.Add;
oLayer.Name := 'OpenStreetMap';
oLayer.Provider := mtpOpenStreetMap;
sgcMapApplyProvider(oLayer);
oLayer.CacheFolder := ExtractFilePath(ParamStr(0)) + 'tile_cache';
oMap.AddMarker(48.8566, 2.3522, 'Paris', 'France');
oMap.AddMarker(52.5200, 13.4050, 'Berlin', 'Germany');
oMap.AddMarker(41.9028, 12.4964, 'Rome', 'Italy');
oMap.MarkerOptions.Clustering.Enabled := True;
oLine := oMap.AddPolyline;
oLine.Geodesic := True;
oLine.Dashed := True;
oLine.Color := clRed;
oLine.AddPoint(48.8566, 2.3522);
oLine.AddPoint(52.5200, 13.4050);
oMap.AddCircle(48.8566, 2.3522, 300000).FillOpacity := 0.15;
oMap.FitToMarkers(40);
oMap.AddLabel(50.7, 8, Format('Paris to Berlin: %.0f km',
[sgcMapDistance(48.8566, 2.3522, 52.52, 13.405) / 1000]));
oMap.SaveToPNG('europe.png', 1200, 800);
end;생성된 sgcMaps 헤더를 사용하는 C++ Builder의 같은 지도.
#include <vcl.h>
#include "sgcMaps_Classes.hpp"
#include "sgcMaps_Providers.hpp"
#include "sgcMaps_Geometry.hpp"
#include "sgcMaps_VCL.hpp"
// OpenStreetMap with cached tiles, three capitals, a geodesic flight line
// and a 300 km radius, fitted to the markers and saved as PNG.
void BuildMap(TWinControl *aOwner)
{
TsgcVCLMap *oMap = new TsgcVCLMap(aOwner);
oMap->Parent = aOwner;
oMap->Align = alClient;
TsgcMapLayer *oLayer = oMap->Layers->Add();
oLayer->Name = "OpenStreetMap";
oLayer->Provider = mtpOpenStreetMap;
sgcMapApplyProvider(oLayer);
oLayer->CacheFolder = ExtractFilePath(ParamStr(0)) + "tile_cache";
oMap->AddMarker(48.8566, 2.3522, "Paris", "France");
oMap->AddMarker(52.5200, 13.4050, "Berlin", "Germany");
oMap->AddMarker(41.9028, 12.4964, "Rome", "Italy");
oMap->MarkerOptions->Clustering->Enabled = true;
TsgcMapPolyline *oLine = oMap->AddPolyline();
oLine->Geodesic = true;
oLine->Dashed = true;
oLine->Color = clRed;
oLine->AddPoint(48.8566, 2.3522);
oLine->AddPoint(52.5200, 13.4050);
oMap->AddCircle(48.8566, 2.3522, 300000)->FillOpacity = 0.15;
oMap->FitToMarkers(40);
int iKm = (int)(sgcMapDistance(48.8566, 2.3522, 52.52, 13.405) / 1000);
oMap->AddLabel(50.7, 8, "Paris to Berlin: " + IntToStr(iKm) + " km");
oMap->SaveToPNG("europe.png", 1200, 800, false);
}헤드리스 MapView는 Windows나 Linux에서 같은 지도를 PNG 파일로 렌더링합니다.
using System;
using System.IO;
using esegece.sgcMaps;
using esegece.sgcMaps.Rendering;
// OpenStreetMap with cached tiles, three capitals, a geodesic flight line
// and a 300 km radius, fitted to the markers and saved as PNG (no window).
public static class EuropeMap
{
public static void Render()
{
var oMap = new MapView();
Layer oLayer = oMap.Layers.Add();
oLayer.Name = "OpenStreetMap";
oLayer.Provider = TileProvider.OpenStreetMap;
MapProviders.ApplyProvider(oLayer);
oLayer.CacheFolder = Path.Combine(AppContext.BaseDirectory, "tile_cache");
oMap.AddMarker(48.8566, 2.3522, "Paris", "France");
oMap.AddMarker(52.5200, 13.4050, "Berlin", "Germany");
oMap.AddMarker(41.9028, 12.4964, "Rome", "Italy");
oMap.MarkerOptions.Clustering.Enabled = true;
Polyline oLine = oMap.AddPolyline();
oLine.Geodesic = true;
oLine.Dashed = true;
oLine.Color = MapColors.Red;
oLine.AddPoint(48.8566, 2.3522);
oLine.AddPoint(52.5200, 13.4050);
oMap.AddCircle(48.8566, 2.3522, 300000).FillOpacity = 0.15;
oMap.FitToMarkers(40);
double vKm = MapGeometry.Distance(48.8566, 2.3522, 52.52, 13.405) / 1000;
oMap.AddLabel(50.7, 8, $"Paris to Berlin: {vKm:F0} km");
oMap.RenderToPng("europe.png", 1200, 800);
}
}dotnet add package esegece.sgcMaps.RenderingDelphi에서 WMS 오버레이와 속성을 포함한 shapefile 가져오기, 그리고 지도, 레이어, 마커를 XAML로 선언한 WPF 창.
자체 타일 캐시를 가진 투명 WMS 오버레이와, 속성 테이블에 따라 공원을 녹색으로 채우는 shapefile. 둘 다 모든 에디션에서 동작합니다.
uses
Classes, SysUtils, Graphics, sgcMaps_Classes, sgcMaps_VCL, sgcMaps_Shapefile;
procedure TForm2.AddWMSLayer;
var
oLayer: TsgcMapLayer;
begin
// an overlay drawn by a WMS server
oLayer := sgcVCLMap1.Layers.Add;
oLayer.Name := 'Land use';
oLayer.TileSourceType := mtsWMS;
oLayer.URLTemplate := 'https://maps.example.com/geoserver/wms';
oLayer.WMS.Layers := 'landuse,rivers';
oLayer.WMS.Version := mwv130;
oLayer.WMS.ImageFormat := 'image/png';
oLayer.WMS.Transparent := True;
oLayer.IsBaseLayer := False;
oLayer.Opacity := 0.7;
oLayer.CacheFolder := ExtractFilePath(ParamStr(0)) + 'cache\landuse';
end;
procedure TForm2.ImportLandUse;
var
oShp: TsgcMapShapefile;
begin
oShp := TsgcMapShapefile.Create;
try
// points get the NAME field as popup text (the field must exist)
oShp.LabelField := 'NAME';
oShp.OnItem := ShapefileItem;
// reads landuse.shx, .dbf, .prj and .cpg next to the .shp
oShp.LoadFromFile('C:\Data\landuse.shp', sgcVCLMap1.Markers,
sgcVCLMap1.Polylines, sgcVCLMap1.Polygons);
memoLog.Lines.Add(Format('%d records, %d skipped, fields: %s',
[oShp.RecordCount, oShp.SkippedCount, oShp.Fields.CommaText]));
finally
oShp.Free;
end;
end;
procedure TForm2.ShapefileItem(Sender: TObject; aRecord: Integer;
aAttributes: TStrings; aItem: TCollectionItem);
begin
// aAttributes holds the .dbf row as Name=Value lines
if (aItem is TsgcMapPolygon) and (aAttributes.Values['USE'] = 'PARK') then
TsgcMapPolygon(aItem).FillColor := clGreen;
end;TsgcWpfMap의 레이어와 마커는 sgc 접두사로 XAML에 선언합니다. 코드 비하인드에서 타일 캐시, 선, 이벤트 세 개를 추가합니다.
<Window x:Class="MapQuickStartWpf.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sgc="https://www.esegece.com/sgcui"
Title="sgcMaps WPF Quick Start" Width="1000" Height="700">
<sgc:TsgcWpfMap x:Name="MainMap" CenterLatitude="40.4168" CenterLongitude="-3.7038" Zoom="14">
<sgc:TsgcWpfMap.Layers>
<sgc:Layer Name="OpenStreetMap" Provider="OpenStreetMap" />
</sgc:TsgcWpfMap.Layers>
<sgc:TsgcWpfMap.Markers>
<sgc:Marker Latitude="40.4168" Longitude="-3.7038" PopupText="Puerta del Sol"
TooltipText="Drag me" Draggable="True" Color="#FFE53935" />
</sgc:TsgcWpfMap.Markers>
</sgc:TsgcWpfMap>
</Window>using System;
using System.IO;
using System.Windows;
using esegece.sgcMaps;
namespace MapQuickStartWpf
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
// cache the tiles of the layer declared in XAML
MainMap.Layers[0].CacheFolder = Path.Combine(AppContext.BaseDirectory, "tile_cache");
// a line from Puerta del Sol to Retiro Park
Polyline line = MainMap.Map.AddPolyline();
line.AddPoint(40.4168, -3.7038);
line.AddPoint(40.4153, -3.6844);
line.Color = MapColors.Blue;
line.Width = 4;
MainMap.MapClick += (s, e) => Title = $"Click at {e.Latitude:F5}, {e.Longitude:F5}";
MainMap.MarkerDragEnd += (s, e) => Title = $"Dropped at {e.Item.Latitude:F5}, {e.Item.Longitude:F5}";
MainMap.TileError += (s, e) => Title = $"Tile {e.Zoom}/{e.X}/{e.Y}: {e.Error}";
}
}
}dotnet add package esegece.sgcMaps.WpfsgcMaps에는 Delphi 데모 11개와 .NET 데모 8개가 포함되어 있습니다. C++ Builder 데모 프로젝트는 없습니다.
폴더, MBTiles, 온라인 타일, 마커와 도형, GeoJSON, GPX, KML 가져오기.
제공자와 API 키, 마커 클러스터링, 도형 편집, 히트맵, 이미지 내보내기.
온라인 제공자를 사용한 장소 검색, 지오코딩, 길 안내, 고도, 시간대, 장치 위치. Delphi XE8 이상.
GeoNames 인덱스와 OpenStreetMap 경로 그래프를 만든 다음, 네트워크 없이 장소를 검색하고 자동차, 자전거, 도보 경로를 탐색합니다.
창 없이 지도를 PNG 또는 BMP 파일로 렌더링하는 콘솔 프로그램.
Windows, macOS, iOS, Android용 타일, 마커, 장치 위치를 갖춘 FireMonkey 지도. Delphi XE6 이상.
내장 스타일 또는 직접 만든 스타일 파일로 그린 벡터 타일 서버이며, 모든 확대/축소 수준에서 레이블이 선명합니다.
휴대폰과 태블릿용으로 만든 FireMonkey 지도: 한 손가락 이동, 핀치 확대/축소, 큰 확대/축소 버튼, 정확도 원이 있는 내 위치, 장소 목록. Delphi 10.4 이상.
WMS 또는 WMTS capabilities 문서를 URL이나 파일에서 불러와 레이어를 나열하고, 선택한 레이어를 투명도 슬라이더와 함께 OpenStreetMap 위의 오버레이로 추가합니다. Delphi 2009 이상.
래스터 또는 벡터 PMTiles 아카이브를 파일이나 URL에서 열어 헤더와 메타데이터를 보여 주고, 아카이브를 중심으로 한 레이어로 추가합니다. Delphi XE2 이상.
속성 테이블이 있는 shapefile을 가져오고, 클릭한 마커의 레코드를 보여 주며, WKT를 가져오고 내보냅니다.
WinForms 창의 .NET SgcMapControl이며 제공자, 마커, 도형을 보여 줍니다.
XAML로 선언한 WPF 지도: 마크업의 기본 레이어와 마커, ItemsSource로 마커에 바인딩한 매장, 확대/축소 및 방위 슬라이더, 인쇄와 PDF 내보내기.
Avalonia 12 지도 컨트롤과 컴파일된 바인딩으로 만든 같은 창.
OpenStreetMap 기본 레이어와 WMS 또는 WMTS 서비스의 오버레이 하나를 가진 WinForms 지도 컨트롤: URL이나 파일에서 capabilities 문서를 불러오고, 레이어를 나열하고, 선택한 레이어를 투명도 슬라이더와 함께 추가하며, 타일 오류를 표시합니다.
래스터 또는 벡터 PMTiles 아카이브의 레이어를 가진 WinForms 지도 컨트롤: 파일이나 URL에서 열고, 헤더와 메타데이터를 보여 주며, 아카이브를 중심으로 지도를 표시합니다.
shapefile을 속성 테이블과 함께 가져오고 클릭한 마커의 레코드를 보여 주는 WinForms 지도 컨트롤. 오버레이의 WKT 가져오기와 내보내기도 지원합니다.
.NET 오프라인 패키지: 로컬 데이터 파일을 사용하는 오프라인 타일, 경로 탐색, 지오코딩.
헤드리스 MapView로 지도를 PNG로 렌더링하는 .NET 콘솔이며, Windows나 Linux에서 실행됩니다.
Delphi(VCL)용 QuickStart 데모 다섯 개가 Demos\Maps\00.QuickStart에 포함되어 있습니다. PDF 가이드가 단계별로 안내하는 내용은 다음과 같습니다. 마커가 있는 첫 번째 지도, 코드로 추가하는 마커와 레이블, 도형, 지도 이벤트, 매장 찾기.
무료 .NET Community 에디션(NuGet의 esegece.sgcMaps.Community, esegece.sgcMaps.Rendering.Community, esegece.sgcMaps.WinForms.Community, esegece.sgcMaps.Wpf.Community, esegece.sgcMaps.Avalonia.Community)에는 오프라인 팩을 제외한 모든 기능이 있습니다. esegece.sgcMaps.Offline 패키지는 Registered 전용입니다. 프로젝트는 Community 패키지 또는 Registered 패키지 중 하나만 참조해야 하며 둘을 함께 참조해서는 안 됩니다.
| 기능 | Community (무료) | Registered 에디션 |
|---|---|---|
| VCL, FireMonkey, WinForms, WPF, Avalonia 지도 컨트롤 | ✓ | ✓ |
| 타일 제공자, HTTP 및 벡터 타일 서버 | ✓ | ✓ |
| WMS 및 WMTS 레이어 | ✓ | ✓ |
| z/x/y 타일 폴더와 레이어별 타일 캐시 | ✓ | ✓ |
| 마커, 클러스터링, 도형, 레이블, 히트맵 | ✓ | ✓ |
| 지오메트리 함수 | ✓ | ✓ |
| GeoJSON, GPX, KML 가져오기와 내보내기 | ✓ | ✓ |
| Shapefile 가져오기, WKT 가져오기 및 내보내기 | ✓ | ✓ |
| 온라인 지오코딩, 길 안내, 장소, 고도, 시간대 | ✓ | ✓ |
| PNG로 정적 렌더링 | ✓ | ✓ |
| 오프라인 팩용 타일 다운로더 | − | ✓ |
| MBTiles 및 PMTiles 파일(래스터 및 벡터) | − | ✓ |
| 오프라인 라우터와 오프라인 지오코더 | − | ✓ |
VCL과 FireMonkey용 지도 컨트롤, 그리고 디스크의 타일을 읽는 Lazarus LCL 컨트롤.
모든 프레임워크가 공유하는 Layers, Markers, Polylines, Polygons, Rectangles, Circles, Labels, Heatmaps.
TsgcMapGeocoder, TsgcMapDirections, TsgcMapPlaces, TsgcMapElevation and TsgcMapTimeZone.
TsgcMapRouteCalculator, TsgcMapOfflineRouter, TsgcMapOfflineGeocoder, TsgcMapGeoIndexBuilder and TsgcMapTileDownloader.
TsgcMapShapefile, TsgcMapWKT, TsgcMapWMSCapabilities, TsgcMapWMTSCapabilities, TsgcMapTileSource_PMTiles.
장치 위치, 그리고 sgcMapDistance, 방위각, 목적지 지점, 측지 보간, 다각형 내 점 판정, 선 단순화.
WinForms용 SgcMapControl, WPF용 TsgcWpfMap, Avalonia 12용 TsgcAvaloniaMap, 그리고 PNG로 렌더링하는 헤드리스 엔진 MapView이며 Linux에서도 동작합니다.
| 대상 | 컴포넌트 | 플랫폼 |
|---|---|---|
| Delphi 7부터 13, VCL | TsgcVCLMap과 모델 | Win32, XE2부터 Win64, Delphi 13에서는 ARM64EC |
| Delphi XE6부터 13, FireMonkey | TsgcFMXMap | Windows는 XE6부터, macOS, iOS, Android는 Delphi 10.4부터(macOS ARM은 Delphi 11부터), 장치 위치는 Windows, Android, iOS, macOS |
| Delphi 10.4부터 13, Linux 64비트 | 프레임워크에 독립적인 코어, 지도 컨트롤 없음 | 콘솔 및 서버 애플리케이션의 타일 소스, 서비스, 파일 형식, 오프라인 데이터 |
| C++ Builder 2007부터 13 | TsgcVCLMap, XE6부터 TsgcFMXMap, 모델 | Windows 전용: Win32, XE3부터 Win64, C++ Builder 13의 Win64x, 생성된 .hpp 헤더와 정적 라이브러리 |
| Lazarus | LCL 지도 컨트롤 | 디스크의 타일만 사용하며 타일을 다운로드할 수 없음 |
| .NET 8, 9, 10 | SgcMapControl, TsgcWpfMap, TsgcAvaloniaMap, MapView | WinForms와 WPF(net8.0-windows, net9.0-windows, net10.0-windows), Avalonia 12(net8.0, net9.0, net10.0), Windows와 Linux의 헤드리스 PNG |
Delphi 패키지: sgcMaps는 프레임워크에 독립적인 코어, sgcMapsVCL은 VCL 지도, sgcMapsFMX는 FireMonkey 지도를 담고 있으며, 디자인 타임 패키지는 dclsgcMaps와 dclsgcMapsFMX입니다. 런타임 패키지로 빌드하면서 sgcMaps를 나열하는 프로젝트는 sgcMapsVCL 또는 sgcMapsFMX를 추가합니다. 패키지와 플랫폼을 참조하세요.
아니요. 타일, 마커, 도형은 컨트롤이 네이티브로 그리므로 웹 뷰, JavaScript 라이브러리, 배포할 브라우저 런타임이 없습니다.
OpenStreetMap, OpenTopoMap, Esri 타일과 오프라인 라우터 및 지오코더에는 필요하지 않습니다. MapTiler, Thunderforest, Stadia 타일과 상용 지오코딩 및 경로 탐색 제공자는 직접 발급한 키를 사용합니다. 각 제공자에는 고유한 이용 약관이 있으며 애플리케이션이 이를 지켜야 합니다.
예. 타일은 z/x/y 폴더, 레이어별 캐시, MBTiles 파일, PMTiles 아카이브에서, 경로는 TsgcMapOfflineRouter에서, 주소 검색은 TsgcMapOfflineGeocoder에서 가져옵니다. MBTiles, PMTiles, 타일 다운로더, 오프라인 라우터와 지오코더는 Registered 에디션의 오프라인 팩에 속합니다.
모델, VCL 컨트롤, shapefile, WKT는 Delphi 7과 C++ Builder 2007부터 동작합니다. 일부 기능은 최소 버전이 더 높습니다. PNG 출력, 타일 서버, WMS, WMTS는 Delphi 2009부터, 벡터 타일, PMTiles, 오프라인 라우터는 XE2부터, Windows의 FireMonkey와 GeoJSON은 XE6부터, MBTiles와 오프라인 지오코더는 XE7부터, 온라인 서비스는 XE8부터입니다. macOS, iOS, Android의 FireMonkey와 Linux 64비트의 코어 유닛에는 Delphi 10.4 이상이 필요합니다.
예. TsgcWpfMap(NuGet esegece.sgcMaps.Wpf)과 TsgcAvaloniaMap(esegece.sgcMaps.Avalonia, Avalonia 12)은 WinForms SgcMapControl과 같은 엔진을 호스팅합니다. 레이어와 마커를 XAML에 선언하고, 마커를 ItemsSource로 컬렉션에 바인딩하고, 뷰를 양방향으로 바인딩할 수 있습니다. 둘 다 무료 Community 에디션에도 포함됩니다. WPF 빠른 시작과 Avalonia 빠른 시작을 참조하세요.
데모 프로젝트는 Delphi 전용이지만 컴포넌트는 C++ Builder 2007부터 13에 설치되며 똑같이 동작합니다. 위 코드 섹션의 C++ Builder 탭에서 생성된 헤더로 만든 같은 지도를 볼 수 있습니다.
예. Community 에디션은 연간 총매출이 100만 유로 미만이고 개발자가 5명 이하인 개인과 조직에 무료이며, 오프라인 팩을 제외한 모든 기능이 있습니다. .NET 패키지는 esegece.sgcMaps.Community, esegece.sgcMaps.Rendering.Community, esegece.sgcMaps.WinForms.Community, esegece.sgcMaps.Wpf.Community, esegece.sgcMaps.Avalonia.Community입니다. WMS, WMTS, shapefile, WKT, WPF 및 Avalonia 컨트롤도 Community에 포함됩니다. 더 큰 조직에는 Registered 라이선스가 필요합니다.
소개, 개요, VCL 빠른 시작, TsgcVCLMap, 타일과 레이어, 마커와 클러스터링, 오프라인 경로 탐색, 정적 렌더링, WMS, WMTS, PMTiles, Shapefile, WKT, 패키지, 플랫폼, 데모.
.NET 개요, WinForms 빠른 시작, WPF 빠른 시작, Avalonia 빠른 시작, XAML, 데이터 바인딩, 헤드리스 렌더링, 오프라인 데이터, WMS와 WMTS, PMTiles, Shapefile과 WKT.
Delphi, C++ Builder, .NET용이며 sgcUI 제품 전체를 다룹니다.