portál uživatelů
softwarů Autodesk

Zkombinujte Autodesk MapGuide Enterprise s dostupnými aplikacemi Google Earth a Google Maps – 3. díl

Stavebnictví

Mashup technologie Autodesk MapGuide Enterprise s aplikací Google Earth Existují dva způsoby zkombinování softwaru Autodesk MapGuide® Enterprise a mapové aplikace Google Earth™. V prvním pří…

Zkombinujte Autodesk MapGuide Enterprise s dostupnými aplikacemi Google Earth a Google Maps – 3. díl

Mashup technologie Autodesk MapGuide Enterprise s aplikací Google Earth

Existují dva způsoby zkombinování softwaru Autodesk MapGuide® Enterprise a mapové aplikace Google Earth™. V prvním případě je možné využít předchystanou možnost v prostředí Autodesk MapGuide Enterprise, za druhé je také samozřejmě možné vyvinout vlastní aplikaci, která Vám poskytne větší kontrolu nad tím, jaký typ dat a jaké množství dat je přeneseno do prostředí Google Earth.

Použití připravených metod v prostředí Autodesk MapGuide Enterprise

V aplikaci Google Earth je možné překrývat zobrazená satelitní a vektorová data daty z externích zdrojů. V prostředí Autodesk MapGuide Enterprise je proto možné automaticky převést potřebná data na KML formát a ty pak poskytnout dál. Podporovány jsou tři typy požadavků: GetMapKml, GetLayerKml a GetFeaturesKml.

Příjemnou vlastností metody GetMapKml je zobrazování dat dle definovaných rozsahů měřítek. Limitujícím faktorem je pak skutečnost, že uživatel nemá žádnou kontrolu nad množstvím vrstev, které jsou zobrazovány neboli není možné dotazem definovat, které vrstvy do zobrazení zahrnout a které ne. Ačkoli Google Earth striktně vyžaduje použití prostorových dat v souřadném systému WGS84, použití jinak transformovaných dat není problém – GetMapKml() data převede z aktuálního souřadného systému do WGS84.

GetMapKml

Požadavek GetMapKml je navržen tak, aby zajistil jednoduchý a rychlý uživatelem definovaný kontakt se serverem. Zahrnuje následující parametry:

OPERATION = GetMapKml

VERSION = 1

MAPDEFINITION =

DPI =

FORMAT = KML, KMZ nebo XML

USERNAME =

PASSWORD =

Tento odkaz lze provést pomocí URL odkazu uvedeného na webové stránce. Dojde k vygenerování KML dokumentu, který reprezentuje dotazovanou mapovou definici. Tento dokument obsahuje pro každou vrstvu z dotazované mapy jeden element NetworkLink (viz dříve). Google Earth pak tyto elementy využije pro provedení zpětného požadavku do prostředí Autodesk MapGuide Enterprise a pomocí požadavkuGetLayerKml si vyžádá další dynamická data pro každou ze zobrazených vrstev.

Jestliže je vyžadován formát KMZ, dojde k automatické komprimaci KML dokumentu a dekomprimace proběhne při přijetí dat aplikací Google Earth, která se automaticky spustí a téměř okamžitě zobrazí obsah získaného dokumentu. Jestliže je vyžadován formát XML, získáme výstup v textu nebo XML. Tento obsah je pak obvykle zobrazen přímo v okně webového prohlížeče.

GetLayerKml

Požadavek GetLayerKml je určen pouze pro „volání“ dat z aplikace Google Earth. Jeho formát se může měnit v závislosti na budoucích vylepšeních podpory formátu KML. Proto není zcela doporučené dotazovat se na tuto operaci přímo. GetLayerKml v současné době podporuje následující parametry:

OPERATION = GetLayerKml

VERSION = 1

LAYERDEFINITION =

DPI = < rozlišení pro zobrazení dat – primárně nastaveno na 96 DPI >

FORMAT = KML, KMZ nebo XML

BBOX = aktuální výřez mapy v souřadnicích WGS84 (zeměpisná šířka a délka)

