作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想在谷歌地图上绘制覆盖图,其中除了特定点周围 1.5 公里半径以外的所有内容都被遮蔽了。为此,我尝试使用带有大量边框的圆圈,所以我会在边框中放置透明中心和覆盖颜色来实现这一点,但它无法渲染。
map.addCircle(new CircleOptions()
.center(london)
.radius(500)
.strokeWidth(100)
.strokeColor(R.color.map_overlay_color)
.fillColor(Color.RED)); // not transparent for showcase
http://i.stack.imgur.com/6NFfI.png
所以我决定使用孔来处理多边形。
List<LatLng> points = new ArrayList<LatLng>();
points.add(new LatLng(london.latitude-2, london.longitude-2));
points.add(new LatLng(london.latitude-2, london.longitude+2));
points.add(new LatLng(london.latitude + 2, london.longitude + 2));
points.add(new LatLng(london.latitude + 2, london.longitude - 2));
List<LatLng> hole = new ArrayList<LatLng>();
for(int i = 0; i < 360; i += 1){
LatLng coords = new LatLng(london.latitude + (radius * Math.cos(Math.toRadians(i))), london.longitude + (radius * Math.sin(Math.toRadians(i))));
hole.add(coords);
Log.d("HOLE", coords.toString());
}
map.addPolygon(new PolygonOptions()
.addAll(points)
.addHole(hole)
.strokeWidth(0)
.fillColor(R.color.map_overlay_color));
但是经度距离因中心位置而异,所以我得到这样的结果。 http://i.stack.imgur.com/kSXAB.png如果它不是椭圆形的,那将是完美的:)。我在互联网上发现了这个 (jsfiddle.net/doktormolle/NLHf9) JS 示例,但我在 java 中找不到函数 google.maps.geometry.spherical.computeOffset。
如有任何帮助,我们将不胜感激。
最佳答案
有一个SphericalUtil.computeOffset() Android 中的方法,它返回从指定航向中的原点移动一段距离后得到的 LatLng。
基于您发布的代码的示例代码:
LatLng locationSF = new LatLng(37.7577, -122.4376);
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(37.7577, -122.4376), 12));
List<LatLng> points = new ArrayList<LatLng>();
points.add(new LatLng(locationSF.latitude-2, locationSF.longitude-2));
points.add(new LatLng(locationSF.latitude-2, locationSF.longitude+2));
points.add(new LatLng(locationSF.latitude+2, locationSF.longitude+2));
points.add(new LatLng(locationSF.latitude+2, locationSF.longitude-2));
List<LatLng> hole = new ArrayList<LatLng>();
float p = 360/360;
float d =0;
for(int i=0; i < 360; ++i, d+=p){
hole.add(SphericalUtil.computeOffset(locationSF, 5000, d));
}
mMap.addPolygon(new PolygonOptions()
.addAll(points)
.addHole(hole)
.strokeWidth(0)
.fillColor(Color.argb(150, 0, 0, 0)));
关于java - 画 donut 谷歌地图Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32860169/
leaflet:一个开源并且对移动端友好的交互式地图 JavaScript 库 中文文档: https://leafletjs.cn/reference.html 官网(英文): ht
我是一名优秀的程序员,十分优秀!