Karte

Map Plott Dataverse-Zeilen aus einer Ansicht oder Abfrage auf deren Breiten- und Längengraden, neben eigenen Markern, Linien, Flächen und Kreisen. Eine Komponente, dieselbe bei Blazor und React, gezeichnet vom von dir gewählten Anbieter: Azure Maps, Esri, Google, OpenStreetMap oder jeder beliebige MapLibre-Stil.

Büros, eine Route und Bereiche

Zwölf Büros als Markierungen, eine Route, eine Lieferzone und eine Verkaufsregion. Markierungen, die dicht beieinander stehen, bilden Cluster, die beim Anklicken heranzoomen. Klicken Sie auf ein Büro für das Popup, hier der eigene Inhalt der Seite; die Route und die Bereiche öffnen keine, da die Seite selbst auf ihre Klicks antwortet, und die Zeile unter der Karte zeigt, was sie gehört hat.

React-Beispiel Blazor-Beispiel React TypeScript Razor
Lade die Karte...

Zuletzt klickt: Noch nichts

Konten und Kontakte aus Dataverse

Die aktiven Konten, gefärbt nach ihrem Beziehungstyp oder mit dem Wechsel der Kontakte, werden von einer FetchXML-Abfrage mit den Berechtigungen des Besuchers gelesen und auf ihrem Breiten- und Längengrad platziert. Klicken Sie auf eines für das Popup: die anderen Spalten der Abfrage unter dem Namen der Zeile, wodurch die Seite geöffnet wird. Das Feld über der Karte findet eine Adresse beim Anbieter des Portals und pinnt sie.

React-Beispiel Blazor-Beispiel React TypeScript Razor
  • Kunde
  • Investor
  • Partner
  • Aussichten
  • Wiederverkäufer
  • Anbieter
Lade die Karte...

Zuletzt klickt: Noch nichts
Adresse gefunden: Suche nach einem im Feld über der Karte

Anbieter

Die Konfiguration des Portals nennt seinen Anbieter und enthält die Schlüssel jedes Anbieters im Abschnitt PowerPortalsPro:Maps , daher muss eine Karte keinen nennen und keine Seite enthält einen Schlüssel. Marker, Cluster, Popups und Klicks funktionieren bei jedem Anbieter gleich:

  • Azure Maps: überhaupt kein Schlüssel, da das Portal mit seiner eigenen Identität (unten) eingeloggt wird. Seine Zuordnung wird wie von den Bedingungen angegeben dargestellt.
  • Esri: ein ArcGIS-API-Schlüssel in Esri:ApiKey, und jeder ArcGIS-Basemap-Stil anstelle von Straßen.
  • Google: Ein JavaScript-API-Schlüssel für Maps in Google:ApiKey, und eine Karten-ID für eine Karte, die in Google Cloud gestaltet ist.
  • OpenStreetMap: kein Schlüssel, und der Provider, wenn keiner gesetzt ist, für Entwicklung und leichte Nutzung. Die Tile-Policy von OpenStreetMap schließt starke Nutzung aus; benennen Sie Ihren eigenen Tile-Server OpenStreetMap:TileUrl für die Produktion.
  • MapLibre: jede MapLibre-Stil- oder Rasterkachel-URL in MapLibre:StyleUrl oder MapLibre:TileUrl, wie MapTiler, OpenFreeMap, Stadia oder Ihr eigener Server.

Die Schlüssel von Esri und Google erreichen den Browser des Betrachters, der sie wie jede Webkarte an den Anbieter weiterleitet. Beschränken Sie jede auf die Adressen Ihres Portals in der Schaltkonsole des Anbieters.

Eine Seite nennt einen Anbieter nur, um einen anderen als den des Portals zu verwenden, und zeigt nur an, wie er aussieht: einen Stil, eine Karten-ID, eine Ansicht umstrittener Grenzen. Was unbestimmt bleibt, stammt von der Konfiguration. Bei einem düsteren Thema wechselt die Karte zum dunklen Stil des Anbieters; UsePortalTheme schaltet diesen aus.

React Blazor