WIDTH = aktuální šířka mapy určená v pixlech

HEIGHT = aktuální délka mapy určená v pixlech

Soubor KML vygenerovaný na základě požadavku zaplní prvních pět parametrů. Odkaz je pak vygenerován v takovém formátu, který aplikaci Google Earth umožní převzít si z něj informace pro doplnění parametrů BBOX, WIDTH a HEIGHT, které odpovídají aktuálnímu výřezu.

GetLayerKml vrací KML dokument obsahující elementy , které korespondují s každým měřítkovým rozsahem definovaným u vrstvy, která je právě viditelná. Elementy jsou pak použity, aby pomohly aplikaci Google Earth určit a vyžadovat pouze ta data, jejichž odkazy určí, že definovaný rozsah měřítka odpovídá právě tomu aktuálnímu měřítku ve zobrazeném výřezu mapy.

GetFeaturesKml

Požadavek GetFeaturesKml je opět navržen pouze pro potřeby aplikace Google Earth. Jeho formát se může měnit v závislosti na budoucích vylepšeních podpory formátu KML. Proto není zcela doporučené dotazovat se na tuto operaci přímo. GetFeaturesKml v současné době podporuje následující parametry:

OPERATION = GetFeaturesKml

VERSION = 1

LAYERDEFINITION = < definice mapových vrstev uložené v určeném úložišti >

DPI = < rozlišení pro zobrazení dat – primárně nastaveno na 96 DPI >

FORMAT = KML, KMZ nebo XML

BBOX = aktuální výřez mapy v souřadnicích WGS84 (zeměpisná šířka a délka)

WIDTH = aktuální šířka mapy určená v pixlech

HEIGHT = aktuální délka mapy určená v pixlech

GetFeaturesKml vrátí aktuální obsah, který má být zobrazen v mapě. Pro vektorové vrstvy dojde k načtení dokumentu, který obsahuje prvky reprezentované ve vektorovém formátu včetně informací o jejich stylu jako je barva, tloušťka čar či typ výplně. Rastrové vrstvy jsou po požadavku vráceny ve formátu PNG. Výkresové hladiny ze souborů DWF™ podporovány nejsou.

Níže je zobrazen snímek z KML výstupu získaného použitím GETMAPKML(). Všechny zobrazené stromy byly zobrazeny na základě požadavku implicitním stylem – žlutým špendlíkem.

Vývoj vlastní aplikace pro komunikaci s Google Earth

Druhou možností, jak využít kombinaci Autodesk MapGuide® Enterprise a Google Earth je vývoj vlastní aplikace, která bude umět vytvořit soubor KML a ten pak odešle do Google Earth. Tato metoda uživateli dovoluje získat větší kontrolu na tím, co je vlastně odesíláno na servery společnosti Google a jak jsou poté data v prostředí Google Earth reprezentována. Implicitním symbolem například pro bodový element je v prostředí Google Earth žlutý špendlík.

V případě, že vytvoříte vlastní aplikaci pro tvorbu KML souborů, můžete si pohlídat, že bodová vrstva stromů nebude zobrazena jako množina žlutých špendlíků, ale každému stromu bude přiřazen odpovídající symbol. K dispozici je Vám totiž celá knihovna symbolů aplikace Google Earth. Z „GIS perspektivy“ pak máte plný přístup k sofistikovaným prostorově orientovaným dotazovacím možnostem produktu Autodesk MapGuide. Dohromady tak máte k dispozici opravdu výkonnou kombinaci nových technologií.

Proces vytváření vlastní funkční aplikace

1. Začneme dotazováním v rámci Autodesk MapGuide Enterprise. Požadavek je zasílán směrem k Autodesk MapGuide Enterprise za použití Web Server API. Zde je například zmíněn požadavek na vyhledání všech jilmů v určeném území.

2. Odešlete parametry dostazu do skriptu, který otevře XML dokument obsahující NetworkLink. Najděte v souboru tag , který je obsažen v NetworkLinku a nahraďte jej novými parametry dotazu.

