[mapguide-commits] r7493 - sandbox/jng/createruntimemap/Web/src/HttpHandler
svn_mapguide at osgeo.org
svn_mapguide at osgeo.org
Tue May 14 07:31:00 PDT 2013
Author: jng
Date: 2013-05-14 07:31:00 -0700 (Tue, 14 May 2013)
New Revision: 7493
Modified:
sandbox/jng/createruntimemap/Web/src/HttpHandler/HttpCreateRuntimeMap.cpp
sandbox/jng/createruntimemap/Web/src/HttpHandler/HttpCreateRuntimeMap.h
Log:
Update the CREATERUNTIMEMAP response format:
* Include missing FiniteDisplayScale list
* Include missing background color property
* Include missing group type (to determine if tiled/dynamic)
* Include missing selectable flag for layers
* Do not generate a group/layer hierarchy. Generate a flat layer/group list instead. Include parent object ids on child groups/layers, and let the client application build this hierarchy instead.
* Relocate MdfModel::LayerDefinition pointer cleanup code to safeguard against exceptions.
Modified: sandbox/jng/createruntimemap/Web/src/HttpHandler/HttpCreateRuntimeMap.cpp
===================================================================
--- sandbox/jng/createruntimemap/Web/src/HttpHandler/HttpCreateRuntimeMap.cpp 2013-05-13 12:29:10 UTC (rev 7492)
+++ sandbox/jng/createruntimemap/Web/src/HttpHandler/HttpCreateRuntimeMap.cpp 2013-05-14 14:31:00 UTC (rev 7493)
@@ -91,6 +91,7 @@
MgByteReader* MgHttpCreateRuntimeMap::BuildRuntimeMapXml(MgResourceIdentifier* mdfId, CREFSTRING mapName)
{
Ptr<MgByteReader> byteReader;
+ LayerDefinitionMap layerDefinitionMap;
MG_HTTP_HANDLER_TRY()
Ptr<MgMap> map = new MgMap();
@@ -144,6 +145,10 @@
xml.append("<MapDefinition>");
xml.append(MgUtil::WideCharToMultiByte(mdfId->ToString()));
xml.append("</MapDefinition>\n");
+ // ------------------------------ Background Color ---------------------------------- //
+ xml.append("<BackgroundColor>");
+ xml.append(MgUtil::WideCharToMultiByte(map->GetBackgroundColor()));
+ xml.append("</BackgroundColor>");
// ------------------------------ Coordinate System --------------------------------- //
xml.append("<CoordinateSystem>\n");
xml.append("<Wkt>");
@@ -187,7 +192,6 @@
xml.append(sExtents);
xml.append("</Extents>");
// ---------------------- Optional things if requested -------------------- //
- LayerDefinitionMap layerDefinitionMap;
if ((m_requestDataMask & REQUEST_LAYER_STRUCTURE) == REQUEST_LAYER_STRUCTURE)
{
//Build our LayerDefinition map for code below that requires it
@@ -207,7 +211,8 @@
{
STRING ldfId = layerIds->GetItem(i);
STRING content = layerContents->GetItem(i);
- layerDefinitionMap[ldfId] = MgLayerBase::GetLayerDefinition(content);
+ MdfModel::LayerDefinition* ldf = MgLayerBase::GetLayerDefinition(content);
+ layerDefinitionMap[ldfId] = ldf;
}
}
@@ -216,60 +221,47 @@
Ptr<MgLayerCollection> layers = map->GetLayers();
for (INT32 i = 0; i < groups->GetCount(); i++)
{
- Ptr<MgLayerGroup> grp = groups->GetItem(i);
- STRING grpName = grp->GetName();
- Ptr<MgLayerGroup> parent = grp->GetGroup();
- if (NULL == parent.p)
- {
- m_topLevelGroups.push_back(grp->GetName());
- }
- else
- {
- STRING parentName = parent->GetName();
- if (m_groupParentMap.find(parentName) == m_groupParentMap.end())
- {
- m_groupParentMap[parentName] = GroupNameList();
- }
- m_groupParentMap[parentName].push_back(grpName);
- }
+ Ptr<MgLayerGroup> group = groups->GetItem(i);
+ Ptr<MgLayerGroup> parent = group->GetGroup();
+ CreateGroupItem(mappingService, group, parent, xml);
}
for (INT32 i = 0; i < layers->GetCount(); i++)
{
Ptr<MgLayerBase> layer = layers->GetItem(i);
- STRING layerName = layer->GetName();
Ptr<MgLayerGroup> parent = layer->GetGroup();
- if (NULL == parent.p)
- {
- m_topLevelLayers.push_back(layerName);
- }
- else
- {
- STRING parentName = parent->GetName();
- if (m_layerParentMap.find(parentName) == m_layerParentMap.end())
- {
- m_layerParentMap[parentName] = LayerNameList();
- }
- m_layerParentMap[parentName].push_back(layerName);
- }
+
+ MdfModel::LayerDefinition* layerDef = NULL;
+ Ptr<MgResourceIdentifier> layerid = layer->GetLayerDefinition();
+ LayerDefinitionMap::iterator it = layerDefinitionMap.find(layerid->ToString());
+ if (it != layerDefinitionMap.end())
+ layerDef = it->second;
+
+ CreateLayerItem(mappingService, layer, parent, layerDef, xml);
}
- // ------------------------------ Groups ---------------------------------- //
- for (GroupNameList::iterator it = m_topLevelGroups.begin(); it != m_topLevelGroups.end(); it++)
+ }
+ // ------------------------ Finite Display Scales (if any) ------------------------- //
+ INT32 fsCount = map->GetFiniteDisplayScaleCount();
+ if (fsCount > 0)
+ {
+ for (INT32 i = 0; i < fsCount; i++)
{
- STRING groupName = (*it);
- Ptr<MgLayerGroup> group = groups->GetItem(groupName);
- CreateGroupItem(mappingService, group, xml, layers, groups, layerDefinitionMap);
+ xml.append("<FiniteDisplayScale>");
+ double dScale = map->GetFiniteDisplayScaleAt(i);
+ std::string sScale;
+ MgUtil::DoubleToString(dScale, sScale);
+ xml.append(sScale);
+ xml.append("</FiniteDisplayScale>\n");
}
-
- for (LayerNameList::iterator it = m_topLevelLayers.begin(); it != m_topLevelLayers.end(); it++)
- {
- STRING layerName = (*it);
- Ptr<MgLayerBase> layer = layers->GetItem(layerName);
- CreateLayerItem(mappingService, layer, xml, layers, layerDefinitionMap);
- }
}
xml.append("</RuntimeMap>");
- //Cleanup our LayerDefinition pointers
+ Ptr<MgByteSource> byteSource = new MgByteSource((BYTE_ARRAY_IN)xml.c_str(), (INT32)xml.length());
+ byteSource->SetMimeType(MgMimeType::Xml);
+ byteReader = byteSource->GetReader();
+
+ MG_HTTP_HANDLER_CATCH(L"MgHttpCreateRuntimeMap.BuildRuntimeMapXml")
+
+ //Cleanup our LayerDefinition pointers. Do it here so we don't leak on any exception
for (LayerDefinitionMap::iterator it = layerDefinitionMap.begin(); it != layerDefinitionMap.end(); it++)
{
MdfModel::LayerDefinition* ldf = it->second;
@@ -277,16 +269,12 @@
}
layerDefinitionMap.clear();
- Ptr<MgByteSource> byteSource = new MgByteSource((BYTE_ARRAY_IN)xml.c_str(), (INT32)xml.length());
- byteSource->SetMimeType(MgMimeType::Xml);
- byteReader = byteSource->GetReader();
+ MG_HTTP_HANDLER_THROW()
- MG_HTTP_HANDLER_CATCH_AND_THROW(L"MgHttpCreateRuntimeMap.BuildRuntimeMapXml")
-
return byteReader.Detach();
}
-void MgHttpCreateRuntimeMap::CreateGroupItem(MgMappingService* mappingService, MgLayerGroup* group, std::string& xml, MgLayerCollection* layers, MgLayerGroupCollection* groups, const LayerDefinitionMap& layerDefMap)
+void MgHttpCreateRuntimeMap::CreateGroupItem(MgMappingService* mappingService, MgLayerGroup* group, MgLayerGroup* parent, std::string& xml)
{
MG_HTTP_HANDLER_TRY()
@@ -295,12 +283,24 @@
xml.append("<Name>");
xml.append(MgUtil::WideCharToMultiByte(groupName));
xml.append("</Name>\n");
+ xml.append("<Type>");
+ INT32 gType = group->GetLayerGroupType();
+ std::string sType;
+ MgUtil::Int32ToString(gType, sType);
+ xml.append(sType);
+ xml.append("</Type>\n");
xml.append("<LegendLabel>");
xml.append(MgUtil::WideCharToMultiByte(MgUtil::ReplaceEscapeCharInXml(group->GetLegendLabel())));
xml.append("</LegendLabel>\n");
xml.append("<ObjectId>");
xml.append(MgUtil::WideCharToMultiByte(group->GetObjectId()));
xml.append("</ObjectId>\n");
+ if (NULL != parent)
+ {
+ xml.append("<ParentId>");
+ xml.append(MgUtil::WideCharToMultiByte(parent->GetObjectId()));
+ xml.append("</ParentId>\n");
+ }
xml.append("<DisplayInLegend>");
xml.append(group->GetDisplayInLegend() ? "true" : "false");
xml.append("</DisplayInLegend>\n");
@@ -313,35 +313,12 @@
xml.append("<ActuallyVisible>");
xml.append(group->IsVisible() ? "true" : "false");
xml.append("</ActuallyVisible>\n");
- if (m_groupParentMap.find(groupName) != m_groupParentMap.end())
- {
- GroupNameList childGroups = m_groupParentMap[groupName];
- for (GroupNameList::iterator it = childGroups.begin(); it != childGroups.end(); it++)
- {
- STRING childGroupName = (*it);
- Ptr<MgLayerGroup> childGroup = groups->GetItem(childGroupName);
- //Yes, we're using recursion. Stack overflow would probably only happen
- //if we have a map with several thousand level deep group hierarchy. So
- //for all intents and purposes: We're safe.
- CreateGroupItem(mappingService, childGroup, xml, layers, groups, layerDefMap);
- }
- }
- if (m_layerParentMap.find(groupName) != m_layerParentMap.end())
- {
- LayerNameList childLayers = m_layerParentMap[groupName];
- for (LayerNameList::iterator it = childLayers.begin(); it != childLayers.end(); it++)
- {
- STRING childLayerName = (*it);
- Ptr<MgLayerBase> childLayer = layers->GetItem(childLayerName);
- CreateLayerItem(mappingService, childLayer, xml, layers, layerDefMap);
- }
- }
xml.append("</Group>");
MG_HTTP_HANDLER_CATCH_AND_THROW(L"MgHttpCreateRuntimeMap.CreateGroupItem")
}
-void MgHttpCreateRuntimeMap::CreateLayerItem(MgMappingService* mappingService, MgLayerBase* layer, std::string& xml, MgLayerCollection* layers, const LayerDefinitionMap& layerDefMap)
+void MgHttpCreateRuntimeMap::CreateLayerItem(MgMappingService* mappingService, MgLayerBase* layer, MgLayerGroup* parent, MdfModel::LayerDefinition* ldf, std::string& xml)
{
MG_HTTP_HANDLER_TRY()
@@ -365,6 +342,15 @@
xml.append("<ObjectId>");
xml.append(MgUtil::WideCharToMultiByte(layer->GetObjectId()));
xml.append("</ObjectId>\n");
+ if (NULL != parent)
+ {
+ xml.append("<ParentId>");
+ xml.append(MgUtil::WideCharToMultiByte(parent->GetObjectId()));
+ xml.append("</ParentId>\n");
+ }
+ xml.append("<Selectable>");
+ xml.append(layer->GetSelectable() ? "true" : "false");
+ xml.append("</Selectable>\n");
xml.append("<DisplayInLegend>");
xml.append(layer->GetDisplayInLegend() ? "true" : "false");
xml.append("</DisplayInLegend>\n");
@@ -392,138 +378,136 @@
xml.append("</Geometry>\n");
xml.append("</FeatureSource>\n");
}
- if ((m_requestDataMask & REQUEST_LAYER_ICONS) == REQUEST_LAYER_ICONS)
+
+ if (NULL != ldf)
{
- //Our layer def map is already populated if this mask was set
- if (layerDefMap.find(ldfId) != layerDefMap.end())
+ MdfModel::VectorLayerDefinition* vl = dynamic_cast<MdfModel::VectorLayerDefinition*>(ldf);
+ if (NULL != vl)
{
- MdfModel::VectorLayerDefinition* vl = dynamic_cast<MdfModel::VectorLayerDefinition*>(layerDefMap.at(ldfId));
- if (NULL != vl)
+ MdfModel::VectorScaleRangeCollection* vsrs = vl->GetScaleRanges();
+ for (INT32 i = 0; i < vsrs->GetCount(); i++)
{
- MdfModel::VectorScaleRangeCollection* vsrs = vl->GetScaleRanges();
- for (INT32 i = 0; i < vsrs->GetCount(); i++)
- {
- MdfModel::VectorScaleRange* vsr = vsrs->GetAt(i);
- xml.append("<ScaleRange>\n");
- xml.append("<MinScale>");
- std::string sMinScale;
- MgUtil::DoubleToString(vsr->GetMinScale(), sMinScale);
- xml.append(sMinScale);
- xml.append("</MinScale>\n");
- xml.append("<MaxScale>");
- std::string sMaxScale;
- MgUtil::DoubleToString(vsr->GetMaxScale(), sMaxScale);
- xml.append(sMaxScale);
- xml.append("</MaxScale>\n");
+ MdfModel::VectorScaleRange* vsr = vsrs->GetAt(i);
+ xml.append("<ScaleRange>\n");
+ xml.append("<MinScale>");
+ std::string sMinScale;
+ MgUtil::DoubleToString(vsr->GetMinScale(), sMinScale);
+ xml.append(sMinScale);
+ xml.append("</MinScale>\n");
+ xml.append("<MaxScale>");
+ std::string sMaxScale;
+ MgUtil::DoubleToString(vsr->GetMaxScale(), sMaxScale);
+ xml.append(sMaxScale);
+ xml.append("</MaxScale>\n");
- double dScale = (vsr->GetMaxScale() + vsr->GetMinScale()) / 2.0;
- MdfModel::FeatureTypeStyleCollection* ftsc = vsr->GetFeatureTypeStyles();
+ double dScale = (vsr->GetMaxScale() + vsr->GetMinScale()) / 2.0;
+ MdfModel::FeatureTypeStyleCollection* ftsc = vsr->GetFeatureTypeStyles();
- INT32 nIconCount = 0;
- for (INT32 j = 0; j < ftsc->GetCount(); j++)
+ INT32 nIconCount = 0;
+ for (INT32 j = 0; j < ftsc->GetCount(); j++)
+ {
+ MdfModel::FeatureTypeStyle* fts = ftsc->GetAt(j);
+ if (fts->IsShowInLegend())
{
- MdfModel::FeatureTypeStyle* fts = ftsc->GetAt(j);
- if (fts->IsShowInLegend())
- {
- MdfModel::RuleCollection* rules = fts->GetRules();
- nIconCount += rules->GetCount();
- }
+ MdfModel::RuleCollection* rules = fts->GetRules();
+ nIconCount += rules->GetCount();
}
+ }
- //This theme will be compressed if we're over the specified limit for this scale range
- bool bCompress = (nIconCount > m_iconLimitPerScaleRange);
+ //This theme will be compressed if we're over the specified limit for this scale range
+ bool bCompress = (nIconCount > m_iconLimitPerScaleRange);
- for (INT32 j = 0; j < ftsc->GetCount(); j++)
- {
- MdfModel::FeatureTypeStyle* fts = ftsc->GetAt(j);
- if (!fts->IsShowInLegend())
- continue;
+ for (INT32 j = 0; j < ftsc->GetCount(); j++)
+ {
+ MdfModel::FeatureTypeStyle* fts = ftsc->GetAt(j);
+ if (!fts->IsShowInLegend())
+ continue;
- MdfModel::PointTypeStyle* pts = dynamic_cast<MdfModel::PointTypeStyle*>(fts);
- MdfModel::LineTypeStyle* lts = dynamic_cast<MdfModel::LineTypeStyle*>(fts);
- MdfModel::AreaTypeStyle* ats = dynamic_cast<MdfModel::AreaTypeStyle*>(fts);
- MdfModel::CompositeTypeStyle* cts = dynamic_cast<MdfModel::CompositeTypeStyle*>(fts);
+ MdfModel::PointTypeStyle* pts = dynamic_cast<MdfModel::PointTypeStyle*>(fts);
+ MdfModel::LineTypeStyle* lts = dynamic_cast<MdfModel::LineTypeStyle*>(fts);
+ MdfModel::AreaTypeStyle* ats = dynamic_cast<MdfModel::AreaTypeStyle*>(fts);
+ MdfModel::CompositeTypeStyle* cts = dynamic_cast<MdfModel::CompositeTypeStyle*>(fts);
- INT32 geomType = 0;
- if (pts)
- geomType = 1;
- else if (lts)
- geomType = 2;
- else if (ats)
- geomType = 3;
- else if (cts)
- geomType = 4;
- INT32 catIndex = 0;
+ INT32 geomType = 0;
+ if (pts)
+ geomType = 1;
+ else if (lts)
+ geomType = 2;
+ else if (ats)
+ geomType = 3;
+ else if (cts)
+ geomType = 4;
+ INT32 catIndex = 0;
- MdfModel::RuleCollection* rules = fts->GetRules();
- for (INT32 r = 0; r < rules->GetCount(); r++)
+ MdfModel::RuleCollection* rules = fts->GetRules();
+ for (INT32 r = 0; r < rules->GetCount(); r++)
+ {
+ MdfModel::Rule* rule = rules->GetAt(r);
+ bool bRequestIcon = false;
+ if (!bCompress)
{
- MdfModel::Rule* rule = rules->GetAt(r);
- bool bRequestIcon = false;
- if (!bCompress)
- {
- bRequestIcon = true;
- }
- else //This is a compressed theme
- {
- bRequestIcon = (r == 0 || r == rules->GetCount() - 1); //Only first and last rule
- }
+ bRequestIcon = true;
+ }
+ else //This is a compressed theme
+ {
+ bRequestIcon = (r == 0 || r == rules->GetCount() - 1); //Only first and last rule
+ }
- xml.append("<Rule>\n");
- //GeometryType and ThemeCategory are required so that deferred icon requests can be made
- //back to the mapagent, especially if we exceed the icons-per-scale-range limit
- xml.append("<GeometryType>");
- std::string sGeomType;
- MgUtil::Int32ToString(geomType, sGeomType);
- xml.append(sGeomType);
- xml.append("</GeometryType>\n");
- xml.append("<ThemeCategory>");
- std::string sThemeCat;
- MgUtil::Int32ToString(catIndex, sThemeCat);
- xml.append(sThemeCat);
- xml.append("</ThemeCategory>\n");
- xml.append("<LegendLabel>");
- xml.append(MgUtil::WideCharToMultiByte(MgUtil::ReplaceEscapeCharInXml(rule->GetLegendLabel())));
- xml.append("</LegendLabel>\n");
- xml.append("<Filter>");
- xml.append(MgUtil::WideCharToMultiByte(MgUtil::ReplaceEscapeCharInXml(rule->GetFilter())));
- xml.append("</Filter>\n");
- if (bRequestIcon)
- {
- xml.append("<Icon>");
- //TODO: We should have a batched form of this API
- Ptr<MgByteReader> iconReader = mappingService->GenerateLegendImage(layerDefId, dScale, 16, 16, MgImageFormats::Png, geomType, catIndex);
- xml.append("<MimeType>");
- //BUG? No mime type in the MgByteReader
- xml.append(MgUtil::WideCharToMultiByte(MgMimeType::Png));
- //xml.append(MgUtil::WideCharToMultiByte(iconReader->GetMimeType()));
- xml.append("</MimeType>\n");
- xml.append("<Content>");
- Ptr<MgByteSink> sink = new MgByteSink(iconReader);
- Ptr<MgByte> bytes = sink->ToBuffer();
- Ptr<MgMemoryStreamHelper> streamHelper = new MgMemoryStreamHelper((INT8*) bytes->Bytes(), bytes->GetLength(), false);
- std::string b64 = streamHelper->ToBase64();
- xml.append(b64);
- xml.append("</Content>\n");
- xml.append("</Icon>");
- }
- xml.append("</Rule>\n");
-
- catIndex++;
+ xml.append("<Rule>\n");
+ //GeometryType and ThemeCategory are required so that deferred icon requests can be made
+ //back to the mapagent, especially if we exceed the icons-per-scale-range limit
+ xml.append("<GeometryType>");
+ std::string sGeomType;
+ MgUtil::Int32ToString(geomType, sGeomType);
+ xml.append(sGeomType);
+ xml.append("</GeometryType>\n");
+ xml.append("<ThemeCategory>");
+ std::string sThemeCat;
+ MgUtil::Int32ToString(catIndex, sThemeCat);
+ xml.append(sThemeCat);
+ xml.append("</ThemeCategory>\n");
+ xml.append("<LegendLabel>");
+ xml.append(MgUtil::WideCharToMultiByte(MgUtil::ReplaceEscapeCharInXml(rule->GetLegendLabel())));
+ xml.append("</LegendLabel>\n");
+ xml.append("<Filter>");
+ xml.append(MgUtil::WideCharToMultiByte(MgUtil::ReplaceEscapeCharInXml(rule->GetFilter())));
+ xml.append("</Filter>\n");
+ if (bRequestIcon)
+ {
+ xml.append("<Icon>");
+ //TODO: We should have a batched form of this API
+ Ptr<MgByteReader> iconReader = mappingService->GenerateLegendImage(layerDefId, dScale, 16, 16, MgImageFormats::Png, geomType, catIndex);
+ xml.append("<MimeType>");
+ //BUG? No mime type in the MgByteReader
+ xml.append(MgUtil::WideCharToMultiByte(MgMimeType::Png));
+ //xml.append(MgUtil::WideCharToMultiByte(iconReader->GetMimeType()));
+ xml.append("</MimeType>\n");
+ xml.append("<Content>");
+ Ptr<MgByteSink> sink = new MgByteSink(iconReader);
+ Ptr<MgByte> bytes = sink->ToBuffer();
+ Ptr<MgMemoryStreamHelper> streamHelper = new MgMemoryStreamHelper((INT8*) bytes->Bytes(), bytes->GetLength(), false);
+ std::string b64 = streamHelper->ToBase64();
+ xml.append(b64);
+ xml.append("</Content>\n");
+ xml.append("</Icon>");
}
- }
+ xml.append("</Rule>\n");
- xml.append("</ScaleRange>\n");
+ catIndex++;
+ }
}
+
+ xml.append("</ScaleRange>\n");
}
- else
- {
- xml.append("<ScaleRange/>");
- }
}
else
+ {
xml.append("<ScaleRange/>");
+ }
}
+ else
+ xml.append("<ScaleRange/>");
+
xml.append("</Layer>");
MG_HTTP_HANDLER_CATCH_AND_THROW(L"MgHttpCreateRuntimeMap.CreateLayerItem")
Modified: sandbox/jng/createruntimemap/Web/src/HttpHandler/HttpCreateRuntimeMap.h
===================================================================
--- sandbox/jng/createruntimemap/Web/src/HttpHandler/HttpCreateRuntimeMap.h 2013-05-13 12:29:10 UTC (rev 7492)
+++ sandbox/jng/createruntimemap/Web/src/HttpHandler/HttpCreateRuntimeMap.h 2013-05-14 14:31:00 UTC (rev 7493)
@@ -19,10 +19,6 @@
#define _HTTP_CREATE_RUNTIME_MAP_
typedef std::map<STRING, MdfModel::LayerDefinition*> LayerDefinitionMap;
-typedef std::list<STRING> LayerNameList;
-typedef std::list<STRING> GroupNameList;
-typedef std::map<STRING, LayerNameList> LayerParentMap;
-typedef std::map<STRING, GroupNameList> GroupParentMap;
class MgHttpCreateRuntimeMap : public MgHttpRequestResponseHandler
{
@@ -66,17 +62,12 @@
private:
MgByteReader* BuildRuntimeMapXml(MgResourceIdentifier* mdfId, CREFSTRING mapName);
- void CreateGroupItem(MgMappingService* mappingService, MgLayerGroup* group, std::string& xml, MgLayerCollection* layers, MgLayerGroupCollection* groups, const LayerDefinitionMap& layerDefMap);
- void CreateLayerItem(MgMappingService* mappingService, MgLayerBase* layer, std::string& xml, MgLayerCollection* layers, const LayerDefinitionMap& layerDefMap);
+ void CreateGroupItem(MgMappingService* mappingService, MgLayerGroup* group, MgLayerGroup* parent, std::string& xml);
+ void CreateLayerItem(MgMappingService* mappingService, MgLayerBase* layer, MgLayerGroup* parent, MdfModel::LayerDefinition* ldf, std::string& xml);
STRING m_mapDefinition;
INT32 m_requestDataMask;
INT32 m_iconLimitPerScaleRange;
-
- LayerParentMap m_layerParentMap;
- GroupParentMap m_groupParentMap;
- LayerNameList m_topLevelLayers;
- GroupNameList m_topLevelGroups;
};
#endif // _HTTP_CREATE_RUNTIME_MAP_
More information about the mapguide-commits
mailing list