Как грамотно составлять запросы к ФИАС?

Подскажите у кого есть опыт внедрения ФИАС, для использования адресной системы.
Чтобы можно было задавать адрес, сверху вниз.
Сначала Регион, Район, Город, Районы Города и пр., есть разные схемы.
Разобраться в этом ФИАС немного сложновато.
  • Вопрос задан
  • 37 просмотров
Пригласить эксперта
Ответы на вопрос 2
@anikavoi
ФИАС прост.
У него есть таблица структурных объектов (ADDROBJ) и две таблицы подструктурных (HOUSE, FLATS).
В ADDROBJ есть поле "Уровень" от 1 и ниже. Запрос "Дай все записи с уровнем 1" - даст все регионы, у каждой записи есть свой идентификатор. Выбираешь регион, например "Москва", берешь его идентификатор и говоришь "Дай все объекты у которых идентификатор parent равен этому" и получаешь следующиий слой. В следующем слое опять выбираешь нужную позицию например "Зеленоград" и берешь его идентификатор, и снова "Дай все объекты у которых parent равен этому".... и так пока не упрешься в улицу\переулок итд. Т.е. не будет записей с таким парентом, тогда лезешь в HOUSES и делаешь то же самое - для домов. Ну а квартиры еще ниже в таблице flat. Все просто.
Ответ написан
firedragon
@firedragon
Senior .NET developer
Держите готовый код :)

program.cs
using HeIsBad.Models;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Globalization;
using Microsoft.Data.SqlClient;

namespace DataExport
{
    class Program
    {

        static void Main(string[] args)
        {

            //TestSqlFloat();
            // return;
            var importer = new SqlImporter();
            
            SaveRegionListToJson(importer.Regions);
            SaveCityListToJson(importer.Cityes);

        }

        private static void TestSqlFloat()
        {
            SqlConnection con;
            SqlCommand com;


            string connect = @"Data Source=HP\TEW_SQLEXPRESS;Initial Catalog=master;Integrated Security=True";
            con = new SqlConnection(connect);
            con.Open();
            com = con.CreateCommand();
            var addMin_TB_Text = "10,77777";
            var min = float.Parse(addMin_TB_Text);

            var addMax_TB_Text = "20,77777";
            var max = float.Parse(addMax_TB_Text);

            var addCena_TB_Text = "33,3";
            var cena = float.Parse(addCena_TB_Text);

            var tonn = addMin_TB_Text + " - " + addMax_TB_Text;

            com.CommandText = @"INSERT INTO t_stoimost (mintonn, maxtonn, tonn, cenakm) 
VALUES ( @mintonn, @maxtonn, @tonn, @cenakm )";
            
            com.Parameters.AddWithValue("@mintonn", min);
            com.Parameters.AddWithValue("@maxtonn", max);
            com.Parameters.AddWithValue("@tonn", tonn);
            com.Parameters.AddWithValue("@cenakm", cena);

            com.ExecuteNonQuery();
            con.Close();
            
        }

        private static void SaveCityListToJson(List<City> citylist)
        {
            var regs = citylist.ToArray();

            var result = JsonConvert.SerializeObject(regs, Formatting.Indented);
            System.IO.File.WriteAllText("cityes.json", result);
        }

        private static void SaveRegionListToJson(List<Region> reglist)
        {
            var regs = reglist.ToArray();
            var result = JsonConvert.SerializeObject(regs, Formatting.Indented);
            System.IO.File.WriteAllText("regions.json", result);
        }
    }
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы