mirror of
https://codeberg.org/comaps/comaps
synced 2026-01-01 02:23:45 +00:00
[routing] New API for lanes
Signed-off-by: Andrei Shkrob <github@shkrob.dev>
This commit is contained in:
@@ -26,13 +26,14 @@ set(SRC
|
||||
app/organicmaps/sdk/search/SearchEngine.cpp
|
||||
app/organicmaps/sdk/search/SearchRecents.cpp
|
||||
app/organicmaps/sdk/routing/JunctionInfo.hpp
|
||||
app/organicmaps/sdk/routing/LaneInfo.cpp
|
||||
app/organicmaps/sdk/routing/LaneInfo.hpp
|
||||
app/organicmaps/sdk/routing/RouteMarkData.hpp
|
||||
app/organicmaps/sdk/routing/RouteMarkType.hpp
|
||||
app/organicmaps/sdk/routing/RoutePointInfo.hpp
|
||||
app/organicmaps/sdk/routing/RouteRecommendationType.hpp
|
||||
app/organicmaps/sdk/routing/RoutingInfo.hpp
|
||||
app/organicmaps/sdk/routing/RoutingOptions.cpp
|
||||
app/organicmaps/sdk/routing/SingleLaneInfo.hpp
|
||||
app/organicmaps/sdk/routing/TransitRouteInfo.hpp
|
||||
app/organicmaps/sdk/routing/TransitStepInfo.hpp
|
||||
app/organicmaps/sdk/ChoosePositionMode.cpp
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
#include "LaneInfo.hpp"
|
||||
|
||||
#include "app/organicmaps/sdk/core/jni_helper.hpp"
|
||||
|
||||
#include <vector>
|
||||
|
||||
namespace
|
||||
{
|
||||
jobject ToJavaLaneWay(JNIEnv * env, routing::turns::lanes::LaneWay const & laneWay)
|
||||
{
|
||||
static jclass const laneWayClass = jni::GetGlobalClassRef(env, "app/organicmaps/sdk/routing/LaneWay");
|
||||
jfieldID fieldID =
|
||||
env->GetStaticFieldID(laneWayClass, DebugPrint(laneWay).c_str(), "Lapp/organicmaps/sdk/routing/LaneWay;");
|
||||
return env->GetStaticObjectField(laneWayClass, fieldID);
|
||||
}
|
||||
} // namespace
|
||||
|
||||
jobjectArray CreateLanesInfo(JNIEnv * env, routing::turns::lanes::LanesInfo const & lanes)
|
||||
{
|
||||
if (lanes.empty())
|
||||
return nullptr;
|
||||
|
||||
static jclass const laneWayClass = jni::GetGlobalClassRef(env, "app/organicmaps/sdk/routing/LaneWay");
|
||||
static jclass const laneInfoClass = jni::GetGlobalClassRef(env, "app/organicmaps/sdk/routing/LaneInfo");
|
||||
auto const lanesSize = static_cast<jsize>(lanes.size());
|
||||
jobjectArray jLanes = env->NewObjectArray(lanesSize, laneInfoClass, nullptr);
|
||||
ASSERT(jLanes, (jni::DescribeException()));
|
||||
// Java signature : LaneInfo(LaneWay[] laneWays, LaneWay activeLane)
|
||||
static jmethodID const ctorLaneInfoID = jni::GetConstructorID(
|
||||
env, laneInfoClass, "([Lapp/organicmaps/sdk/routing/LaneWay;Lapp/organicmaps/sdk/routing/LaneWay;)V");
|
||||
|
||||
for (jsize j = 0; j < lanesSize; ++j)
|
||||
{
|
||||
auto const laneWays = lanes[j].laneWays.GetActiveLaneWays();
|
||||
auto const laneWaysSize = static_cast<jsize>(laneWays.size());
|
||||
jni::TScopedLocalObjectArrayRef jLaneWays(env, env->NewObjectArray(laneWaysSize, laneWayClass, nullptr));
|
||||
ASSERT(jLanes, (jni::DescribeException()));
|
||||
for (jsize i = 0; i < laneWaysSize; ++i)
|
||||
{
|
||||
jni::TScopedLocalRef jLaneWay(env, ToJavaLaneWay(env, laneWays[i]));
|
||||
env->SetObjectArrayElement(jLaneWays.get(), i, jLaneWay.get());
|
||||
}
|
||||
jni::TScopedLocalRef jLaneInfo(env, env->NewObject(laneInfoClass, ctorLaneInfoID, jLaneWays.get(),
|
||||
ToJavaLaneWay(env, lanes[j].recommendedWay)));
|
||||
ASSERT(jLaneInfo.get(), (jni::DescribeException()));
|
||||
env->SetObjectArrayElement(jLanes, j, jLaneInfo.get());
|
||||
}
|
||||
|
||||
return jLanes;
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <jni.h>
|
||||
|
||||
#include "routing/lanes/lane_info.hpp"
|
||||
|
||||
jobjectArray CreateLanesInfo(JNIEnv * env, routing::turns::lanes::LanesInfo const & lanes);
|
||||
@@ -1,7 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "app/organicmaps/sdk/core/jni_helper.hpp"
|
||||
#include "app/organicmaps/sdk/routing/SingleLaneInfo.hpp"
|
||||
#include "app/organicmaps/sdk/routing/LaneInfo.hpp"
|
||||
#include "app/organicmaps/sdk/util/Distance.hpp"
|
||||
|
||||
#include "map/routing_manager.hpp"
|
||||
@@ -13,12 +13,13 @@ jobject CreateRoutingInfo(JNIEnv * env, routing::FollowingInfo const & info, Rou
|
||||
// String currentStreet, String nextStreet, String nextNextStreet,
|
||||
// double completionPercent, int vehicleTurnOrdinal, int
|
||||
// vehicleNextTurnOrdinal, int pedestrianTurnOrdinal, int exitNum,
|
||||
// int totalTime, SingleLaneInfo[] lanes)
|
||||
// int totalTime, LaneInfo[] lanes, double speedLimitMps, boolean speedLimitExceeded,
|
||||
// boolean shouldPlayWarningSignal)
|
||||
static jmethodID const ctorRouteInfoID =
|
||||
jni::GetConstructorID(env, klass,
|
||||
"(Lapp/organicmaps/sdk/util/Distance;Lapp/organicmaps/sdk/util/Distance;"
|
||||
"Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;DIIIII"
|
||||
"[Lapp/organicmaps/sdk/routing/SingleLaneInfo;DZZ)V");
|
||||
"[Lapp/organicmaps/sdk/routing/LaneInfo;DZZ)V");
|
||||
|
||||
jobjectArray jLanes = CreateLanesInfo(env, info.m_lanes);
|
||||
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include "app/organicmaps/sdk/core/jni_helper.hpp"
|
||||
|
||||
#include "routing/following_info.hpp"
|
||||
|
||||
#include <vector>
|
||||
|
||||
jobjectArray CreateLanesInfo(JNIEnv * env, std::vector<routing::FollowingInfo::SingleLaneInfoClient> const & lanes)
|
||||
{
|
||||
if (lanes.empty())
|
||||
return nullptr;
|
||||
|
||||
static jclass const laneClass = jni::GetGlobalClassRef(env, "app/organicmaps/sdk/routing/SingleLaneInfo");
|
||||
auto const lanesSize = static_cast<jsize>(lanes.size());
|
||||
jobjectArray jLanes = env->NewObjectArray(lanesSize, laneClass, nullptr);
|
||||
ASSERT(jLanes, (jni::DescribeException()));
|
||||
static jmethodID const ctorSingleLaneInfoID = jni::GetConstructorID(env, laneClass, "([BZ)V");
|
||||
|
||||
for (jsize j = 0; j < lanesSize; ++j)
|
||||
{
|
||||
auto const laneSize = static_cast<jsize>(lanes[j].m_lane.size());
|
||||
jni::TScopedLocalByteArrayRef singleLane(env, env->NewByteArray(laneSize));
|
||||
ASSERT(singleLane.get(), (jni::DescribeException()));
|
||||
env->SetByteArrayRegion(singleLane.get(), 0, laneSize, lanes[j].m_lane.data());
|
||||
|
||||
jni::TScopedLocalRef singleLaneInfo(
|
||||
env, env->NewObject(laneClass, ctorSingleLaneInfoID, singleLane.get(), lanes[j].m_isRecommended));
|
||||
ASSERT(singleLaneInfo.get(), (jni::DescribeException()));
|
||||
env->SetObjectArrayElement(jLanes, j, singleLaneInfo.get());
|
||||
}
|
||||
|
||||
return jLanes;
|
||||
}
|
||||
Reference in New Issue
Block a user