出行类APP的起终点位置的选择以及社交类应用的位置分享。
核心类/接口
类 | 接口 | 说明 | 版本 |
---|---|---|---|
MAMapView | setCenterCoordinate:animated: | 设置地图中心点。 | V2.0.0版本起 |
AMapSearchAPI | AMapReGoecodeSearch: | 逆地址编码查询接口。 | V3.0.0版本起 |
AMapPOIAroundSearch: | POI周边查询接口。 | V3.0.0版本起 | |
AMapReGeocodeSearchRequest | location | 中心点坐标。 | V3.0.0版本起 |
requireExtension | 是否返回扩展信息,默认NO。 | V3.0.0版本起 | |
AMapPOIAroundSearchRequest | location | 中心点坐标。 | V3.0.0版本起 |
radius | 查询半径,范围:0-50000,单位:米 [default = 3000] 。 | V3.0.0版本起 | |
AMapPOISearchBaseRequest | types | 类型,多个类型用“分割 可选值:文本分类、分类代码 。 | V3.0.0版本起 |
requireExtension | 是否返回扩展信息,默认NO。 | V3.0.0版本起 | |
AMapSearchDelegate | onPOISearchDone:response: | POI查询回调函数。 | V3.0.0版本起 |
1、指定所需类型进行相关 POI 的搜索,这个示例中的类型编码,如下:
若您的业务需要搜索其他类型的POI,请参考POI分类表。
2、第一次进到页面中,基于定位位置,在定位回调中进行POI搜索和逆地理编码。
- (void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation updatingLocation:(BOOL)updatingLocation
{
if(!updatingLocation)
return ;
if (userLocation.location.horizontalAccuracy < 0)
{
return ;
}
// only the first locate used.
if (!self.isLocated)
{
self.isLocated = YES;
[self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(userLocation.location.coordinate.latitude, userLocation.location.coordinate.longitude)];
[self actionSearchAround];
self.mapView.userTrackingMode = MAUserTrackingModeFollow;
}
}
func mapView(_ mapView: MAMapView!, didUpdate userLocation: MAUserLocation!, updatingLocation: Bool) {
if !updatingLocation {
return
}
if userLocation.location.horizontalAccuracy < 0 {
return
}
// only the first locate used.
if !self.isLocated {
self.isLocated = true
self.mapView.userTrackingMode = .follow
self.mapView.centerCoordinate = userLocation.location.coordinate
self.actionSearchAround(at: userLocation.location.coordinate)
}
}
3、拖动地图时,在地图区域改变的回调中进行POI周边搜索。
- (void)mapView:(MAMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
if (!self.isMapViewRegionChangedFromTableView && self.mapView.userTrackingMode == MAUserTrackingModeNone)
{
[self actionSearchAround];
}
self.isMapViewRegionChangedFromTableView = NO;
}
func mapView(_ mapView: MAMapView!, regionDidChangeAnimated animated: Bool) {
if !self.isMapViewRegionChangedFromTableView && self.mapView.userTrackingMode == .none {
self.actionSearchAround(at: self.mapView.centerCoordinate)
}
self.isMapViewRegionChangedFromTableView = false
}
4、通过POI搜索回调和逆地理编码的回调获取数据填充到TableView中。
- (void)onPOISearchDone:(AMapPOISearchBaseRequest *)request response:(AMapPOISearchResponse *)response
{
if (self.isFromMoreButton == YES)
{
self.isFromMoreButton = NO;
}
else
{
[self.searchPoiArray removeAllObjects];
[self.moreButton setTitle:@"更多.." forState:UIControlStateNormal];
self.moreButton.enabled = YES;
self.moreButton.backgroundColor = [UIColor whiteColor];
}
if (response.pois.count == 0)
{
NSLog(@"没有数据了");
[self.moreButton setTitle:@"没有数据了.." forState:UIControlStateNormal];
self.moreButton.enabled = NO;
self.moreButton.backgroundColor = [[UIColor grayColor] colorWithAlphaComponent:0.4];
self.selectedIndexPath = nil;
[self.tableView reloadData];
return;
}
[response.pois enumerateObjectsUsingBlock:^(AMapPOI *obj, NSUInteger idx, BOOL *stop) {
[self.searchPoiArray addObject:obj];
}];
self.selectedIndexPath = nil;
[self.tableView reloadData];
}
- (void)onReGeocodeSearchDone:(AMapReGeocodeSearchRequest *)request response:(AMapReGeocodeSearchResponse *)response
{
if (response.regeocode != nil)
{
self.currentRedWaterPosition = response.regeocode.formattedAddress;
NSIndexPath *reloadIndexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView reloadRowsAtIndexPaths:@[reloadIndexPath] withRowAnimation:UITableViewRowAnimationNone];
}
}
func onPOISearchDone(_ request: AMapPOISearchBaseRequest!, response: AMapPOISearchResponse!) {
if isFromMoreButton {
isFromMoreButton = false
}
else {
self.searchPoiArray.removeAll()
self.moreButton.setTitle(kMoreButtonTitle, for: UIControlState.normal)
self.moreButton.isEnabled = true
self.moreButton.backgroundColor = UIColor.white
}
if response.count == 0 {
self.moreButton.setTitle("没有数据了...", for: UIControlState.normal)
self.moreButton.isEnabled = false
self.moreButton.backgroundColor = UIColor.gray
self.selectedIndexPath = nil
self.tableView.reloadData()
return
}
self.searchPoiArray.append(contentsOf: response.pois)
self.selectedIndexPath = nil
self.tableView.reloadData()
}
func onReGeocodeSearchDone(_ request: AMapReGeocodeSearchRequest!, response: AMapReGeocodeSearchResponse!) {
if response.regeocode != nil {
self.currentAddress = response.regeocode.formattedAddress;
self.tableView.reloadRows(at: [IndexPath(row: 0, section: 0)], with: UITableViewRowAnimation.none)
}
}
出行类APP的起终点位置的选择以及社交类应用的位置分享。
核心类/接口
类 | 接口 | 说明 | 版本 |
---|---|---|---|
Marker | setPosition(LatLng latlng) | 设置 marker 的经纬度位置。 | V2.0.0版本起 |
Projection | toScreenLocation(LatLng paramLatLng) | 返回一个从地图位置转换来的屏幕位置。 | V2.0.0版本起 |
fromScreenLocation(Point paramPoint) | 根据转入的屏幕位置返回一个地图位置(经纬度)。 | V2.0.0版本起 | |
AMap.OnCameraChangeListener | onCameraChangeFinish(CameraPosition postion) | 在可视范围一系列动作改变完成之后(例如:拖动、缩放)回调此方法。 | V2.0.0版本起 |
RegeocodeQuery | RegeocodeQuery(LatLonPoint point, float radius, java.lang.String latLonType) | 构造函数,构造逆地理编码参数对象。 | V2.1.0版本起 |
GeocodeSearch | setOnGeocodeSearchListener(GeocodeSearch.OnGeocodeSearchListener onGeocodeSearchListener) | 设置地理编码(正向和逆向)查询监听。 | V2.1.0版本起 |
getFromLocation(RegeocodeQuery regeocodeQuery) | 逆地理编码查询。 | V2.1.0版本起 | |
GeocodeSearch.OnGeocodeSearchListener | onRegeocodeSearched(RegeocodeResult result, int rCode) | 根据给定的经纬度和最大结果数返回逆地理编码的结果列表。 | V2.1.0版本起 |
PoiSearch.Query | Query(java.lang.String query, java.lang.String ctgr, java.lang.String city) | 构造函数,构造POI搜索查询参数对象。 | V2.1.0版本起 |
setCityLimit(boolean isLimit) | 返回是否严格按照设定城市搜索。 | V2.8.0版本起 | |
PoiSearch.SearchBound | SearchBound(LatLonPoint center, int radiusInMeters, boolean isDistanceSort) | 构造函数,构造搜索范围。 | V2.1.3版本起 |
PoiSearch | PoiSearch(Context context, PoiSearch.Query query) | 根据给定的参数构造一个PoiSearch 的新对象。 | V2.1.0版本起 |
setOnPoiSearchListener(PoiSearch.OnPoiSearchListener listener) | 设置查询监听。 | V2.1.0版本起 | |
setBound(PoiSearch.SearchBound bnd) | 设置查询范围。 | V2.1.0版本起 | |
searchPOIAsyn() | POI搜索异步接口。 | V2.1.0版本起 | |
PoiSearch.OnPoiSearchListener | onPoiSearched(PoiResult pageResult, int errorCode) | 返回POI搜索异步处理的结果。 | V2.1.0版本起 |
1、指定所需类型进行相关 POI 的搜索,这个示例中的类型编码,如下:
若您的业务需要搜索其他类型的POI,请参考POI分类表。
2、无论如何缩放、移动地图,都将大头针图标钉在地图中心位置。
在移动或者缩放地图的动作结束时,都会进 onCameraChangeFinish 回调中,获取此时的相机坐标作为 Marker 的坐标。
aMap.setOnCameraChangeListener(new AMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition cameraPosition) {
}
@Override
public void onCameraChangeFinish(CameraPosition cameraPosition) {
if (!isItemClickAction) {
locationMarker.setPosition(cameraPosition.target);
}
}
});