GMap.NET地名搜索
GMap中地址搜索主要用到GeocodingProvider。GeocodingProvider的方法如下:
GeoCoderStatusCode GetPoints(string keywords, out List<PointLatLng> pointList); //根据关键字得到一组坐标
PointLatLng? GetPoint(string keywords, out GeoCoderStatusCode status);//根据关键字得到一个坐标
// ...
GeoCoderStatusCode GetPlacemarks(PointLatLng location, out List<Placemark> placemarkList);//根据坐标得到地址
Placemark GetPlacemark(PointLatLng location, out GeoCoderStatusCode status);//根据坐标得到一组地址
对google api比较熟悉的同学对PlaceMark很熟悉吧!!
代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using GMap.NET.MapProviders;
using GMap.NET;
using GMap.NET.WindowsForms.Markers;
using GMap.NET.WindowsForms;
namespace Demo.WindowsForms.YJQDemos
{
public partial class SearchAddress : Form
{
private GMapOverlay searchResultLayer = new GMapOverlay("SearchResultLayer");
private List<PointLatLng> searchResult = null;
public SearchAddress()
{
InitializeComponent();
}
private void BTNSearchAddress_Click(object sender, EventArgs e)
{
String searcheKey = this.TBSAdress.Text.Trim();
GeocodingProvider gp = this.MapControl.MapProvider as GeocodingProvider;
if (gp == null)
{
gp = GMapProviders.OpenStreetMap as GeocodingProvider;
}
searchResult = new List<PointLatLng>();
gp.GetPoints(searcheKey, out searchResult);
this.LBXSearchResult.Items.Clear();
this.searchResultLayer.Clear();
this.LBXSearchResult.Visible = true;
foreach (PointLatLng pt in searchResult)
{
// this.LBXSearchResult.Items.Add(String.Format("{0},{1}", pt.Lng, pt.Lat));
GMarkerGoogle marker = new GMarkerGoogle(pt, GMarkerGoogleType.arrow);
searchResultLayer.Markers.Add(marker);
GeoCoderStatusCode placeMarkResult = new GeoCoderStatusCode();
Placemark place = gp.GetPlacemark(pt, out placeMarkResult);
this.LBXSearchResult.Items.Add(place.Address);
}
this.MapControl.ZoomAndCenterMarkers(searchResultLayer.Id);
}
private void MapControl_Load(object sender, EventArgs e)
{
}
private void SearchAddress_Load(object sender, EventArgs e)
{
this.MapControl.MapProvider = GMapProviders.GoogleChinaMap;
this.MapControl.MapProvider.MinZoom = 1;
this.MapControl.MapProvider.MaxZoom = 17;
this.MapControl.DragButton = System.Windows.Forms.MouseButtons.Left;
this.MapControl.Overlays.Add(searchResultLayer);
GMapProvider.Language = LanguageType.ChineseSimplified;
}
private void LBXSearchResult_SelectedIndexChanged(object sender, EventArgs e)
{
if (this.LBXSearchResult.SelectedIndex < 0)
{
return;
}
searchResultLayer.Clear();
GMarkerGoogle marker = new GMarkerGoogle(this.searchResult[this.LBXSearchResult.SelectedIndex], GMarkerGoogleType.arrow);
searchResultLayer.Markers.Add(marker);
this.MapControl.Position = this.searchResult[this.LBXSearchResult.SelectedIndex];
}
}
}
效果:


浙公网安备 33010602011771号