假设我的 Android 应用中有 mapview 控件。如果我知道某个地标存在于某个纬度和经度,我如何确定该地标当前是否在用户的屏幕上可见?有没有获取可见区域左上角和右下角坐标的方法?
问问题
6890 次
4 回答
6
像这样的东西可以解决问题。
private boolean isCurrentLocationVisible()
{
Rect currentMapBoundsRect = new Rect();
Point currentDevicePosition = new Point();
GeoPoint deviceLocation = new GeoPoint((int) (bestCurrentLocation.getLatitude() * 1000000.0), (int) (bestCurrentLocation.getLongitude() * 1000000.0));
mapView.getProjection().toPixels(deviceLocation, currentDevicePosition);
mapView.getDrawingRect(currentMapBoundsRect);
return currentMapBoundsRect.contains(currentDevicePosition.x, currentDevicePosition.y);
}
于 2011-02-12T07:49:31.380 回答
5
您可以将 GeoPoint 投影到 Point 并检查它是否是框(0,屏幕宽度)(0,屏幕高度)
请参阅:https ://developer.android.com/reference/com/google/android/gms/maps/Projection.html
于 2010-02-11T23:19:31.117 回答
1
这是我的 CustomMapView 的完整代码:
package net.alouw.alouwCheckin.ui.map;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Pair;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapView;
/**
* @author Felipe Micaroni Lalli (micaroni@gmail.com)
*/
public class CustomMapView extends MapView {
public CustomMapView(Context context, String s) {
super(context, s);
}
public CustomMapView(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
}
public CustomMapView(Context context, AttributeSet attributeSet, int i) {
super(context, attributeSet, i);
}
/**
*
* @return a Pair of two pairs with: top right corner (lat, lon), bottom left corner (lat, lon)
*/
public Pair<Pair<Double, Double>, Pair<Double, Double>> getMapCorners() {
GeoPoint center = getMapCenter();
int latitudeSpan = getLatitudeSpan();
int longtitudeSpan = getLongitudeSpan();
double topRightLat = (center.getLatitudeE6() + (latitudeSpan / 2.0d)) / 1.0E6;
double topRightLon = (center.getLongitudeE6() + (longtitudeSpan / 2.0d)) / 1.0E6;
double bottomLeftLat = (center.getLatitudeE6() - (latitudeSpan / 2.0d)) / 1.0E6;
double bottomLeftLon = (center.getLongitudeE6() - (longtitudeSpan / 2.0d)) / 1.0E6;
return new Pair<Pair<Double, Double>, Pair<Double, Double>>(
new Pair<Double, Double>(topRightLat, topRightLon),
new Pair<Double, Double>(bottomLeftLat, bottomLeftLon));
}
}
于 2012-12-02T22:50:48.473 回答
-1
好的,因为我现在花了一些时间才找到一个简单的工作解决方案,所以我会在这里发布它;)在您自己的 MapView 子类中,只需使用以下内容:
GeoPoint topLeft = this.getProjection().fromPixels(0, 0);
GeoPoint bottomRight = this.getProjection().fromPixels(getWidth(),getHeight());
就是这样,然后你可以通过
topLeft.getLatitudeE6() / 1E6
topLeft.getLongitudeE6() / 1E6
和
bottomRight.getLatitudeE6() / 1E6
bottomRight.getLongitudeE6() / 1E6
于 2012-09-21T16:06:21.743 回答