Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to get Map coordinates on taping on the map #51

Closed
Shiba-Kar opened this issue Jan 20, 2023 · 10 comments
Closed

How to get Map coordinates on taping on the map #51

Shiba-Kar opened this issue Jan 20, 2023 · 10 comments

Comments

@Shiba-Kar
Copy link

No description provided.

@geisterfurz007
Copy link

You can use the onTapListener callback on the map:

onTapListener: _onTap,

@Shiba-Kar
Copy link
Author

@geisterfurz007 its not giving the exact latitude and longitude of the tapped location in the map its returning the coordinates of the screen.

@geisterfurz007
Copy link

@Shiba-Kar That's what the returned class wants you to believe. If you print the values, you should see globe coordinates. If that is not the case, you can always convert between screen and map coordinates with the respective methods on MapboxMap.

@Shiba-Kar
Copy link
Author

@Shiba-Kar That's what the returned class wants you to believe. If you print the values, you should see globe coordinates. If that is not the case, you can always convert between screen and map coordinates with the respective methods on MapboxMap.

How to convert between screen and map coordinates with the respective methods on

@geisterfurz007
Copy link

@LjubiTech-Maxko
Copy link
Contributor

import 'package:mapbox_maps_flutter/mapbox_maps_flutter.dart';
import 'package:turf/turf.dart' as turf;

// Callback for MapWidget onTapListener
Future<void> onTapListener(ScreenCoordinate coord) async {
  // coord is actually map coordinates, and conv is converted value to actual screen coordinates.
  final ScreenCoordinate conv = await _mapboxMap!.pixelForCoordinate(
    turf.Point(
      coordinates: turf.Position(
        coord.y, coord.x,
      ),
    ).toJson(),
  );
}

@Shiba-Kar
Copy link
Author

Shiba-Kar commented Jan 29, 2023

@geisterfurz007 @LjubiTech-Maxko thanks !!! 👍🏼

@Shiba-Kar
Copy link
Author

  1. Callback for MapWidget onTapListener
 Future _addPin(ScreenCoordinate screenCoordinate) async {
    var conv = await _mapboxMap.coordinateForPixel(screenCoordinate);
    final coordinates = conv['coordinates']! as List<Object?>;
    var x = coordinates.map((e) => e as num).toList();
    var position = Position.fromJson(x);

    await _positionMarker(
        "totempole", "assets/images/user_totem.png", position);
  }
  1. Place the marker on the map
Future _positionMarker(
      String name, String assetName, Position position) async {
    final ByteData bytes = await rootBundle.load(assetName);
    var list = bytes.buffer.asUint8List();
    var x = await _mapboxMap.annotations.createPointAnnotationManager();
    var xx = await x.create(
      PointAnnotationOptions(
        image: list,
        geometry: Point(coordinates: position).toJson(),
      ),
    );
  }

Does not place the marker where the tap is registered it is positioned very off from the tap place !!.

@Shiba-Kar Shiba-Kar reopened this Jan 29, 2023
@geisterfurz007
Copy link

Again: You receive map coordinates from the callback, not screen coordinates. You do not have to convert anything. The class is called ScreenCoordinate but that is not accurate. Do yourself and others in the thread a favour and print the value you get from the callback to verify this and understand how to continue to work with them.

@Shiba-Kar
Copy link
Author

@geisterfurz007 ScreenCoordinate confused me !!. yes it works as it should .

   {x: 43.59772105745384, y: 52.233343976845674}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants