GMap.Net开发之地址解析与路径查找
复制代码
//根据关键字得到一组坐标
GeoCoderStatusCode GetPoints(string keywords, out List<PointLatLng> pointList);
//根据关键字得到一个坐标
PointLatLng? GetPoint(string keywords, out GeoCoderStatusCode status);
//根据坐标得到一组地址
GeoCoderStatusCode GetPlacemarks(PointLatLng location, out List<Placemark> placemarkList);
//根据坐标得到一个地址
先定义一些变量:
private GMapOverlay locations = new GMapOverlay("locations"); //放置搜索结果的图层
private GeocodingProvider gp; //地址编码服务
List<PointLatLng> searchResult = new List<PointLatLng>(); //搜索结果
PointLatLng start = PointLatLng.Empty; //路径开始点
PointLatLng end = PointLatLng.Empty; //路径结束点
mapControl.Overlays.Add(locations); //不要忘了添加使用的图层
地址解析的准确度和当前使用的地图服务有很大关系,一般使用什么MapProvider就使用该MapProvider提供的服务。
如我使用的是GoogleChinaMap,就使用google的地址解析:
mapControl.MapProvider = GMapProviders.GoogleChinaMap; //google china 地图
gp = mapControl.MapProvider as GeocodingProvider;
if (gp == null) //地址转换服务,没有就使用OpenStreetMap
{
gp = GMapProviders.OpenStreetMap as GeocodingProvider;
}
GMapProvider.Language = LanguageType.ChineseSimplified; //使用的语言,默认是英文
地址解析一般有2种情况,第一种就是根据坐标点得到该点对应的地址信息,在map的double click中,我们得到双击点的地址信息:
void mapControl_MouseDoubleClick(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
PointLatLng point = mapControl.FromLocalToLatLng(e.X, e.Y);
GeoCoderStatusCode statusCode = GeoCoderStatusCode.Unknow;
Placemark? place = gp.GetPlacemark(point, out statusCode);
if (statusCode == GeoCoderStatusCode.G_GEO_SUCCESS)
{
GMapMarker marker = new GMarkerGoogle(point, GMarkerGoogleType.green);
marker.ToolTipText = place.Value.Address;
marker.ToolTipMode = MarkerTooltipMode.Always;
locations.Markers.Add(marker);
}
}
}
效果图如下: