我已经在Google和SO上进行了研究,但我卡住了,我觉得我缺少了一些基本的东西。我看到的大多数示例都没有处理任意地图宽度和单个点,只有一个覆盖层的跨度。
我有一个地图点数据库、一个MapView
和一个Geocoder
。我可以在我的应用程序中搜索邮政编码,并由我的Geocoder
返回一个Address
。
使用这个Address
,我可以构建一个GeoPoint
并搜索我的数据库,然后获得附近点的列表。问题在于尝试使用从返回的Address
点和到数据库中最近点的距离构建的跨度进行缩放。
我只想让跨度包含最近的两个点(如果有)。这是相关的代码:
Collections.sort(listingDisplay, mComparator);
listingDisplayAdapter.notifyDataSetChanged();
float spanWidth =0;
if (listingDisplay.size() > 1) {
spanWidth = (float) (2 * distanceFromPoint(listingDisplay.get(1),
current));
} else if (listingDisplay.size() == 1) {
spanWidth = (float) (2 * distanceFromPoint(listingDisplay.get(0),
current));
}
Log.v(TAG, "SpanWidth: " + spanWidth);
// Create span
int minLat = (int) (current.getLatitudeE6() - (spanWidth * 1E6) / 2);
int maxLat = (int) (current.getLatitudeE6() + (spanWidth * 1E6) / 2);
int minLong = (int) (current.getLongitudeE6() - (spanWidth * 1E6) / 2);
int maxLong = (int) (current.getLongitudeE6() + (spanWidth * 1E6) / 2);
// Zoom against span. This appears to create a very small region that doesn't encompass the points
mapController.setCenter(current);
mapController.zoomToSpan(Math.abs( minLat - maxLat ), Math.abs( minLong - maxLong ));
ListingDisplay
包含了一组最接近的点,使用比较器 mComparator
对这个列表进行排序,将最接近我的返回地址(称为 current
的 GeoPoint
)放在列表顶部。
然后,我根据最接近的点设置 spanWidth
的值,并尝试从中计算出跨度。
我的问题是,如何根据给定的距离和中心点构建一个跨度?