U bevindt zich nu op een technische pagina over de software Mercator. Deze pagina bevat specifieke informatie die bestemd is voor professionals van de software Mercator. Wenst u naar algemenere informatie over Mercator door te gaan?


   Deze vraag niet meer stellen

Rapportering : output van een document in de vorm van een kaart

0000002961     -      14-02-2020

Met Mercator 10.7 of hoger kunt u de uitvoer van een rapport in de vorm van een kaart corrigeren.

Integratie wordt uitgevoerd met Bing-kaarten (Microsoft). Om deze functionaliteit te hebben, moet u een sleutel hebben die u op de Bing-portal kunt verkrijgen. Deze sleutel moet in de optie "Extra> Opties> Overige: Sleutel voor Bing-kaarten" worden geplaatst (id = BING_KEY). 

Om dit type rapport te activeren, moet deze eigenschap worden ingesteld in het configuratiescherm van de Reporting:

De kaart wordt automatisch gecentreerd en ingezoomd op basis van de weergegeven pin. Het is mogelijk om de afbeelding te exporteren of te kopiëren via het contextmenu.

We ontwikkelen hier een voorbeeld dat bestaat uit het op de kaart tonen van de tien klanten die zich het dichtst bij een vaste locatie bevinden. Dit voorbeeld veronderstelt dat de coördinaten van alle klanten zijn gegenereerd en opgeslagen in de kolommen C_LAT en C_LONG.

De SQL-query is als volgt:

declare @g geography
set @g='POINT(4.9202461 50.5901462)'

select top 10 c_id,c_lat as latitude,c_long as longitude,c_nom,c_adresse,c_adresse2,rtrim(c_codep) + ' ' + c_ville as ville
from CLI 
where (c_sommeil=0) and not(c_lat=0 and c_long=0)
order by @g.STDistance(geography::Point(c_lat, c_long, 4326))

Let op dit :

  • het resultaat moet de lengte- en breedtekolommen bevatten (float)
  • een kaart beschouwt slechts één gegevenstabel. Daarom is het niet nuttig om meer dan één selectie op te geven.

Op dit punt is het resultaat een kaart met de pinnen in de juiste positie, maar zonder aanvullende informatie of gedrag.

De rest van de configuratie wordt gedaan in de customizer van het rapport. Het onderstaande voorbeeld laat zien hoe u een tooltip aan elke pin kunt koppelen, samen met de contactgegevens van de klant. Met deze pin heeft u ook via een klik directe toegang tot het klantenbestand. Deze code implementeert de MercatorUi.ICustomizers.INewPinInReportingMapForm-interface.

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorController;

namespace MercatorUi.Reporting
{
    public class Customizer : MercatorUi.ICustomizers.INewPinInReportingMapForm
    {
        public void NewPinInReportingMapForm(_BaseClasses.Pin pin)
        {
            pin.Disposing += pin_Disposing;
            pin.Click += pin_Click;
            string s = pin.DataRow["c_nom"].ToString() + "\r\n" + pin.DataRow["c_adresse"].ToString();
            if (!pin.DataRow["c_adresse2"].Equals(""))
                s += "\r\n" + pin.DataRow["c_adresse2"].ToString();
            s += "\r\n" + pin.DataRow["ville"].ToString();
            pin.SetToolTip(s);
        }

        void pin_Disposing(object sender, EventArgs e)
        {
            var pin = (_BaseClasses.Pin)sender;
            pin.Disposing -= pin_Disposing;
            pin.Click -= pin_Click;
        }

        void pin_Click(object sender, EventArgs e)
        {
            var pin = (_BaseClasses.Pin)sender;
            MercatorUi.Globals.Main.ShowSigInInThread(MercatorUi.Sig._SigEnum.CLI, pin.DataRow["c_id"].ToString());
        }
    }
}

Als deze code wordt bewerkt in Visual Studio, is het nodig om een verwijzing naar Microsoft.Maps.MapControl.WPF.dll toe te voegen, die in de hoofddirectory van Mercator te vinden is.

Het volledige voorbeeld dat hier wordt geïllustreerd is beschikbaar in het zip-bestand hieronder.


In de SQL-query is het mogelijk om het vaste coördinaatpunt te vervangen door de parameter @POSITION_1. Vanaf dan zal Mercator de gebruiker vragen om informatie, plaats of adres in te voeren, waardoor de geografische coördinaten door middel van geocodering kunnen worden verkregen, die dan zullen worden gebruikt.

De SQL-query wordt :

select top 10 c_id,c_lat as latitude,c_long as longitude,c_nom,c_adresse,c_adresse2,rtrim(c_codep) + ' ' + c_ville as ville
from CLI 
where (c_sommeil=0) and not(c_lat=0 and c_long=0)
order by @POSITION_1.STDistance(geography::Point(c_lat, c_long, 4326))


Te laden : 0000002961.zip (4 Kb - 10-01-2020)