代码之家  ›  专栏  ›  技术社区  ›  joseph

在android中使用google map api添加静态方形网格

  •  2
  • joseph  · 技术社区  · 7 年前

    在我的项目中,我需要在谷歌地图中定义区域。所以,我想在android中使用谷歌地图API将谷歌地图划分为静态方形网格。我是谷歌地图API新手,所以任何帮助都将是巨大的。

    1 回复  |  直到 7 年前
        1
  •  1
  •   xomena    7 年前

    之前也提出过类似的问题,@MaciejGórski提供了一个很好的解决方案:

    https://stackoverflow.com/a/16359857/5140781

    我可以添加几个注释,因为前面提到的答案很旧,链接不再有效。他们引用了几年前被弃用的Google代码中的项目。我搜索并发现该项目已从Google代码转移到GitHub:

    https://github.com/mg6maciej/android-maps-extensions

    因此,您可以按照@MaciejGrski的说明复制文件 DebugHelper.java SphericalMercator.java 从以下URL

    https://github.com/mg6maciej/android-maps-extensions/blob/develop/android-maps-extensions/src/main/java/com/androidmapsextensions/impl/DebugHelper.java

    https://github.com/mg6maciej/android-maps-extensions/blob/develop/android-maps-extensions/src/main/java/com/androidmapsextensions/utils/SphericalMercator.java

    还要注意的是 onCameraChange 在Google Maps中,Android API被弃用,因此您必须使用 onCameraIdle 相反

    我创建了一个示例项目,并能够创建网格

    public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, GoogleMap.OnCameraIdleListener {
    
        private GoogleMap mMap;
        private DebugHelper hlp;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_maps);
            // Obtain the SupportMapFragment and get notified when the map is ready to be used.
            SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                    .findFragmentById(R.id.map);
            mapFragment.getMapAsync(this);
        }
    
    
        @Override
        public void onMapReady(GoogleMap googleMap) {
            mMap = googleMap;
    
            LatLng center = new LatLng(41.385064,2.173403);
    
            mMap.getUiSettings().setZoomControlsEnabled(true);
    
            hlp =  new DebugHelper();
            mMap.setOnCameraIdleListener(this);
    
            mMap.moveCamera(CameraUpdateFactory.newLatLng(center));
        }
    
        @Override
        public void onCameraIdle() {
            Projection projection = mMap.getProjection();
            double l1 = projection.getVisibleRegion().farLeft.longitude;
            double l2 = projection.getVisibleRegion().farRight.longitude;
    
            double grdSize = Math.abs(l2-l1) / 8.0;
    
            hlp.drawDebugGrid(mMap, grdSize);
        }
    }
    

    您可以在GitHub上找到完整的示例项目

    https://github.com/xomena-so/so48834248

    请在中用您的API密钥替换我的API密钥 google_maps_api.xml .

    enter image description here

    我希望这有帮助!