You need to set the transform of the Body to move it to the specified coordinates:
body.setTransform(position.x, position.y, body.getAngle());
Doing that will snap the Body to the coordinates and will give you an accurate way of dragging the Body, but beware that the simulation might be unstable in some scenarios as you are moving things explicity instead of using forces and velocities (usually it's fine though).

The full source for the example above is:
public class SandboxGame extends ApplicationAdapter { private OrthographicCamera camera; private World world; private Box2DDebugRenderer debugRenderer; private Body body; private Body kinematicBody; private Body ground; private Vector3 unprojectVector = new Vector3(); private Vector2 worldTouchPosition = new Vector2(); @Override public void create () { float aspectRatio = (float)Gdx.graphics.getWidth() / Gdx.graphics.getHeight(); float w = 100.0f; camera = new OrthographicCamera(w, w / aspectRatio); world = new World(new Vector2(0, -80), false); debugRenderer = new Box2DDebugRenderer(); // Create body { PolygonShape shape = new PolygonShape(); shape.setAsBox(4, 4); FixtureDef fixtureDef = new FixtureDef(); fixtureDef.shape = shape; fixtureDef.density = 1.0f; BodyDef bodyDef = new BodyDef(); bodyDef.type = BodyDef.BodyType.DynamicBody; body = world.createBody(bodyDef); body.createFixture(fixtureDef); shape.dispose(); } // Create kinematic body { PolygonShape shape = new PolygonShape(); shape.setAsBox(4, 2); FixtureDef fixtureDef = new FixtureDef(); fixtureDef.shape = shape; fixtureDef.density = 1.0f; BodyDef bodyDef = new BodyDef(); bodyDef.type = BodyDef.BodyType.KinematicBody; kinematicBody = world.createBody(bodyDef); kinematicBody.createFixture(fixtureDef); kinematicBody.setTransform(-20, 0, 0); shape.dispose(); } // Create ground { PolygonShape shape = new PolygonShape(); shape.setAsBox(100, 2); FixtureDef fixtureDef = new FixtureDef(); fixtureDef.shape = shape; fixtureDef.density = 1.0f; BodyDef bodyDef = new BodyDef(); bodyDef.type = BodyDef.BodyType.StaticBody; ground = world.createBody(bodyDef); ground.createFixture(fixtureDef); ground.setTransform(0, -20, 0); shape.dispose(); } Gdx.input.setInputProcessor(new InputAdapter() { public boolean touchDragged(int screenX, int screenY, int pointer) { Vector2 position = unproject(screenX, screenY); kinematicBody.setTransform(position.x, position.y, kinematicBody.getAngle()); return false; } }); } @Override public void render () { world.step(Gdx.graphics.getDeltaTime(), 6, 6); camera.update(); ScreenUtils.clear(Color.BLACK); debugRenderer.render(world, camera.combined); } private Vector2 unproject(int screenX, int screenY) { camera.unproject(unprojectVector.set(screenX, screenY, 1)); worldTouchPosition.set(unprojectVector.x, unprojectVector.y); return worldTouchPosition; } }