Как отобразить слой карты Google с помощью SharpMap?
Я новичок в SharpMap и никогда не имел опыта использования каких-либо ГИС.
Как получить Sharpmap для отображения карты Google, а затем показать некоторые точки на ней, используя значения широты и долготы? (пример: точка 1 широта: -36,853427, долгота: 174,770385; точка 2 широта: -36,853333, длина: 174,770496).
Я действительно застрял и был бы очень признателен за любую помощь.
Вот что у меня так далеко:
using System;
using System.Drawing;
using System.Windows.Forms;
using SharpMap.Layers;
using BruTile.Web;
namespace sharp_map_test
{
public partial class Form1 : Form
{
double point1Lat = -36.853427;
double point1Long = 174.770385;
double point2Lat = -36.853333;
double point2Long = 174.770496;
public Form1()
{
InitializeComponent();
SharpMap.Map myMap = new SharpMap.Map(new Size(400, 300));
// Output size
myMap.Size = new System.Drawing.Size(300, 200);
// Minimum zoom allowed
myMap.MinimumZoom = 100;
// Set background
myMap.BackColor = Color.White;
var layergoogle = new TileLayer(new GoogleTileSource(GoogleMapType.GoogleMap), "googlemaps");
var layer = new VectorLayer("test");
myMap.Layers.Add(layergoogle);
// Render the map
myMap.ZoomToExtents();
System.Drawing.Image imgMap = myMap.GetMap();
}
private void Form1_Load(object sender, EventArgs e)
{
// Display point1Lat and point1Long point on the google map
// Add text saying "Device A" to the point.
// Display point2Lat and point2Long point on the google map
// Add text saying "Device B" to the point.
// Refresh map and get the correct zoom level
}
}
}
1 ответ
Я просто делюсь этим для образовательных целей.. Это против лицензии Google Maps
Вы можете использовать этот код для создания карты Google
map.BackgroundLayer.Clear();
var GoogleSatellitesource = CreateGoogleTileSource("http://mt{s}.google.com/vt/lyrs=m@130&hl=en&x={x}&y={y}&z={z}");
TileAsyncLayer GoogleSatellite = new SharpMap.Layers.TileAsyncLayer(GoogleSatellitesource, "GoogleSatellite");
map.BackgroundLayer.Add(GoogleSatellite);
CreateGoogleTileSource
как следует
private static ITileSource CreateGoogleTileSource(string urlFormatter)
{
return new HttpTileSource(new GlobalSphericalMercator(), urlFormatter, new[] { "0", "1", "2", "3" },
tileFetcher: FetchImageAsGoogle());
}
а также FetchImageAsGoogle
как есть
private static Func<Uri, byte[]> FetchImageAsGoogle()
{
return uri =>
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create(uri);
httpWebRequest.UserAgent =
@"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7";
httpWebRequest.Referer = "http://maps.google.com/";
try
{
return RequestHelper.FetchImage(httpWebRequest);
}
catch (Exception ex)
{
return null;
}
};
}
Имейте в виду, что используйте последнюю версию sharpmap и SharpMap.Layers.BruTile
из Github.