我的最终目标是使用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上呈现文字,那么是否有一个“官方”的地方呢?
答案 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类等。