risinghero / Yandex.API.Geocoder

C# client for yandex geocoder

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Yandex.Geocoder

This is forked version without RestSharp dependency and with support for object data request (from GeoSuggest uri).

For forward geocoding you should create GeocodeRequest and execute it.

var request = new GeocoderRequest { Request = "Ярославль серова 13" };
var client = new GeocoderClient();

var response = await client.Geocode(request);

var firstGeoObject = response.GeoObjectCollection.FeatureMember.FirstOrDefault();
var coordinate = firstGeoObject.GeoObject.Point.Pos;
var addressComponents = firstGeoObject.GeoObject.MetaDataProperty.GeocoderMetaData.Address.Components;
var country = addressComponents.FirstOrDefault(c => c.Kind.Equals(AddressComponentKind.Country));
var province = addressComponents.LastOrDefault(c => c.Kind.Equals(AddressComponentKind.Province));
var area = addressComponents.FirstOrDefault(c => c.Kind.Equals(AddressComponentKind.Area));
var city = addressComponents.FirstOrDefault(c => c.Kind.Equals(AddressComponentKind.Locality));
var street = addressComponents.FirstOrDefault(c => c.Kind.Equals(AddressComponentKind.Street));
var house = addressComponents.FirstOrDefault(c => c.Kind.Equals(AddressComponentKind.House));

Assert.Equal("Россия", country.Name);
Assert.Equal("Ярославская область", province.Name);
Assert.Equal("городской округ Ярославль", area.Name);
Assert.Equal("Ярославль", city.Name);
Assert.Equal("улица Серова", street.Name);
Assert.Equal("13", house.Name);
Assert.Equal("39.802311 57.608719", coordinate);

For reverse geocoding you should create ReverseGeocodreRequest.

var request = new ReverseGeocoderRequest { Latitude = 58.046733, Longitude = 38.841715 };
var client = new GeocoderClient();

var response = await client.ReverseGeocode(request);

var firstGeoObject = response.GeoObjectCollection.FeatureMember.FirstOrDefault();
var addressComponents = firstGeoObject.GeoObject.MetaDataProperty.GeocoderMetaData.Address.Components;
var country = addressComponents.FirstOrDefault(c => c.Kind.Equals(AddressComponentKind.Country));
var province = addressComponents.LastOrDefault(c => c.Kind.Equals(AddressComponentKind.Province));
var area = addressComponents.FirstOrDefault(c => c.Kind.Equals(AddressComponentKind.Area));
var city = addressComponents.FirstOrDefault(c => c.Kind.Equals(AddressComponentKind.Locality));
var street = addressComponents.FirstOrDefault(c => c.Kind.Equals(AddressComponentKind.Street));
var house = addressComponents.FirstOrDefault(c => c.Kind.Equals(AddressComponentKind.House));

Assert.Equal("Россия", country.Name);
Assert.Equal("Ярославская область", province.Name);
Assert.Equal("городской округ Рыбинск", area.Name);
Assert.Equal("Рыбинск", city.Name);
Assert.Equal("улица Бородулина", street.Name);
Assert.Equal("23", house.Name);

Also you may use all additional parameters from https://tech.yandex.ru/maps/doc/geocoder/desc/concepts/input_params-docpage/

About

C# client for yandex geocoder


Languages

Language:C# 100.0%