自2018年10月18日起,高德开发者论坛除车机板块外,其他板块将停止发帖与维护,如您有使用问题请 提交工单 联系我们,感谢您的理解。

查看: 405|回复: 1
打印 上一主题 下一主题

[报错] Polygon方法contains出现bug

[复制链接]
最佳答案
0 

1

主题

1

帖子

7

积分

新手上路

Rank: 1

积分
7
跳转到指定楼层
楼主
发表于 2015-1-28 16:13:47 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
截图:


现象:
在这个矩形的外点击地图,使用contains方法判断地图上点击的点是否包含在这个区域中。点击区域外围上、右、下区域时,contains返回false,正常;但是点击区域外围左侧时,contains返回true,不正常。按理说这个contains方法应该是点击区域内返回true,在区域外返回false。请开发人员测试一下这个问题。

SDK版本:
Android_3DMap_V2.4.0.jar

代码:
  1. package com.amap.map3d.demo.overlay;

  2. import java.util.Arrays;
  3. import java.util.List;

  4. import android.app.Activity;
  5. import android.graphics.Color;
  6. import android.os.Bundle;
  7. import android.util.Log;
  8. import android.widget.SeekBar;
  9. import android.widget.SeekBar.OnSeekBarChangeListener;

  10. import com.amap.api.maps.AMap;
  11. import com.amap.api.maps.AMap.OnMapClickListener;
  12. import com.amap.api.maps.CameraUpdateFactory;
  13. import com.amap.api.maps.MapView;
  14. import com.amap.api.maps.model.LatLng;
  15. import com.amap.api.maps.model.Polygon;
  16. import com.amap.api.maps.model.PolygonOptions;
  17. import com.amap.map3d.demo.util.Constants;
  18. import com.amap.map3d.demo.R;

  19. /**
  20. * AMapV2地图中简单介绍一些Polygon的用法.
  21. */
  22. public class PolygonActivity extends Activity implements OnSeekBarChangeListener, OnMapClickListener {
  23.         private static final int WIDTH_MAX = 50;
  24.         private static final int HUE_MAX = 255;
  25.         private static final int ALPHA_MAX = 255;
  26.         private AMap aMap;
  27.         private MapView mapView;
  28.         private Polygon polygon;
  29.         private SeekBar mColorBar;
  30.         private SeekBar mAlphaBar;
  31.         private SeekBar mWidthBar;
  32.         private Polygon test;

  33.         @Override
  34.         protected void onCreate(Bundle savedInstanceState) {
  35.                 super.onCreate(savedInstanceState);
  36.                 setContentView(R.layout.polygon_activity);
  37.                 /*
  38.                  * 设置离线地图存储目录,在下载离线地图或初始化地图设置; 使用过程中可自行设置, 若自行设置了离线地图存储的路径,
  39.                  * 则需要在离线地图下载和使用地图页面都进行路径设置
  40.                  */
  41.                 // Demo中为了其他界面可以使用下载的离线地图,使用默认位置存储,屏蔽了自定义设置
  42.                 // MapsInitializer.sdcardDir =OffLineMapUtils.getSdCacheDir(this);
  43.                 mapView = (MapView) findViewById(R.id.map);
  44.                 mapView.onCreate(savedInstanceState);// 此方法必须重写
  45.                 init();
  46.         }

  47.         /**
  48.          * 初始化AMap对象
  49.          */
  50.         private void init() {
  51.                 mColorBar = (SeekBar) findViewById(R.id.hueSeekBar);
  52.                 mColorBar.setMax(HUE_MAX);
  53.                 mColorBar.setProgress(50);

  54.                 mAlphaBar = (SeekBar) findViewById(R.id.alphaSeekBar);
  55.                 mAlphaBar.setMax(ALPHA_MAX);
  56.                 mAlphaBar.setProgress(50);

  57.                 mWidthBar = (SeekBar) findViewById(R.id.widthSeekBar);
  58.                 mWidthBar.setMax(WIDTH_MAX);
  59.                 mWidthBar.setProgress(25);
  60.                 if (aMap == null) {
  61.                         aMap = mapView.getMap();
  62.                         setUpMap();
  63.                 }
  64.         }

  65.         private void setUpMap() {
  66.                 aMap.setOnMapClickListener(this);
  67.                 mColorBar.setOnSeekBarChangeListener(this);
  68.                 mAlphaBar.setOnSeekBarChangeListener(this);
  69.                 mWidthBar.setOnSeekBarChangeListener(this);
  70.                 aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(Constants.BEIJING, 5));// 设置指定的可视区域地图
  71.                 // 绘制一个长方形
  72.                 test = aMap.addPolygon(new PolygonOptions().addAll(createRectangle(Constants.SHANGHAI, 1, 1))
  73.                                 .fillColor(Color.LTGRAY).strokeColor(Color.RED).strokeWidth(1));
  74.                 PolygonOptions options = new PolygonOptions();
  75.                 int numPoints = 400;
  76.                 float semiHorizontalAxis = 5f;
  77.                 float semiVerticalAxis = 2.5f;
  78.                 double phase = 2 * Math.PI / numPoints;
  79.                 for (int i = 0; i <= numPoints; i++) {
  80.                         options.add(new LatLng(Constants.BEIJING.latitude + semiVerticalAxis * Math.sin(i * phase),
  81.                                         Constants.BEIJING.longitude + semiHorizontalAxis * Math.cos(i * phase)));
  82.                 }
  83.                 // 绘制一个椭圆
  84.                 polygon = aMap.addPolygon(options.strokeWidth(25).strokeColor(Color.argb(50, 1, 1, 1))
  85.                                 .fillColor(Color.argb(50, 1, 1, 1)));
  86.         }

  87.         /**
  88.          * 方法必须重写
  89.          */
  90.         @Override
  91.         protected void onResume() {
  92.                 super.onResume();
  93.                 mapView.onResume();
  94.         }

  95.         /**
  96.          * 方法必须重写
  97.          */
  98.         @Override
  99.         protected void onPause() {
  100.                 super.onPause();
  101.                 mapView.onPause();
  102.         }

  103.         /**
  104.          * 方法必须重写
  105.          */
  106.         @Override
  107.         protected void onSaveInstanceState(Bundle outState) {
  108.                 super.onSaveInstanceState(outState);
  109.                 mapView.onSaveInstanceState(outState);
  110.         }

  111.         /**
  112.          * 方法必须重写
  113.          */
  114.         @Override
  115.         protected void onDestroy() {
  116.                 super.onDestroy();
  117.                 mapView.onDestroy();
  118.         }

  119.         /**
  120.          * 生成一个长方形的四个坐标点
  121.          */
  122.         private List<LatLng> createRectangle(LatLng center, double halfWidth, double halfHeight) {
  123.                 return Arrays.asList(new LatLng(center.latitude - halfHeight, center.longitude - halfWidth), new LatLng(
  124.                                 center.latitude - halfHeight, center.longitude + halfWidth), new LatLng(center.latitude + halfHeight,
  125.                                 center.longitude + halfWidth), new LatLng(center.latitude + halfHeight, center.longitude - halfWidth));
  126.         }

  127.         @Override
  128.         public void onStopTrackingTouch(SeekBar seekBar) {
  129.         }

  130.         @Override
  131.         public void onStartTrackingTouch(SeekBar seekBar) {
  132.         }

  133.         /**
  134.          * Polygon中对填充颜色,透明度,画笔宽度设置响应事件
  135.          */
  136.         @Override
  137.         public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
  138.                 if (polygon == null) {
  139.                         return;
  140.                 }
  141.                 if (seekBar == mColorBar) {
  142.                         polygon.setFillColor(Color.argb(progress, 1, 1, 1));
  143.                 } else if (seekBar == mAlphaBar) {
  144.                         polygon.setStrokeColor(Color.argb(progress, 1, 1, 1));
  145.                 } else if (seekBar == mWidthBar) {
  146.                         polygon.setStrokeWidth(progress);
  147.                 }
  148.         }

  149.         @Override
  150.         public void onMapClick(LatLng p) {
  151.                 // TODO Auto-generated method stub
  152.                 Log.v("aaaaaaaaaaaaaaaaaaaaa", "" + test.contains(p));
  153.         }
  154. }
复制代码
回复

使用道具 举报

最佳答案
50 

1

主题

1244

帖子

2986

积分

超级版主

Rank: 8Rank: 8

积分
2986
沙发
发表于 2015-1-29 17:33:35 | 只看该作者
目前已知这个bug,下版本修复
= =
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|小黑屋|高德开发者论坛

Copyright ©2014 高德开发者论坛.All Rights Reserved |京ICP证070711号

意见反馈 常见问题 服务条款 联系我们
快速回复 返回顶部 返回列表