Beispiel #1
0
OfflineRegionDefinition decodeOfflineRegionDefinition(const std::string& region) {
    rapidjson::GenericDocument<rapidjson::UTF8<>, rapidjson::CrtAllocator> doc;
    doc.Parse<0>(region.c_str());

    if (doc.HasParseError() ||
        !doc.HasMember("style_url") || !doc["style_url"].IsString() ||
        !doc.HasMember("bounds") || !doc["bounds"].IsArray() || doc["bounds"].Size() != 4 ||
          !doc["bounds"][0].IsDouble() || !doc["bounds"][1].IsDouble() ||
          !doc["bounds"][2].IsDouble() || !doc["bounds"][3].IsDouble() ||
        !doc.HasMember("min_zoom") || !doc["min_zoom"].IsDouble() ||
        (doc.HasMember("max_zoom") && !doc["max_zoom"].IsDouble()) ||
        !doc.HasMember("pixel_ratio") || !doc["pixel_ratio"].IsDouble()) {
        throw std::runtime_error("Malformed offline region definition");
    }

    std::string styleURL { doc["style_url"].GetString(), doc["style_url"].GetStringLength() };
    LatLngBounds bounds = LatLngBounds::hull(
        LatLng(doc["bounds"][0].GetDouble(), doc["bounds"][1].GetDouble()),
        LatLng(doc["bounds"][2].GetDouble(), doc["bounds"][3].GetDouble()));
    double minZoom = doc["min_zoom"].GetDouble();
    double maxZoom = doc.HasMember("max_zoom") ? doc["max_zoom"].GetDouble() : INFINITY;
    float pixelRatio = doc["pixel_ratio"].GetDouble();

    return { styleURL, bounds, minZoom, maxZoom, pixelRatio };
}
Beispiel #2
0
OfflineRegionDefinition decodeOfflineRegionDefinition(const std::string& region) {
    rapidjson::GenericDocument<rapidjson::UTF8<>, rapidjson::CrtAllocator> doc;
    doc.Parse<0>(region.c_str());

    // validation

    auto hasValidBounds = [&] {
        return doc.HasMember("bounds") && doc["bounds"].IsArray() && doc["bounds"].Size() == 4
               && doc["bounds"][0].IsDouble() && doc["bounds"][1].IsDouble()
               && doc["bounds"][2].IsDouble() && doc["bounds"][3].IsDouble();
    };

    auto hasValidGeometry = [&] {
        return doc.HasMember("geometry") && doc["geometry"].IsObject();
    };

    if (doc.HasParseError()
        || !doc.HasMember("style_url") || !doc["style_url"].IsString()
        || !(hasValidBounds() || hasValidGeometry())
        || !doc.HasMember("min_zoom") || !doc["min_zoom"].IsDouble()
        || (doc.HasMember("max_zoom") && !doc["max_zoom"].IsDouble())
        || !doc.HasMember("pixel_ratio") || !doc["pixel_ratio"].IsDouble()
        || (doc.HasMember("include_ideographs") && !doc["include_ideographs"].IsBool())) {
        throw std::runtime_error("Malformed offline region definition");
    }

    // Common properties

    std::string styleURL { doc["style_url"].GetString(), doc["style_url"].GetStringLength() };
    double minZoom = doc["min_zoom"].GetDouble();
    double maxZoom = doc.HasMember("max_zoom") ? doc["max_zoom"].GetDouble() : INFINITY;
    float pixelRatio = doc["pixel_ratio"].GetDouble();
    bool includeIdeographs = doc.HasMember("include_ideographs") ? doc["include_ideographs"].GetBool() : true;
    
    if (doc.HasMember("bounds")) {
        return OfflineTilePyramidRegionDefinition{
                styleURL,
                LatLngBounds::hull(
                         LatLng(doc["bounds"][0].GetDouble(), doc["bounds"][1].GetDouble()),
                         LatLng(doc["bounds"][2].GetDouble(), doc["bounds"][3].GetDouble())),
                minZoom, maxZoom, pixelRatio, includeIdeographs };
    } else {
        return OfflineGeometryRegionDefinition{
                styleURL,
                mapbox::geojson::convert<Geometry<double>>(doc["geometry"].GetObject()),
                minZoom, maxZoom, pixelRatio, includeIdeographs };
    };

}
Beispiel #3
0
    static inline const LatLng latLngForProjectedMeters(const ProjectedMeters projectedMeters) {
        double latitude = (2 * std::atan(std::exp(projectedMeters.northing / util::EARTH_RADIUS_M)) - (M_PI / 2)) * util::RAD2DEG;
        double longitude = projectedMeters.easting * util::RAD2DEG / util::EARTH_RADIUS_M;

        latitude = std::fmin(std::fmax(latitude, -util::LATITUDE_MAX), util::LATITUDE_MAX);
        
        return LatLng(latitude, longitude);
    }
