[mapguide-commits] r9531 - in sandbox/jng/mvt: Common/Renderers Server/src/Services/Rendering Server/src/Services/Tile Server/src/UnitTesting
svn_mapguide at osgeo.org
svn_mapguide at osgeo.org
Mon Jun 3 04:52:36 PDT 2019
Author: jng
Date: 2019-06-03 04:52:35 -0700 (Mon, 03 Jun 2019)
New Revision: 9531
Modified:
sandbox/jng/mvt/Common/Renderers/MVTRenderer.cpp
sandbox/jng/mvt/Server/src/Services/Rendering/ServerRenderingService.cpp
sandbox/jng/mvt/Server/src/Services/Tile/TileCacheXYZProvider.cpp
sandbox/jng/mvt/Server/src/UnitTesting/TestRenderingService.cpp
sandbox/jng/mvt/Server/src/UnitTesting/TestRenderingService.h
Log:
MVTrenderer changes:
- Optimize all input linebuffers before passing them to vtzero
- Add missing null property checks when writing out properties
Also:
- Add test for RenderTileMVT
- Wire up MVT rendering in tile service
Modified: sandbox/jng/mvt/Common/Renderers/MVTRenderer.cpp
===================================================================
--- sandbox/jng/mvt/Common/Renderers/MVTRenderer.cpp 2019-06-02 12:42:11 UTC (rev 9530)
+++ sandbox/jng/mvt/Common/Renderers/MVTRenderer.cpp 2019-06-03 11:52:35 UTC (rev 9531)
@@ -78,6 +78,11 @@
for (int i = 0; i < count; i++)
{
auto name = propNames[i];
+ if (activeFeature->IsNull(name))
+ {
+ continue;
+ }
+
std::string mbName;
UnicodeString::WideCharToMultiByte(name, mbName);
auto propType = activeFeature->GetPropertyType(name);
@@ -164,6 +169,7 @@
if (lb->cntr_count() == 1)
{
auto numPoints = lb->cntr_size(0);
+ builder.add_linestring(numPoints);
auto pointOffset = lb->contour_start_point(0);
for (auto i = 0; i < numPoints; i++)
{
@@ -316,13 +322,27 @@
//Entry point for polygon rendering. Perform any pre-rendering operations.
void MVTRenderer::ProcessPolygon(LineBuffer * lb, RS_FillStyle & fill)
{
- m_impl->ProcessPolygon(m_activeFeature, lb);
+ //vtzero is very finicky about redundant coordinates, so feed vtzero an optimized LineBuffer
+ //that should weed such coordinates out
+ auto workbuffer = lb->Optimize(m_drawingScale, m_pPool);
+ std::unique_ptr<LineBuffer> spLB(workbuffer);
+
+ m_impl->ProcessPolygon(m_activeFeature, workbuffer);
+
+ LineBufferPool::FreeLineBuffer(m_pPool, spLB.release());
}
//Entry point for polyline rendering. Perform any pre-rendering operations.
void MVTRenderer::ProcessPolyline(LineBuffer * lb, RS_LineStroke & lsym)
{
- m_impl->ProcessPolyline(m_activeFeature, lb);
+ //vtzero is very finicky about redundant coordinates, so feed vtzero an optimized LineBuffer
+ //that should weed such coordinates out
+ auto workbuffer = lb->Optimize(m_drawingScale, m_pPool);
+ std::unique_ptr<LineBuffer> spLB(workbuffer);
+
+ m_impl->ProcessPolyline(m_activeFeature, workbuffer);
+
+ LineBufferPool::FreeLineBuffer(m_pPool, spLB.release());
}
//Entry point for raster/image rendering. Perform any pre-rendering operations.
@@ -336,7 +356,14 @@
//Entry point for marker rendering. Perform any pre-rendering operations.
void MVTRenderer::ProcessMarker(LineBuffer * lb, RS_MarkerDef & mdef, bool allowOverpost, RS_Bounds * bounds)
{
- m_impl->ProcessMarker(m_activeFeature, lb);
+ //vtzero is very finicky about redundant coordinates, so feed vtzero an optimized LineBuffer
+ //that should weed such coordinates out
+ auto workbuffer = lb->Optimize(m_drawingScale, m_pPool);
+ std::unique_ptr<LineBuffer> spLB(workbuffer);
+
+ m_impl->ProcessMarker(m_activeFeature, workbuffer);
+
+ LineBufferPool::FreeLineBuffer(m_pPool, spLB.release());
}
//Entry point for label group rendering.
Modified: sandbox/jng/mvt/Server/src/Services/Rendering/ServerRenderingService.cpp
===================================================================
--- sandbox/jng/mvt/Server/src/Services/Rendering/ServerRenderingService.cpp 2019-06-02 12:42:11 UTC (rev 9530)
+++ sandbox/jng/mvt/Server/src/Services/Rendering/ServerRenderingService.cpp 2019-06-03 11:52:35 UTC (rev 9531)
@@ -555,7 +555,7 @@
dr.StartMap(&mapInfo, extent, scale, map->GetDisplayDpi(), map->GetMetersPerUnit(), NULL);
// We can't use RenderMapInternal, but we can use RenderLayers, which is all we really need
- RenderLayers(map, roLayers, &ds, &dr, dstCs, true, scale, L"UTFGRID", NULL);
+ RenderLayers(map, roLayers, &ds, &dr, dstCs, true, scale, L"MVT", NULL);
dr.EndMap();
Modified: sandbox/jng/mvt/Server/src/Services/Tile/TileCacheXYZProvider.cpp
===================================================================
--- sandbox/jng/mvt/Server/src/Services/Tile/TileCacheXYZProvider.cpp 2019-06-02 12:42:11 UTC (rev 9530)
+++ sandbox/jng/mvt/Server/src/Services/Tile/TileCacheXYZProvider.cpp 2019-06-03 11:52:35 UTC (rev 9531)
@@ -83,6 +83,11 @@
// generate the tile
img = svcRendering->RenderTileUTFGrid(map, baseMapLayerGroupName, tileRow, tileColumn, scaleIndex, map->GetDisplayDpi());
}
+ else if (m_format == L"MVT")
+ {
+ // generate the tile
+ img = svcRendering->RenderTileMVT(map, baseMapLayerGroupName, tileRow, tileColumn, scaleIndex, map->GetDisplayDpi());
+ }
else //Assume it must be image-based at this point
{
// generate the tile
Modified: sandbox/jng/mvt/Server/src/UnitTesting/TestRenderingService.cpp
===================================================================
--- sandbox/jng/mvt/Server/src/UnitTesting/TestRenderingService.cpp 2019-06-02 12:42:11 UTC (rev 9530)
+++ sandbox/jng/mvt/Server/src/UnitTesting/TestRenderingService.cpp 2019-06-03 11:52:35 UTC (rev 9531)
@@ -1897,6 +1897,47 @@
}
}
+void TestRenderingService::TestCase_RenderTileMVT()
+{
+ try
+ {
+ Ptr<MgMap> map = CreateTestXYZMap();
+
+ //For ease of visual verfication, render the XYZ image tiles as baseline
+ Ptr<MgByteReader> imgTL = m_svcRendering->RenderTileXYZ(map, L"BaseLayers", 16797, 23893, 16, 96, MgImageFormats::Png);
+ Ptr<MgByteReader> imgTR = m_svcRendering->RenderTileXYZ(map, L"BaseLayers", 16798, 23893, 16, 96, MgImageFormats::Png);
+ Ptr<MgByteReader> imgBL = m_svcRendering->RenderTileXYZ(map, L"BaseLayers", 16797, 23894, 16, 96, MgImageFormats::Png);
+ Ptr<MgByteReader> imgBR = m_svcRendering->RenderTileXYZ(map, L"BaseLayers", 16798, 23894, 16, 96, MgImageFormats::Png);
+
+ imgTL->ToFile(L"../UnitTestFiles/RenderTileMVT_TL_ImageBaseline.png");
+ imgTR->ToFile(L"../UnitTestFiles/RenderTileMVT_TR_ImageBaseline.png");
+ imgBL->ToFile(L"../UnitTestFiles/RenderTileMVT_BL_ImageBaseline.png");
+ imgBR->ToFile(L"../UnitTestFiles/RenderTileMVT_BR_ImageBaseline.png");
+
+ //Now render the utf grids at the same place
+ Ptr<MgByteReader> mvtTL = m_svcRendering->RenderTileMVT(map, L"BaseLayers", 16797, 23893, 16, 96);
+ Ptr<MgByteReader> mvtTR = m_svcRendering->RenderTileMVT(map, L"BaseLayers", 16798, 23893, 16, 96);
+ Ptr<MgByteReader> mvtBL = m_svcRendering->RenderTileMVT(map, L"BaseLayers", 16797, 23894, 16, 96);
+ Ptr<MgByteReader> mvtBR = m_svcRendering->RenderTileMVT(map, L"BaseLayers", 16798, 23894, 16, 96);
+
+ CPPUNIT_ASSERT(MgMimeType::Mvt == mvtTL->GetMimeType());
+ CPPUNIT_ASSERT(MgMimeType::Mvt == mvtTR->GetMimeType());
+ CPPUNIT_ASSERT(MgMimeType::Mvt == mvtBL->GetMimeType());
+ CPPUNIT_ASSERT(MgMimeType::Mvt == mvtBR->GetMimeType());
+
+ mvtTL->ToFile(L"../UnitTestFiles/RenderTileMVT_TL.mvt");
+ mvtTR->ToFile(L"../UnitTestFiles/RenderTileMVT_TR.mvt");
+ mvtBL->ToFile(L"../UnitTestFiles/RenderTileMVT_BL.mvt");
+ mvtBR->ToFile(L"../UnitTestFiles/RenderTileMVT_UR.mvt");
+ }
+ catch (MgException* e)
+ {
+ STRING message = e->GetDetails(TEST_LOCALE);
+ SAFE_RELEASE(e);
+ CPPUNIT_FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+ }
+}
+
STRING TestRenderingService::GetPath(CREFSTRING basePath, CREFSTRING imageFormat, CREFSTRING extension)
{
STRING ret;
Modified: sandbox/jng/mvt/Server/src/UnitTesting/TestRenderingService.h
===================================================================
--- sandbox/jng/mvt/Server/src/UnitTesting/TestRenderingService.h 2019-06-02 12:42:11 UTC (rev 9530)
+++ sandbox/jng/mvt/Server/src/UnitTesting/TestRenderingService.h 2019-06-03 11:52:35 UTC (rev 9531)
@@ -64,6 +64,7 @@
CPPUNIT_TEST(TestCase_RenderTilePNG);
CPPUNIT_TEST(TestCase_RenderTileXYZ_PNG);
CPPUNIT_TEST(TestCase_RenderTileUTFGrid);
+ CPPUNIT_TEST(TestCase_RenderTileMVT);
CPPUNIT_TEST(TestCase_StylizationFunctionsPNG8);
@@ -229,6 +230,7 @@
void TestCase_RenderTilePNG() { TestCase_RenderTile(L"PNG", L"png"); }
void TestCase_RenderTileXYZ_PNG() { TestCase_RenderTileXYZ(L"PNG", L"png"); }
void TestCase_RenderTileUTFGrid();
+ void TestCase_RenderTileMVT();
//PNG8 output tests
void TestCase_RenderDynamicOverlayPNG8() { TestCase_RenderDynamicOverlay(L"PNG8", L"png"); }
More information about the mapguide-commits
mailing list