Exemplo n.º 1
0
    // Loads quadKey.
    void loadQuadKey(const char* styleFile, const utymap::QuadKey& quadKey, OnMeshBuilt* meshCallback,
                  OnElementLoaded* elementCallback, OnError* errorCallback)
    {
        try {
            auto& eleProvider = quadKey.levelOfDetail <= SrtmElevationLodStart
                ? flatEleProvider_
                : (utymap::heightmap::ElevationProvider&) srtmEleProvider_;

            // TODO: preloading is not thread safe: extract separate API function
            eleProvider.preload(utymap::utils::GeoUtils::quadKeyToBoundingBox(quadKey));

            utymap::mapcss::StyleProvider& styleProvider = *getStyleProvider(styleFile);
            QuadKeyElementVisitor elementVisitor(stringTable_, styleProvider, quadKey.levelOfDetail, elementCallback);
            quadKeyBuilder_.build(quadKey, styleProvider, eleProvider,
                [&meshCallback](const utymap::meshing::Mesh& mesh) {
                meshCallback(mesh.name.data(),
                    mesh.vertices.data(), mesh.vertices.size(),
                    mesh.triangles.data(), mesh.triangles.size(),
                    mesh.colors.data(), mesh.colors.size());
            }, [&elementVisitor](const utymap::entities::Element& element) {
                element.accept(elementVisitor);
            });
        }
        catch (std::exception& ex) {
            errorCallback(ex.what());
        }
    }
Exemplo n.º 2
0
 /// Gets data represented by elements and meshes for given quad key.
 void getDataByQuadKey(int tag,                                 // request tag
                       const char *styleFile,                   // style file
                       int tileX, int tileY, int levelOfDetail, // quad key info
                       int eleDataType,                         // elevation data type
                       OnMeshBuilt *meshCallback,               // mesh callback
                       OnElementLoaded *elementCallback,        // element callback
                       OnError *errorCallback,                  // error callback
                       utymap::CancellationToken *cancellationToken) {
   utymap::QuadKey quadKey(levelOfDetail, tileX, tileY);
   auto eleProviderType = static_cast<ElevationDataType>(eleDataType);
   ::safeExecute([&]() {
     auto &styleProvider = context_.getStyleProvider(styleFile);
     auto &eleProvider = context_.getElevationProvider(quadKey, eleProviderType);
     ExportElementVisitor elementVisitor(tag, quadKey, context_.stringTable, styleProvider, eleProvider, elementCallback);
     context_.quadKeyBuilder.build(
       quadKey, styleProvider, eleProvider,
       [&meshCallback, tag](const utymap::math::Mesh &mesh) {
       // NOTE do not notify if mesh is empty.
       if (!mesh.vertices.empty()) {
         meshCallback(tag, mesh.name.data(),
           mesh.vertices.data(), static_cast<int>(mesh.vertices.size()),
           mesh.triangles.data(), static_cast<int>(mesh.triangles.size()),
           mesh.colors.data(), static_cast<int>(mesh.colors.size()),
           mesh.uvs.data(), static_cast<int>(mesh.uvs.size()),
           mesh.uvMap.data(), static_cast<int>(mesh.uvMap.size()));
       }
     }, [&elementVisitor](const utymap::entities::Element &element) {
       element.accept(elementVisitor);
     }, *cancellationToken);
   }, errorCallback);
 }
//--------------------------------------------------------------------------
/// Read a chunk of metadata XML to populate all members.
/// \param inMetadataXML A string of XML metadata that will be parsed.
/// \returns True if parsing was successful. False if an error occurred.
//--------------------------------------------------------------------------
bool TraceMetadata::ReadFromXML(const gtASCIIString& inMetadataXML)
{
    TiXmlDocument xmlDocument;
    xmlDocument.Parse(inMetadataXML.asCharArray());

    // Create a visitor, which will populate "this" TraceMetadata instance.
    MetadataXMLVisitor elementVisitor(this);
    bool bVisistedSuccessfully = xmlDocument.Accept(&elementVisitor);

    return bVisistedSuccessfully;
}
Exemplo n.º 4
0
 /// Gets data represented by elements matching given text query.
 /// Note, that styles and real elevation height are not included.
 void getDataByText(int tag,                                  // request tag
                    const char *notTerms,                     // NOT terms
                    const char *andTerms,                     // AND terms
                    const char *orTerms,                      // OR terms
                    double minLatitude,                       // min latitude
                    double minLongitude,                      // min longitude
                    double maxLatitude,                       // max latitude
                    double maxLongitude,                      // max longitude
                    int startLod,                             // start lod
                    int endLod,                               // end lod
                    OnElementLoaded *elementCallback,         // element callback
                    OnError *errorCallback,                   // error callback
                    utymap::CancellationToken *cancellationToken) {
   utymap::BoundingBox bbox(utymap::GeoCoordinate(minLatitude, minLongitude),
                            utymap::GeoCoordinate(maxLatitude, maxLongitude));
   utymap::LodRange lodRange(startLod, endLod);
   ExportElementVisitor elementVisitor(tag, context_.stringTable, elementCallback);
   ::safeExecute([&]() {
     context_.geoStore.search(notTerms, andTerms, orTerms, bbox, lodRange, elementVisitor, *cancellationToken);
   }, errorCallback);
 }
Exemplo n.º 5
0
 // Loads quadKey.
 void loadQuadKey(const char* styleFile, 
                  const utymap::QuadKey& quadKey, 
                  OnMeshBuilt* meshCallback,
                  OnElementLoaded* elementCallback, 
                  OnError* errorCallback)
 {
     safeExecute([&]() {
         auto styleProvider = getStyleProvider(styleFile);
         ExportElementVisitor elementVisitor(stringTable_, *styleProvider, quadKey.levelOfDetail, elementCallback);
         quadKeyBuilder_.build(quadKey, *styleProvider, getElevationProvider(quadKey),
             [&meshCallback](const utymap::meshing::Mesh& mesh) {
             // NOTE do not notify if mesh is empty.
             if (!mesh.vertices.empty()) {
                 meshCallback(mesh.name.data(),
                     mesh.vertices.data(), static_cast<int>(mesh.vertices.size()),
                     mesh.triangles.data(), static_cast<int>(mesh.triangles.size()),
                     mesh.colors.data(), static_cast<int>(mesh.colors.size()));
             }
         }, [&elementVisitor](const utymap::entities::Element& element) {
             element.accept(elementVisitor);
         });
     }, errorCallback);
 }