Beispiel #4
0
void Map::resetPosition() {
    CameraOptions options;
    options.angle = 0;
    options.center = LatLng(0, 0);
    options.zoom = 0;
    transform->jumpTo(options);
    update(Update::Zoom);
}
Beispiel #5
0
void MapPage::evalSetPolylineAndFitBounds(const QList<QPointF> &apoly) const {
    QString cmd = "var poly=[];";
    for (int i=0; i<apoly.length(); i++) {
        cmd += "poly.push(" + LatLng(apoly[i]) + ");";
    }
    cmd += "curRoute.setPolylineAndFitBounds(poly);";
    // qDebug() << "evalSetPolylineAndFitBounds()" << cmd;
    this->mainFrame()->evaluateJavaScript(cmd);
}
    static LatLng latLngForProjectedMeters(const ProjectedMeters& projectedMeters) {
        double latitude = (2 * std::atan(std::exp(projectedMeters.northing / util::EARTH_RADIUS_M)) - (M_PI / 2.0)) * util::RAD2DEG;
        double longitude = projectedMeters.easting * util::RAD2DEG / util::EARTH_RADIUS_M;

        latitude = util::clamp(latitude, -util::LATITUDE_MAX, util::LATITUDE_MAX);
        longitude = util::clamp(longitude, -util::LONGITUDE_MAX, util::LONGITUDE_MAX);

        return LatLng(latitude, longitude);
    }
Beispiel #7
0
void MapPage::evalJoinWithCurRoute(const MapRoute &amapRoute) const {
    QString cmd = "var poly=[];";
    for (int i=0; i<amapRoute.getPolyline().length(); i++) {
        cmd += "poly.push(" + LatLng(amapRoute.getPolyline().at(i)) + ");";
    }
    cmd += QString("var len=%1;").arg(amapRoute.getDistanceInMeter());
    cmd += "curRoute.joinWithCurRoute(poly,len);";
   // qDebug() << "evalJoinWithCurRoute=" << cmd;
    this->mainFrame()->evaluateJavaScript(cmd);
}
 void extend(const LatLng& point) {
     sw = LatLng(std::min(point.latitude(), sw.latitude()),
                 std::min(point.longitude(), sw.longitude()));
     ne = LatLng(std::max(point.latitude(), ne.latitude()),
                 std::max(point.longitude(), ne.longitude()));
 }
 LatLng center() const {
     return LatLng((sw.latitude() + ne.latitude()) / 2,
                   (sw.longitude() + ne.longitude()) / 2);
 }
 LatLng northwest() const { return LatLng(north(), west()); }
 LatLng southeast() const { return LatLng(south(), east()); }
Beispiel #12
0
void Map::resetPosition() {
    transform->setAngle(0);
    transform->setLatLng(LatLng(0, 0));
    transform->setZoom(0);
    update(Update::Zoom);
}
Beispiel #13
0
void MapPage::evalSetPrevPos(QPointF aprevPos) const {
    QString cmd = "curRoute.setPrevPos(" + LatLng(aprevPos) + ");";
    qDebug() << "evalSetPrevPos()" << cmd;
    this->mainFrame()->evaluateJavaScript(cmd);
}