Azure Maps ohne Schlüssel

Eine Azure Maps Karte meldet sich mit Entra-Token an, die das Portal an seine eigene Identität ausgibt, also mit der es mit Dataverse verbunden ist, sodass kein Azure Maps-Schlüssel benötigt wird oder den Browser erreicht. Gib dieser Identität die Azure Maps Data Reader-Rolle auf dem Azure Maps-Konto und nichts weiter, und setze AzureMaps:ClientId auf der Authentifizierungsseite des Kontos die Client-ID.

Jeder Betrachter hält den Token, während er läuft, sodass er nur das tun kann, was diese Rolle erlaubt; beschränke auch die erlaubten Ursprünge des Kontos auf die Adressen deines Portals. Die Karte verlangt vor Ablauf eines neuen Tokens. Eine Seite fragt einmal, und ein Betrachter kann 120 Token pro Minute erhalten, sofern PowerPortalsPro:Maps:RateLimit nicht anders angegeben ist; Besucher, die nicht eingeloggt sind, werden nach ihrer Adresse gezählt, die alle hinter der Verbindung eines Büros teilen.

Dataverse-Zeilen

Geben Sie eine Ansicht oder eine FetchXML-Abfrage an, und jede Zeile mit Breitengrad und Längengrad wird zu einem Marker, der nach dem primären Namen der Tabelle benannt ist. Zeilen werden mit den Berechtigungen des Benutzers gelesen, wie es bei einem Raster der Fall ist, und ein Klick auf eine Zeile zeigt die Spalten der Ansicht an.

React Blazor

Zeilen ohne beide Koordinaten werden in der Abfrage ausgelassen. Die Karte liest 1.000 Zeilen, sofern MaxRows nichts anderes steht (höchstens 5.000), und notiert auf der Karte, wenn es mehr gibt.

Zeilen ohne Koordinaten können von ihren Adressen aus ausgefüllt werden, sobald sie gespeichert werden: siehe Geocoding.

Mehrere Tabellen

Mit MultiTable (React: multiTable), zeigt die Karte die Zeilen jeder Tabelle, die der Server für Karten mit ForMapsregistriert, jede Tabelle in ihrer eigenen Farbe mit einer Legende. Die Registrierung nennt die Spalten, die die Breite und Länge einer Zeile enthalten, die immer gelesen werden. DefaultTables wählt die zunächst gezeigten Tabellen und Tables die aus, die überhaupt angezeigt werden dürfen; Regarding schränkt sie auf die Zeilen rund um einen Datensatz ein.

Eine Tabelle, deren Koordinaten mit AddMapCoordinatesregistriert sind, oder mit AddGeocodingausgefüllt werden, wird für Karten mit ForMaps() nur registriert: siehe Geocoding.

React Blazor

Eine Symbolleiste über der Karte wählt die Ansicht: jede Tabelle oder eine Ansicht mehrerer Tabellen, die mit und registriert sind AddMultiTableView ForMaps(). ViewIds (React: viewIds) bietet nur die registrierten Ansichten in ihrer Reihenfolge und DefaultViewId (defaultViewId) die, auf der sie geöffnet wird. Sein Filtermenü schaltet Tabellen ein und aus und bearbeitet die Filter jeder Tabelle. Mit AllowSavedViews (React: allowSavedViews) kann ein angemeldeter Benutzer das, was die Karte als eigene Ansicht anzeigt, speichern: siehe Gespeicherte Ansichten.

Aufzeichnungen in der Nähe eines Ortes finden

Mit AllowNearSearch (React: allowNearSearch) hat eine Karte mehrerer Tabellen einen Nah-Button auf ihrer Werkzeugleiste. Sie findet einen Ort – eine Adresse mit der eigenen Suche des Kartenanbieters oder den Standort des Besuchers, den der Browser auffordert zu teilen – und die Karte zeigt dann nur die Zeilen innerhalb der gewählten Entfernung, am nächstliegenden über jeder Tabelle: Der Kreis wird gezeichnet, die Karte darauf angepasst, und das Popup jeder Zeile zeigt an, wie weit sie ist. NearDistances (nearDistances) legt die angebotenen Entfernungen fest: 1, 5, 10, 25, 50 und 100, sofern nicht gesetzt, NearDistance (nearDistance) die Startdistanz, 25 sofern nicht gesetzt, und NearDistanceUnit (nearDistanceUnit) ob sie in Meilen startet, als Standard, oder Kilometer; der Besucher kann wechseln. Siehe es in der Nahen-Demo.

