Как я могу изменить код визуальной студии, который создает тематическую карту с использованием метода равных диапазонов, на создание тематической карты с использованием естественных разрывов?
Я пытаюсь использовать Visual Studio для создания тематической карты, которая считывает данные из моей таблицы Mapinfo «Окрестности» и показывает их на карте, разделяя данные на равные диапазоны, и для этого я использую этот код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MapInfo;
namespace Spatial_Analysis_On_Housing_Prices_Ankara
{
public partial class Ankara_Neighborhood_Thematic : Form
{
public Ankara_Neighborhood_Thematic()
{
InitializeComponent();
}
public void removetematik()
{
for (int k = Convert.ToInt16(Form1.mi.Eval("mapperinfo(" + Form1.win_id + ",9)")); k > 0; k = k - 1)
{
if (Convert.ToInt16(Form1.mi.Eval("layerinfo(" + Form1.win_id + "," + Convert.ToString(k) + ",24)")) == 3)
{
Form1.mi.Do("remove map layer \"" + Form1.mi.Eval("layerinfo(" + Form1.win_id + "," + Convert.ToString(k) + ",1)") + "\"");
}
}
}
private void Ankara_Neighborhood_Thematic_Load(object sender, EventArgs e)
{
listBox1.SelectedIndex = 0;
}
private void thematic_Click_1(object sender, EventArgs e)
{
int n = Convert.ToInt16(textBox1.Text);
string p = panel1.Handle.ToString();
string thematic_column = string.Empty;
removetematik();
thematic_column = listBox1.Text;
Form1.mi.Do("select Max(" + thematic_column + ") from Neighbourhoods into maxselect");
Double maxx = Convert.ToDouble(Form1.mi.Eval("maxselect.col1"));
Form1.mi.Do("select Min(" + thematic_column + ") from Neighbourhoods into minselect");
Double minn = Convert.ToDouble(Form1.mi.Eval("minselect.col1"));
Form1.mi.Do("select " + thematic_column + " from Neighbourhoods order by " + thematic_column + " into sel noselect");
int diff = Convert.ToInt32(maxx - minn);
int range = diff / n;
int c_range = Convert.ToInt16(255 / n);
Form1.mi.Do("fetch first from sel");
string r1 = Convert.ToString(Form1.mi.Eval("sel.col1"));
string r2 = string.Empty;
string cmstr = string.Empty;
for (int i = 1; i < n; i++)
{
int temp = Convert.ToInt32(r1) + range;
r2 = temp.ToString();
string rgb = Convert.ToString(Form1.mi.Eval("RGB(255," + Convert.ToString((n - i) * c_range) + "," + Convert.ToString((n - i) * c_range) + ")"));
cmstr = cmstr + r1 + ":" + r2 + " brush(2," + rgb + ",16777215), ";
r1 = r2;
}
Form1.mi.Do("fetch last from sel");
r2 = Convert.ToString(Form1.mi.Eval("sel.col1"));
cmstr = cmstr + r1 + ":" + r2 + " brush(2,16711680,16777215)";
Form1.mi.Do("shade window " + Form1.win_id + " Neighbourhoods with " + thematic_column + " ranges apply all use color Brush (2,16711680,16777215) " + cmstr);
Form1.mi.Do("Set Next Document Parent " + p + " Style 1");
Form1.mi.Do("Create Cartographic Legend From Window " + Form1.win_id + " Behind Frame From Layer 3");
}
}
}
Теперь я хочу заменить части, в которых используются равные диапазоны, на «Естественные разрывы». Как мне это сделать?
У меня есть код для создания тематической карты методом естественных разрывов, но он в формате MapBasic, я хочу, чтобы он был на C #, принимая во внимание код для равных диапазонов в качестве шаблона.
это код карты:
include "mapbasic.def"
dim rrr() as float, dolgu() as brush
dim k as integer
create ranges from Neighbourhoods with AvG_Price_Per_Sq_meter use "Natural Break" number 10 round 1000 into variable rrr
for k=1 to 20
print rrr(k)
next
Create Styles
From Brush(2, white, 0) 'style for LOW range
To Brush (2, RED, 0) 'style for HIGH range
Vary Color By "RGB"
Number 10
Into Variable dolgu
shade Neighbourhoods
With AvG_Price_Per_Sq_meter
Ranges
From Variable rrr
Style Variable dolgu
Вместо этого я пытаюсь изменить части, которые создают тематическую карту из моих данных, используя метод равных диапазонов, на метод естественных разрывов.