如何展示整个世界并在其上放置标记?

时间:2017-02-19 15:40:06

标签: android gis

背景

我想展示整个世界的流行地图,并在上面加上标记。

问题

我尝试使用谷歌地图,但似乎(here)它不支持缩小以显示整个世界。

我发现了什么

在维基百科(here)上看,地球的中心位于 30°00'N 31°00'E ,但这似乎是在埃及,它并没有看起来像是世界地图的中心,即使在维基百科页面上也是如此:

enter image description here

我也发现了一个类似的问题here,所以我把它转换为Android代码:

    MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.mapFragment);
    mapFragment.getMapAsync(new OnMapReadyCallback() {
        @Override
        public void onMapReady(final GoogleMap googleMap) {
            LatLngBounds allowedBounds = new LatLngBounds(
                    new LatLng(-85, 180),    // bottom right corner
                    new LatLng(85, -180)    // top left corner of map
            );
            double k = 5.0f;
            double n = allowedBounds.northeast.latitude - k;
            double e = allowedBounds.northeast.longitude - k;
            double s = allowedBounds.southwest.latitude + k;
            double w = allowedBounds.southwest.longitude + k;
            LatLng neNew = new LatLng(n, e);
            LatLng swNew = new LatLng(s, w);
            LatLngBounds boundsNew = new LatLngBounds(swNew, neNew);
            googleMap.setLatLngBoundsForCameraTarget(boundsNew);
        }
    });

但它根本不显示整个世界:

enter image description here

我也尝试过使用变焦(看here),但它从未缩小到足以显示大陆:

googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(30, 31), 1));

enter image description here

我选择了“1”,因为文档说“1”是“世界”的价值:

  

以下列表显示了您可以获得的大致详细程度   期望看到每个缩放级别:

     

1:世界

问题

如何在Google地图上展示整个世界?

或者,有没有什么好的选择只显示世界地图(静态图像也很好),并能够在其上放置标记?甚至可能使用VectorDrawable?

是否有我可以展示的图像,并以某种方式在其上放置标记?

3 个答案:

答案 0 :(得分:1)

可以使用MapView(或MapFragmentLite Mode显示整个世界并在其上放置标记:

  

...如果需要显示   整个视口中,最好使用Lite Mode

标记位于“部分” Supported Features中:

  

您可以添加标记并回复   点击事件。您还可以添加自定义标记图标。这是不可能的   使标记可拖动。精简模式地图上的标记是平坦的,并且   它们无法旋转。

此外,您还可以使用其他功能,例如线条和多边形绘制等。

因此,像MainActivity这样:

public class MainActivity extends AppCompatActivity {

    private static final String MAP_VIEW_BUNDLE_KEY = "MapViewBundleKey";

    private MapView mMapView;
    private GoogleMap mGoogleMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Bundle mapViewBundle = null;
        if (savedInstanceState != null) {
            mapViewBundle = savedInstanceState.getBundle(MAP_VIEW_BUNDLE_KEY);
        }

        mMapView = (MapView) findViewById(R.id.mapview);
        mMapView.onCreate(mapViewBundle);

        mMapView.getMapAsync(new OnMapReadyCallback() {
            @Override
            public void onMapReady(GoogleMap googleMap) {
                mGoogleMap = googleMap;
                mGoogleMap.addMarker(new MarkerOptions()
                        .position(new LatLng(31.755983, 35.212879))
                        .title("Jerusalem"));
            }
        });
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);

        Bundle mapViewBundle = outState.getBundle(MAP_VIEW_BUNDLE_KEY);
        if (mapViewBundle == null) {
            mapViewBundle = new Bundle();
            outState.putBundle(MAP_VIEW_BUNDLE_KEY, mapViewBundle);
        }
    }
}

activity_main.xml(也可以通过GoogleMapOptions.liteMode(true)以编程方式为MapView设置精简模式):

<com.google.android.gms.maps.MapView android:id="@+id/mapview"
    xmlns:map="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    map:cameraZoom="1"
    map:mapType="normal"
    map:liteMode="true"
    />

你有类似的东西:

Google Maps Whole World

答案 1 :(得分:0)

您可以在Google Maps Android API中使用Lite Mode查看整个世界。

您可以在其上添加与完整地图模式相同的标记。

答案 2 :(得分:-1)

这是使用Google Static Maps API的可能解决方案。

查询是:

SELECT A.EMPLID, A.BUSINESS_TITLE, A.DEPTID, A.LOCATION, A.LAST_NAME, 
A.FIRST_NAME, A.MIDDLE_NAME, 
MAX(CONVERT(CHAR(10),D.EXAM_DT,121))AS EXAM_DATE, D.EXAM_TYPE_CD, 
(CONVERT(CHAR(10),D.GH_EXPIRE_DATE,121)) AS EXPIRE_DATE, AA.NAME AS 
Manager_Name

FROM ((PS_EMPLOYEES A INNER JOIN PS_EMPLMT_SRCH_QRY A1 ON (A.EMPLID = 
A1.EMPLID AND A.EMPL_RCD = A1.EMPL_RCD AND  A1.OPRID = 'HD065' )) 
   LEFT OUTER JOIN  PS_GHS_HS_PPDSCRN D ON A.EMPLID = D.EMPLID)
 --LEFT OUTER JOIN PS_GHS_REPORTS_TO H ON A.EMPLID = H.EMPLID
   LEFT OUTER JOIN PS_EMPLOYEES AA ON AA.POSITION_NBR = A.REPORTS_TO 
     AND (( AA.EFFDT = 
     (SELECT MAX(A_ED.EFFDT) FROM PS_EMPLOYEES A_ED 
      WHERE AA.POSITION_NBR = A_ED.POSITION_NBR 
      AND A_ED.EFFDT <= SUBSTRING(CONVERT(CHAR,GETDATE(),121), 1, 10)) ))
   WHERE ( ( A.EFFDT = 
    (SELECT MAX(A_ED.EFFDT) FROM PS_EMPLOYEES A_ED 
    WHERE A.EMPLID = A_ED.EMPLID 
      AND A.EMPL_RCD = A_ED.EMPL_RCD 
      AND A_ED.EFFDT <= SUBSTRING(CONVERT(CHAR,GETDATE(),121), 1, 10)) 
   AND A.EFFSEQ = 
    (SELECT MAX(A_ES.EFFSEQ) FROM PS_EMPLOYEES A_ES 
    WHERE A.EMPLID = A_ES.EMPLID 
      AND A.EMPL_RCD = A_ES.EMPL_RCD 
      AND A.EFFDT = A_ES.EFFDT) 

      AND D.EXAM_TYPE_CD = 'PPD'))
      AND A.EMPL_STATUS = 'A' 

--AND NOT EXISTS (SELECT D.EMPLID, COUNT(*) AS 'TotalOccur' FROM PS_GHS_HS_PPDSCRN D GROUP BY D.EMPLID HAVING COUNT(*) > 1)

 GROUP BY A.EMPLID, A.BUSINESS_TITLE, A.DEPTID, A.LOCATION, A.LAST_NAME, 
 A.FIRST_NAME, A.MIDDLE_NAME, D.EXAM_TYPE_CD, D.GH_EXPIRE_DATE, AA.NAME
 ORDER BY 5

只需使用尺寸参数来测试所需的视图。

Static Map API