GWT GoogleMaps:在地图上显示KML名称

时间:2014-12-08 18:45:43

标签: java google-maps gwt google-maps-api-3 kml

我的最终目标是使用GoogleMaps v3 GWT API在GoogleMap上显示任意文字。我认为这样做的方法是通过KML。如果这不是可行的方法,我很乐意听到其他方法(除了将文本显示为图像)。如果KML是要走的路,那么我想知道我做错了什么:

我正在尝试通过GWT将此示例KML文件加载到测试GoogleMap中:https://developers.google.com/kml/documentation/KML_Samples.kml

我关心的文件中的主要标签就是这个:

  <Placemark>
    <name>Simple placemark</name>
    <description>Attached to the ground. Intelligently places itself at the
      height of the underlying terrain.</description>
    <Point>
      <coordinates>-122.0822035425683,37.42228990140251,0</coordinates>
    </Point>
  </Placemark>

当我在Google地球上呈现该KML文件时,名称(简单地标)将直接显示在地图上。万岁!

但是,当我在GoogleMaps上呈现该KML文件时,该名称不会显示在地图上,只会在我点击地标时显示在InfoWindow中。其他一切似乎都很好,除了地图上没有直接呈现文字,这是我的全部目标。

我已经包含了我正在使用的示例地图代码,我希望有一种方法可以告诉GoogleMap直接在地图上显示名称或任何文字。

package com.test.client;

import com.google.gwt.ajaxloader.client.AjaxLoader;
import com.google.gwt.ajaxloader.client.AjaxLoader.AjaxLoaderOptions;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.dom.client.Document;
import com.google.maps.gwt.client.GoogleMap;
import com.google.maps.gwt.client.KmlLayer;
import com.google.maps.gwt.client.LatLng;
import com.google.maps.gwt.client.MapOptions;
import com.google.maps.gwt.client.MapTypeId;

public class GwtTest implements EntryPoint {

    @Override
    public void onModuleLoad() {
        AjaxLoaderOptions options = AjaxLoaderOptions.newInstance();
        options.setOtherParms("sensor=false");
        Runnable callback = new Runnable() {
            public void run() {
                createMap();
            }
        };
        AjaxLoader.loadApi("maps", "3", callback, options);
    }

    public void createMap() {

        MapOptions mapOpts = MapOptions.create();
        mapOpts.setZoom(4);
        mapOpts.setCenter(LatLng.create(37.09024, -95.712891));
        mapOpts.setMapTypeId(MapTypeId.TERRAIN);
        final GoogleMap map = GoogleMap.create(Document.get().getElementById("map_canvas"), mapOpts);

        KmlLayer kmlLayer = KmlLayer.create("https://developers.google.com/kml/documentation/KML_Samples.kml");
        kmlLayer.setMap(map);
    }
}

如果根本没有办法在GoogleMap上呈现文字,那么是否有一个“官方”的地方呢?

2 个答案:

答案 0 :(得分:2)

对于任何绊倒这个问题的人来说,我最终做的就是使用谷歌的图表API:https://developers.google.com/chart/image/docs/gallery/dynamic_icons

这允许您使用传递到URL的参数动态创建图像。然后您可以使用该URL创建MarkerImage或GroundOverlay:

MarkerImage mi = MarkerImage.create("http://chart.apis.google.com/chart?chst=d_text_outline&chld=000000|16|h|FFFFFF|_|Example");
MarkerOptions mo = MarkerOptions.create();
mo.setIcon(mi);
mo.setPosition(LatLng.create(37.1918, -95.8892));
Marker m = Marker.create(mo);
m.setMap(map);

答案 1 :(得分:0)

official place上的选项是使用Custom Overlay。他们的示例使用img元素,但将其更改为div元素,然后设置innerHTML或类似内容以在地图上显示文本。

您应该能够使用示例javascript代码来帮助您在GWT中实现它 - 从Google GWT包装器库中扩展OverlayView类等。