get the Projection object from the MapView. It has a mamber function that will give you exactly what you want.
On Jun 10, 9:01 am, Philip Tucker <[email protected]> wrote: > I'm having trouble with the Google Maps API, specifically handling > touch events in MapView and mapping those events to Geo coordinates. > > Requirement: > I've created a MapActivity containing a MapView. Drag and zoom work > fine, and I've successfully added an ItemizedOverlay that displays and > updates properly. Right now I can add OverlayItems to the map center > via a button, but I would like to add functionality allowing the user > to issue a long click to add an OverlayItem to the map at the selected > location. > > It seems like there should be an easy way to determine the geo > location for a click event in MapView, but from what I've gathered it > requires writing my own pixel->latlong translation based on the view > span. I scavenged snippet from anddev.org and tweaked it to work > properly to translate from screen pixel to GeoPoint: > > private GeoPoint pixelToGeoPoint(int selectedPixelX, int > selectedPixelY) { > Log.v(LOG_ID, "selectedPixel=[" + selectedPixelX + "," + > selectedPixelY + "]"); > > // center point in udegrees > GeoPoint center = mapView.getMapCenter(); > int centerUdegreesX = center.getLongitudeE6(); > int centerUdegreesY = center.getLatitudeE6(); > Log.v(LOG_ID, "centerUdegrees=[" + centerUdegreesX + "," + > centerUdegreesY + "]"); > > // dimension of view area in udegrees > int viewUdegreesX = mapView.getLongitudeSpan(); > int viewUdegreesY = mapView.getLatitudeSpan(); > Log.v(LOG_ID, "viewUdegrees=[" + viewUdegreesX + "," + > viewUdegreesY + "]"); > > // dimension of view area in pixels > int viewPixelsX = mapView.getWidth(); > int viewPixelsY = mapView.getHeight(); > Log.v(LOG_ID, "viewPixels=[" + viewPixelsX + "," + viewPixelsY + > "]"); > > // center point in pixels > int centerPixelX = viewPixelsX / 2; > int centerPixelY = viewPixelsY / 2; > Log.v(LOG_ID, "centerPixel=[" + centerPixelX + "," + centerPixelY > + "]"); > > // udegrees per pixel > int udegreesPerPixelX = viewUdegreesX / viewPixelsY; > int udegreesPerPixelY = viewUdegreesY / viewPixelsX; > Log.v(LOG_ID, "udegreesPerPixel=[" + udegreesPerPixelX + "," + > udegreesPerPixelY + "]"); > > // delta from center of selection, in pixels > int deltaPixelX = selectedPixelX - centerPixelX; > int deltaPixelY = selectedPixelY - centerPixelY; > Log.v(LOG_ID, "deltaPixel=[" + deltaPixelX + "," + deltaPixelY + > "]"); > > // delta from center of selection, in udegrees > int deltaUdegreesX = udegreesPerPixelX * deltaPixelX; > int deltaUdegreesY = -udegreesPerPixelY * deltaPixelY; > Log.v(LOG_ID, "deltaUdegrees=[" + deltaUdegreesX + "," + > deltaUdegreesY + "]"); > > // selection in udegrees > int selectedUdegreesX = centerUdegreesX + deltaUdegreesX; > int selectedUdegreesY = centerUdegreesY + deltaUdegreesY; > Log.v(LOG_ID, "selectedUdegrees=[" + selectedUdegreesX + "," + > selectedUdegreesY + "]"); > > GeoPoint selectedPoint = new GeoPoint(selectedUdegreesY, > selectedUdegreesX); > return selectedPoint; > } > > This sort of works, but it breaks down with the Mercator projection. > ie, latitutes are father apart the father form the equator you are. > Also, if you zoom out far enough, you can go off the top or bottom of > the map. In this case, mapView.getMapCenter() returns a point off the > map (i.e., > 90 or < -90 degrees), but mapView.getLatitudeSpan() > returns the height of only the viewable area. So, it throws the math > off. And I can't figure out a way to grab either the center of the > displayed map section, or the height in microdegrees of the entire > viewable area. I can't even find anything in the API to return any > indication that part of the view is off the map. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Android Beginners" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-beginners?hl=en -~----------~----~----~----~------~----~------~--~---