React Blazor

Jede Tabelle wird mit ihren registrierten Koordinaten gelesen, mit den Erlaubnissen des Besuchers: Der Server liest das Quadrat um den Kreis, hält die Reihen in der Entfernung über dem Boden und gibt die nächstgelegenen zurück. Eine Suche in der Nähe eines Ortes hält höchstens 500 Reihen, die nächstgelegenen, und die Legende der Karte sagt, wann es mehr gab; NearSearchOptions.MaximumMatches erhöht oder senkt das bis zu 5.000. Ein Besucher, der die Koordinaten eines Tisches nicht lesen darf, findet keine seiner Reihen.

Popups und Klicks

Wenn man auf einen Gegenstand, einen Marker oder eine Linie, einen Bereich oder einen Kreis klickt, erscheint OnItemClick das Objekt mit seinen Daten und dem Klickort und öffnet dann ein Popup darüber. Das Popup ist eine Fluent-Karte mit eigenem Inhalt: eine Vorlage auf Blazor, eine Renderfunktion auf React. Ein Klick auf die Karte selbst erhebt OnMapClick sich mit ihrer Position.

React Blazor

Um einen Klick auf eigene Weise zu beantworten, öffne zum Beispiel die Seite eines Datensatzes oder wähle eine Region aus, rufe PreventDefault() auf den Klick (preventDefault() auf React) auf, und die Karte öffnet kein Popup dafür. ShowPopups Auf False gestellt wird für jedes Element Popups ausgeschaltet.

React Blazor

Das Popup-Kommando einer Zeile verweist auf die Seite ihres Datensatzes, die für ihre Tabelle AddRecordPage registriert ist (siehe Datensatzseiten), auf einer Karte einer oder mehreren Tabellen. RecordUrl verknüpft sie an anderer Stelle: Eine URL mit {0} anstelle der ID der Zeile und {1} der ihrer Tabelle. ShowRecordLinks (React: showRecordLinks) auf falsch gesetzt schaltet die Links aus. Ein eigener Eintrag verlinkt zu seinem Url. Auf React onNavigate folgt der Link mit deinem Router.

Marker an einer Stelle, wie die Kontakte an einer Adresse, lösen sich beim Zoomen nie auseinander, daher listet ihr Cluster sie stattdessen auf.

Farben nach einer Spalte

ColorColumn färbt den Marker jeder Zeile nach ihrer Option in einer Spalte Option, Status, Grund oder Ja/Nein: die Farbe, die die Option in Dataverse hat, oder eine der Fluent-Paletten, wenn keine vorhanden ist, mit einer Legende der Optionen auf der Karte. Zeilen ohne Wert sind grau. Für jede andere Regel RecordColorSelector geben auf Blazor und eine Funktion für recordColor React jeder Zeile ihre eigene Farbe.

React Blazor

Adresssuche

ShowAddressSearch legt ein Suchfeld über die Ecke der Karte. Es findet Adressen und Orte mit dem eigenen Anbieter des Portals, Positionen ist zuerst sichtbar und pinnt den ausgewählten; OnAddressSelected gibt der Seite den Ort und Null, sobald die Suche abgeschlossen ist. AddressSearchCountries behält sie auf einige Länder und GoToAddressAsync (im React-Referenz) sucht siegoToAddress aus dem Code.

React Blazor

Azure Maps, Esri und Google schlagen Orte vor, wenn der Besucher typiert. Der Google-Schlüssel benötigt die Places API (Neu) aktiviert, und Esris Schlüssel seine Geocoding-Berechtigung. OpenStreetMap- und MapLibre-Karten durchsuchen OpenStreetMaps Nominatim, dessen Nutzungsrichtlinie nur für leichte Nutzung erlaubt ist und niemals beim Tippen, sodass sie suchen, wenn Enter gedrückt wird; nenne deinen eigenen Nominatim-Server in OpenStreetMap:GeocoderUrl oder MapLibre:GeocoderUrl für mehr.

Address(addressin React) zeigt eine Adresse ohne Suchfeld: Die Karte findet sie mit derselben Suche, sobald sie gezeichnet ist, und wieder, wenn sie sich ändert, pinnt sie und zoomt darauf. Ein Spinner zeigt beim Suchen eine Nachricht an, wenn sie nicht gefunden wird. Es ist das, was der Kartenpin öffnet,AddressDisplayValue eine Adresse ohne Koordinaten.

React Blazor

Druck

ShowPrintButton (showPrintButton in React) fügt einen Druck-Button hinzu – auf der Werkzeugleiste einer MultiTable Karte, also über der oberen rechten Ecke der Karte –, der die Karte so ausdruckt, wie sie mit ihren Pins, ihrer Legende, dem geöffneten Popup und der Quellenangabe des Anbieters angezeigt wird. PrintTitle ist die Überschrift darüber und PrintEntries listet die Datensätze darunter auf, jede neben dem Label ihres Pins. Ein Marker Label wird auf seinen Pin anstelle des Punktes gezeichnet: gib den Stopps eine Zahl und der Ausdruck liest sich wie ein Routenblatt. PrintAsync() (print() in der React-Referenz – druckt von einem eigenen Button der Seite aus und OnPrintChanged (onPrintChange) gibt an, wann die Karte gedruckt werden kann und ob sie als Bild gespeichert werden kann, damit dieser Button folgt.

React Blazor

Azure Maps, Esri, OpenStreetMap und MapLibre-Karten werden als Bild der Karte gedruckt, sodass die Seite um die Karte herum weggelassen wird und die Karte sich nicht bewegt; derselbe Button speichert dieses Bild auch als PNG-Datei (SaveImageAsync, oder saveImage()). Ein offenes Popup wird auf das Bild mit Titel und Feldern oder den darauf aufgeführten Markern gezeichnet; eines, das den eigenen Inhalt der Seite (PopupTemplate, oder renderPopup) zeigt, wird mit dem Titel des Objekts gezeichnet. Eine Google-Karte kann nicht in ein Bild kopiert werden, daher wird sie so gedruckt, wie sie auf der Seite ist, mit Popup und so, der Rest der Seite bleibt nicht im Ausdruck, und bietet kein Bild zum Speichern an. Ein eigener Anbieter wird als Bild gedruckt, wenn seine Oberfläche implementiert capture.

Die eigenen Funktionen des Anbieters

NativeOptions werden auf die eigene Karte des Anbieters übertragen, sobald sie erstellt wird, über die eigene Karte. Das schaltet zum Beispiel Street View für Google ein oder erlaubt einer MapLibre-Karte, nur mit dem Scrollrad zu zoomen (cooperativeGestures: false); standardmäßig benötigt sie Strg, wie bei Google auf einer Seite, die scrollt, sodass die Seite daran vorbeiscrollt. Das Kartenobjekt des Anbieters ist auch für Ihr eigenes JavaScript verfügbar: GetNativeMapAsync auf Blazor, native in der React-Referenz.

React Blazor

Dein eigener Anbieter

Ein Anbieter zeichnet die Basiskarte und Formen, platziert Elemente und meldet Klicks und Umzüge. Alles andere gehört der Karte. Registrieren Sie eine mit ihrem Namen und benennen Sie sie dann in den Anbietereinstellungen der Karte.

Auf Blazor verwenden CustomMapProvider Sie den Namen, den Sie im JavaScript Ihrer Seite registriert haben.

React-Aufbau

MapLibre, das alle Anbieter außer Google zeichnet, lädt ein Worker-Skript aus einer eigenen Datei. Installiere maplibre-gl neben @powerportalspro/react-mapsund sag ihm, wo dein Bundler den Worker einmal platziert hat, bevor eine Karte gezeichnet wird. Blazor benötigt keine Einrichtung.

Reagieren Blazor

Map Baureihe

Parameter

Name
Typ
Default
Beschreibung
Addressstring?
AddressSearchCountriesIReadOnlyList<string>?
AllowFilteringbool
False
AllowNearSearchbool
False
AllowSavedViewsbool
False
CenterMapPosition?
Clusterbool
True
ColorColumnstring?
DefaultTablesIEnumerable<string>?
DefaultViewIdGuid?
FetchXmlstring?
FiltersIReadOnlyList<QueryFilter>?
FitItemIdsIReadOnlyList<string>?
Heightstring
400px
ItemsIReadOnlyList<MapItem>?
LatitudeColumnstring
address1_latitude
LongitudeColumnstring
address1_longitude
MapStyleMapStyle
Road
MaxRowsint
1000
MultiTablebool
False
NativeOptionsIReadOnlyDictionary<string, Object>?
NearDistancedouble?
NearDistancesIReadOnlyList<double>?
NearDistanceUnitDistanceUnit
Miles
PopupTemplateRenderFragment<MapItem>?
PrintEntriesIReadOnlyList<MapPrintEntry>?
PrintEntriesProviderFunc<IReadOnlyList<MapPrintEntry>>?
PrintTitlestring?
ProviderMapProvider?
RecordColorstring?
RecordColorSelectorFunc<TableRecord, string>?
RecordUrlstring?
RecordUrlSelectorFunc<TableRecord, string>?
RegardingTableRecordReference?
SavedViewsKeystring?
ShowAddressSearchbool
False
ShowLegendbool
True
ShowPopupsbool
True
ShowPrintButtonbool
False
ShowRecordLinksbool
True
SignInUrlstring
Account/Login
TablesIEnumerable<string>?
Titlestring?
TitleColumnstring?
UsePortalThemebool
True
ViewIdGuid?
ViewIdsIEnumerable<Guid>?
Widthstring
100%
Zoomdouble?
Name: Address
Typ: string?
Name: AddressSearchCountries
Typ: IReadOnlyList<string>?
Name: AllowFiltering
Typ: bool
Default: False
Name: AllowNearSearch
Typ: bool
Default: False
Name: AllowSavedViews
Typ: bool
Default: False
Name: Center
Typ: MapPosition?
Name: Cluster
Typ: bool
Default: True
Name: ColorColumn
Typ: string?
Name: DefaultTables
Typ: IEnumerable<string>?
Name: DefaultViewId
Typ: Guid?
Name: FetchXml
Typ: string?
Name: Filters
Typ: IReadOnlyList<QueryFilter>?
Name: FitItemIds
Typ: IReadOnlyList<string>?
Name: Height
Typ: string
Default: 400px
Name: Items
Typ: IReadOnlyList<MapItem>?
Name: LatitudeColumn
Typ: string
Default: address1_latitude
Name: LongitudeColumn
Typ: string
Default: address1_longitude
Name: MapStyle
Typ: MapStyle
Default: Road
Name: MaxRows
Typ: int
Default: 1000
Name: MultiTable
Typ: bool
Default: False
Name: NativeOptions
Typ: IReadOnlyDictionary<string, Object>?
Name: NearDistance
Typ: double?
Name: NearDistances
Typ: IReadOnlyList<double>?
Name: NearDistanceUnit
Typ: DistanceUnit
Default: Miles
Name: PopupTemplate
Typ: RenderFragment<MapItem>?
Name: PrintEntries
Typ: IReadOnlyList<MapPrintEntry>?
Name: PrintEntriesProvider
Typ: Func<IReadOnlyList<MapPrintEntry>>?
Name: PrintTitle
Typ: string?
Name: Provider
Typ: MapProvider?
Name: RecordColor
Typ: string?
Name: RecordColorSelector
Typ: Func<TableRecord, string>?
Name: RecordUrl
Typ: string?
Name: RecordUrlSelector
Typ: Func<TableRecord, string>?
Name: Regarding
Typ: TableRecordReference?
Name: SavedViewsKey
Typ: string?
Name: ShowAddressSearch
Typ: bool
Default: False
Name: ShowLegend
Typ: bool
Default: True
Name: ShowPopups
Typ: bool
Default: True
Name: ShowPrintButton
Typ: bool
Default: False
Name: ShowRecordLinks
Typ: bool
Default: True
Name: SignInUrl
Typ: string
Default: Account/Login
Name: Tables
Typ: IEnumerable<string>?
Name: Title
Typ: string?
Name: TitleColumn
Typ: string?
Name: UsePortalTheme
Typ: bool
Default: True
Name: ViewId
Typ: Guid?
Name: ViewIds
Typ: IEnumerable<Guid>?
Name: Width
Typ: string
Default: 100%
Name: Zoom
Typ: double?

Veranstaltungen

Name
Typ
Beschreibung
OnAddressSelectedEventCallback<MapPlace>
OnErrorEventCallback<string>
OnItemClickEventCallback<MapItemClickEventArgs>
OnMapClickEventCallback<MapClickEventArgs>
OnPrintChangedEventCallback<MapPrintState>
OnViewChangedEventCallback<MapView>
Name: OnAddressSelected
Typ: EventCallback<MapPlace>
Name: OnError
Typ: EventCallback<string>
Name: OnItemClick
Typ: EventCallback<MapItemClickEventArgs>
Name: OnMapClick
Typ: EventCallback<MapClickEventArgs>
Name: OnPrintChanged
Typ: EventCallback<MapPrintState>
Name: OnViewChanged
Typ: EventCallback<MapView>

Methoden

Name
Parameter
Typ
Beschreibung
ClearAddressAsyncTask
ClosePopupAsyncTask
FitToItemsAsyncIEnumerable<string> ids
Task
GetMapSettingsAsyncstring provider
Task<MapSettingsResponse>
GetNativeMapAsyncTask<IJSObjectReference>
GetViewAsyncTask<MapView>
GoToAddressAsyncstring text
Task<MapPlace>
NotifyAddressSelectedAsyncMapPlace place
Task
NotifyAddressStatusAsyncstring status
Task
NotifyClusterClickAsyncstring[] ids
MapPosition position
Task
NotifyErrorAsyncstring kind
string message
Task
NotifyItemClickAsyncstring id
MapPosition position
Task
NotifyMapClickAsyncMapPosition position
Task
NotifyViewChangedAsyncMapView view
Task
OpenPopupAsyncstring id
Task
PrintAsyncTask
SaveImageAsyncstring fileName
Task<bool>
SetCameraAsyncMapCamera camera
bool animate
Task
Name: ClearAddressAsync
Typ: Task
Name: ClosePopupAsync
Typ: Task
Name: FitToItemsAsync
Parameter: IEnumerable<string> ids
Typ: Task
Name: GetMapSettingsAsync
Parameter: string provider
Typ: Task<MapSettingsResponse>
Name: GetNativeMapAsync
Typ: Task<IJSObjectReference>
Name: GetViewAsync
Typ: Task<MapView>
Name: GoToAddressAsync
Parameter: string text
Typ: Task<MapPlace>
Name: NotifyAddressSelectedAsync
Parameter: MapPlace place
Typ: Task
Name: NotifyAddressStatusAsync
Parameter: string status
Typ: Task
Name: NotifyClusterClickAsync
Parameter: string[] ids
MapPosition position
Typ: Task
Name: NotifyErrorAsync
Parameter: string kind
string message
Typ: Task
Name: NotifyItemClickAsync
Parameter: string id
MapPosition position
Typ: Task
Name: NotifyMapClickAsync
Parameter: MapPosition position
Typ: Task
Name: NotifyViewChangedAsync
Parameter: MapView view
Typ: Task
Name: OpenPopupAsync
Parameter: string id
Typ: Task
Name: PrintAsync
Typ: Task
Name: SaveImageAsync
Parameter: string fileName
Typ: Task<bool>
Name: SetCameraAsync
Parameter: MapCamera camera
bool animate
Typ: Task