XmlDocument doc = new XmlDocument(); doc.Load(Request.ServerVariables[„APPL_PHYSICAL_PATH“] + „Wrapper.kml“);

XmlNodeList theNodes = doc.GetElementsByTagName(„href“);

if (!(theNodes==null))

{

theNodes.Item(0).InnerText =

„http://localhost/mapguide/sftrees_google/KMLContent.aspx?FILTER=“ +

Server.UrlEncode(GetRequestParameters()[„PropertyName“] + “ “ +

GetRequestParameters()[„Operator“] + “ “ + GetRequestParameters()[„VAL“]);

}

3. Soubor KML je generován na základě atributů a geometrických souřadnic. Použijte nástroj Autodesk MapGuide API FeatureReader() pro dotázání se do bodové vrstvy stromů, nalezení výsledků a vytvoření výstupního KML souboru. V této fázi je také vhodné vytvořit potřebné definice stylu, které budou v KML použity.

Níže je uveden ukázkový ASP.NET C# kód pro vytvoření souboru KML z dotazování serveru Autodesk

MapGuide Enterprise:

// Select the features.

MgResourceIdentifier featureResId = new _MgResourceIdentifier(„Library://SF_Google/Data/SFTrees_LL84.FeatureSource“);

MgFeatureReader featureReader = featureService.SelectFeatures(featureResId, „SFTrees_LL84“, _queryOptions);

featureReader.ReadNext();

MgAgfReaderWriter geometryReaderWriter = new MgAgfReaderWriter();

// For each selected feature, display the address.

Double treeID;

String treeADR;

String treeCommonName;

String treeSciName;

String strProperty;

String strProperties = „“;

while (featureReader.ReadNext())

{

treeID = featureReader.GetDouble(@“TreeID“);

treeADR = featureReader.GetString(@“Address“);

treeCommonName = featureReader.GetString(@“CommonName“);

treeSciName = featureReader.GetString(@“Scientific“);

MgByteReader byteReader = featureReader.GetGeometry(„Geometry“);

MgGeometry geometry = geometryReaderWriter.Read(byteReader);

MgPoint point = geometry.GetCentroid();

double x = point.GetCoordinate().GetX();

double y = point.GetCoordinate().GetY();

Response.Write(„SF Tree“);

Response.Write(„“);

Response.Write(„Tree ID: “ + treeID + „“);

Response.Write(„

Response.Write(„

“);

Response.Write(„

“);

Response.Write(„

“);

Response.Write(„

“);

Response.Write(„

“);

Response.Write(„

“);

Response.Write(„

“);

Response.Write(„

“);

Response.Write(„

“);

Response.Write(„

“);

Response.Write(„

“);

Response.Write(„

“);

Response.Write(„

“);

Response.Write(„

“);

Response.Write(„

“);

Response.Write(„Information“); Response.Write(„

Address “ + treeADR + „
Common Name “ + treeCommonName + „
Wiki Link “ +

_treeCommonName + „

“);

Response.Write(„]]>“);

Response.Write(„#treeStyleMap“);

Response.Write(„“);

Response.Write(„“ + x + „,“ + y + „“);

Response.Write(„“);

Response.Write(„“);

}

featureReader.Close();

4. Soubor KML je načten a zpracován aplikací Google Earth a dojde k vytvoření překryvné vrstvy.

Po výběru stromu dojde k okamžitému zobrazení dynamicky vytvořeného HTML popisu, který obsahuje také dotazovací odkaz do databáze Wikipedia a používá přitom tytéž vyhledávací parametry jako při originálním dotazu v prostředí Autodesk MapGuide query: druhové označení stromu – v našem případě jilm (elm). Když vytvoříte KML soubor obsahující polygony, je třeba nejprve stisknout klávesu Ctrl a poté vybrat potřebný polygon. Okamžitě také dojde ke zobrazení dynamicky generovaného HMTL popisu objektu.