C#nedir?com
 
YAZAR HAKKINDA
Ömer Emre Aktepe
Ömer Emre Aktepe
htttp://www.emre.me
İletişme geçmek için tıklayın.
3 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: .Net Adres Bing Bulma C# Earth Geocode Geocoding Latitude Longitude Map Silverlight Virtual Kodlama Ömer Emre Aktepe
 
YAZI HAKKINDA
Türü : Serbest Köşe (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Başlangıç
Kategori : Kodlama
Yayınlanma Tarihi : 16.11.2009
Okunma Sayısı : 14070
Yorum Sayısı : 0     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
XML - Deniz Kılınç
emre TAŞ
yazının devamı >
emre TAŞ
Decompiling and Reverse Engineering .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Masaüstü mü ? İnternet Mi? .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
.Net Kavramları - .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Yeni Başlayanlar için - .Net Radyo
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer 'in Blogu
Conda install environment.yml Package 25.2.2020
Turhal Temizer 'in Blogu
Mac OS/X Removing CUDA 25.2.2020
Burak Selim Şenyurt
Sekiz Saatlik Sonsuz Döngü 25.2.2020
Burak Selim Şenyurt
Switch Case Kullanmadan Kod Yazılabilir mi? 25.2.2020
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
Virtual Earth Silverlight Control - 2 - Adres Bulma(Geocode)
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon

 




Merhabalar

 
Bu yazımızda ilk başta Virtual Earth ün genel yapısı hakkında bilgi verdikden sonra belirtilen adresi bulma işlminin nasıl gerçekleştirildiğini ögreneceğiz.
 
Latitude,Longitude Kavramı:
Bu kavramlar Cografya desinden hatırlayacağımız Enlem-Boylam(Paralel-Meridyen) kavramlarıdır.
 
Latitude enlem olup dunyayı ekvatoru "0" derece olarak kabul edip yukarı doğru "+" aşağı doğru "-" olarak ifade edilip altta ve ustte 90 enlem olup toplam 180 enlemden oluşmaktadır.
 
Longitude boylam olum Greenwich 0. boylam olarak kabul edilip sağında solunda 180 er tane olup toplam 360 tanedir. Boylam da greenwich in sağına doğru + olup sola doğru - olarak derecelendirilir.
Aşağıdaki vermiş olduğum linkten denemeler yaparak kavramı daha iyi kavrayabilirsiniz.
 
 
Virtual Earth Map kontrolunun istediğimiz yeri istediğimiz zoom değerine göre gösterilmesi Code Behind da şu şekilde olur.
 
Yozgat ili türkiyenin ortasında olup haritada türkyenin tamamını göstermek istiyorsak aşağıdaki kod parçacığı kullanılır
 
Microsoft.VirtualEarth.MapControl.Location yozgat = new Microsoft.VirtualEarth.MapControl.Location();
yozgat.Latitude = 39.818080812692642;
yozgat .Longitude = 34.814686104655266;
MyMap.SetView(yozgat , 6);
 
Haritanın Biçiminin Ayarlanması :
Coğrafi Mod : <m:Map Mode=”Aerial” />
Coğrafi Mod ve Yerleşim Bilgileri : <m:Map Mode=”AerialWithLabels” />
Yol Modu : Mode=”Road” />
 
Belirtilen Adresin Yerinin Tespit Edilip Haritada Gösterimi:
Belirtilen adresin noktasal bulma işlemi bir servis aracılığı ile yapılmaktadır. Bu servisleri internette "Geocode Service" diye arattığınızda belli başlı siteler vermektedir. Bunlardan en meşhur olanları Google Map, Yahoo Map, MicrosoftMapPoint ile adlandırılan servislerdir. İstediğiniz servisi kullanıp harita üzerinde işlemler yapabilirsiniz. Fakat biz bu makalemizde Microsoftun Servisini kullanarak işlemlerimizi gerçekleştireceğiz.
 
MapPoint servisi hakkında http://msdn.microsoft.com/en-us/library/cc980922.aspxadresinden daha detayli bilgi alabilirsiniz.
 
Visual Studio 2008 de Solution Explorer da projeyi sağ tıklayarak açılan menüden "Add Service Reference" ı tıklayarak aşağıdaki resimdeki ekran gelecektir. Sarı ile boyanmış olan Advanced i seçin
açılan pencere aşağıdaki gibi olacakdır. Resimde sarı ile berlitlimiş olan "Add Web Reference" butonunu tıklayıp
.
  • http://staging.mappoint.net/standard-30/mappoint.wsdl
  • http://dev.virtualearth.net/webservices/v1/geocodeservice/geocodeservice.svc?wsdl
  • http://dev.virtualearth.net/webservices/v1/routeservice/routeservice.svc?wsdl
Servislerini gösterdiğimiz biçimde ekleyin. En son eklediğimiz servis şu an için kullanmayacağız fakat ileride noktalar arası rotalama işlemi için kullanılacakdır. İncelemenizi tavsiye ederim.
 
Servislerin güvenliği için bir önceki makalemizde belirtmiş olduğumuz developer account ve NetworkCredential class i ile bağlanabiliriz. Geocoding ve Routin işlemleri için yukarda belirtmiş olduğumuz servislerden ilkgindeki "GetClientToken" methodunu çağırın. Bu method size string biçiminde bir Token veisi verecekdir. Geocoding ve Routing servislerine Token bilgisi ile bağlanacakdır. Burada dikkat edilmesi gereken mevzu verilen Token bilgileri Develeper Account sayfasında belirtmiş olduğunuz kullanım suresi kadar geçerli olmasıdır.
 
Güvenlik Sebebi ile GetCllientToken Methodunu Silverlight Projemiz içinde kullanamayız çünkü NetworkCredential nesnemize User Account Bilgilerini Girmemiz gereklidir. Fakat bu bilgiler silverlight objesi içinde olursa buyuk bir guvenlik açıgı doğurur. Bu sebeple Silverlight Projemizi host edecegimiz web uygulamasında bir service oluşturmamız gerekir. Bu şekilde Silverlight uygulamamız Web Service Uygulamasına istek gonderir, Web Service de Microsoftun servisine Accunt bilgilerini gondererek Token bilgisini alıp silverlight uygulamamıza getirir. Aşağıda Web uygulaması içindeki GetToken Methodunu tanımlayacağız. Projeyi inidirip kodların tamamını incelediğinizde daha pekişeceğini düşünüyorum. Silverlight Uygulamamıza kendi yazdığımız servisi TokenService Olarak Tanıttım.
 
GetToken Methodu
 
 
[OperationContract]
public string GetToken()
{
    OperationContext context = OperationContext.Current;
    MessageProperties messageProperties = context.IncomingMessageProperties;
    RemoteEndpointMessageProperty endpointProperty = messageProperties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
 
    MapService.CommonServiceSoap commonService = new MapService.CommonServiceSoap();
    commonService.Credentials = new System.Net.NetworkCredential("User", "Password");
 
 
    MapService.TokenSpecification tokenSpec = new MapService.TokenSpecification();
    tokenSpec.ClientIPAddress = endpointProperty.Address;
    tokenSpec.TokenValidityDurationMinutes = 60;
 
    string token = "";
 
    // Anahtar Alınır
    try
    {
        token = commonService.GetClientToken(tokenSpec);
    }
    catch (Exception ex)
    {
        throw ex;
    }
 
    return token;
}
Uygulama .cs uzantılı dosya Aşağıdaki Gibidir
 
namespace VirtualEarth1
{
    public partial class MainPage : UserControl
    {
        string Token;
        TokenService.Service1Client service = new VirtualEarth1.TokenService.Service1Client();
        MapLayer mapLayer = new MapLayer();
        public MainPage()
        {
            InitializeComponent();
            MyMap.Children.Add(mapLayer);
            Microsoft.VirtualEarth.MapControl.Location yozgat = new Microsoft.VirtualEarth.MapControl.Location();
            yozgat.Latitude = 39.818080812692642;
            yozgat.Longitude = 34.814686104655266;
            MyMap.SetView(yozgat, 6);
            service.GetTokenCompleted += new EventHandler(service_GetTokenCompleted);
            service.GetTokenAsync();
            btnBul.IsEnabled = false;
        }
 
        void service_GetTokenCompleted(object sender, VirtualEarth1.TokenService.GetTokenCompletedEventArgs e)
        {
            Token = e.Result;
            btnBul.IsEnabled = true;
        }
        private MapGeocodeService.GeocodeServiceClient geocodeClient;
        private MapGeocodeService.GeocodeServiceClient GeocodeClient
        {
            get
            {
                if (null == geocodeClient)
                {
 
                    bool httpsUriScheme = HtmlPage.Document.DocumentUri.Scheme.Equals(Uri.UriSchemeHttps);
                    BasicHttpBinding binding = new BasicHttpBinding(httpsUriScheme ? BasicHttpSecurityMode.Transport : BasicHttpSecurityMode.None);
                    UriBuilder serviceUri = new UriBuilder("http://dev.virtualearth.net/webservices/v1/GeocodeService/GeocodeService.svc");
                    if (httpsUriScheme)
                    {
                        //For https, change the UriSceheme to https and change it to use the default https port.
                        serviceUri.Scheme = Uri.UriSchemeHttps;
                        serviceUri.Port = -1;
                    }
 
                    //Create the Service Client
                    geocodeClient = new MapGeocodeService.GeocodeServiceClient(binding, new EndpointAddress(serviceUri.Uri));
                    geocodeClient.GeocodeCompleted += new EventHandler(client_GeocodeCompleted);
                }
                return geocodeClient;
            }
        }
        private void client_GeocodeCompleted(object sender, MapGeocodeService.GeocodeCompletedEventArgs e)
        {
            string outString;
 
            try
            {
                if (e.Result.ResponseSummary.StatusCode != MapGeocodeService.ResponseStatusCode.Success)
                {
                    FromOutput.Text = outString = "error geocoding ... status <" + e.Result.ResponseSummary.StatusCode.ToString() + ">";
                }
                else if (0 == e.Result.Results.Count)
                {
                    FromOutput.Text = outString = "No result";
                }
                else
                {
 
                    GeocodeResult res = e.Result.Results[0];
                    System.Windows.Shapes.Rectangle rec = new System.Windows.Shapes.Rectangle();
                    rec.Fill = new SolidColorBrush(Colors.Red);
                    rec.Width = 15;
                    rec.Height = 15;
                    rec.Opacity = 0.65;
                    mapLayer.AddChild(rec, new Microsoft.VirtualEarth.MapControl.Location(res.Locations[0].Latitude, res.Locations[0].Longitude));
                }
            }
            catch (Exception)
            {
                outString = "Exception raised";
            }
 
 
        }
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            GeocodeAddress(txtAdres.Text);
        }
        private void GeocodeAddress(string address)
        {
            MapGeocodeService.GeocodeRequest request = new MapGeocodeService.GeocodeRequest();
 
            request.Culture = MyMap.Culture;
            request.Query = address;
 
            request.ExecutionOptions = new MapGeocodeService.ExecutionOptions();
            request.ExecutionOptions.SuppressFaults = true;
 
            request.Credentials = new MapGeocodeService.Credentials();
 
            request.Credentials.Token = Token;
 
            request.Options = new MapGeocodeService.GeocodeOptions();
 
            request.Options.Filters = new ObservableCollection();
            MapGeocodeService.ConfidenceFilter filter = new MapGeocodeService.ConfidenceFilter();
            filter.MinimumConfidence = MapGeocodeService.Confidence.High;
            request.Options.Filters.Add(filter);
            FromOutput.Text = "";
            // Service Çağrılır
            GeocodeClient.GeocodeAsync(request);
        }
    }
}
 
 
Kodu incelediğimizde bulunan noktaya bir Rectangle nesnesi eklemektedir.
 
Projeyi aşağıdaki likten indirerek inceleyebilirsiniz. Projeyi run ettiğinizde çalışmayacaktır. Web projesindeki Service1.csv.cs dosyasının içindeki "GetToken" methodunda "User" ve "Password" bolumlerini yukarda bahsettigim ve sizin almış olduğunuz Bing Map Developer Account bilgilerini girerek doğru bir şekilde çalıştırabilirsiniz. Bir sonraki makalemizde Routing olaylarını ve Map üzerine Shape Ekleme olaylarını inceleyecegiz.
 
 
 
 
Herkese iyi çalışmalar
 
 
Ömer Emre AKTEPE
Yazılım Mühendisi 

 

Makale:
Virtual Earth Silverlight Control - 2 - Adres Bulma(Geocode) Kodlama Ömer Emre Aktepe
  • Yazılan Yorumlar
  • Yorum Yaz
Bu konu hakkında yayınlanan yorum bulunmamaktadır.
"Yorum Yaz" tabını kullanarak sizde yorumlarınızı yazabilirsiniz.
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor