Seleksi Obyek Dalam Radius Tertentu di MapXtreme

Di aplikasi  MapXtreme kita bisa melakukan seleksi obyek dalam radius tertentu dari titik tertentu. Biasanya seleksi semacam ini diterapkan untuk mengetahui jumlah kompetitor, atau jumlah POI disekitar titik pusat. Misal berapa jumlah dealer motor yang ada dalam radius 2 km dari dealer motor A.

Berikut adalah contoh program seleksi radius:

private void SearchWithinRadius(double x, double y, double rad)
{
   Map peta = MapInfo.Engine.Session.Current.MapFactory[MapControl1.MapAlias];
   MapInfo.Data.SearchInfo si;
   si = MapInfo.Data.SearchInfoFactory.SearchWithinDistance(new MapInfo.Geometry.DPoint(x,y),
        MapInfo.Engine.Session.Current.CoordSysFactory.CreateLongLat(DatumID.WGS84),
        new MapInfo.Geometry.Distance(rad,DistanceUnit.Kilometer), MapInfo.Data.ContainsType.Centroid );
   si.QueryDefinition.Columns = new string[] { "*" };

   MapInfo.Data.IResultSetFeatureCollection irfc;
   irfc = MapInfo.Engine.Session.Current.Catalog.Search("NamaLayer",si);
   //zoom peta ke obyek yang terseleksi
   peta.SetView(irfc);

   if (irfc.Count == 0)
   {
      //Tidak ada objek dalam radius yang dicari. Lakukan sesuatu disini
      return;
   }

   //jika objek ketemu
   foreach (MapInfo.Data.Feature f in irfc)
   {
      //Lakukan sesuatu dengan objek yang ditemukan disini.
   }

   MapInfo.Engine.Session.Current.Selections.DefaultSelection.Clear();
   MapInfo.Engine.Session.Current.Selections.DefaultSelection.Add(irfc);
}

Untuk menggambarkan lingkaran radiusnya di peta:

private void CreateCircle(double x, double y, Single radius)
 {
    Map peta = GetMapObjek();
    //karena lingkaran akan dibuat di temporary layer, maka jika temp layer sudah ada,
    //temp layer ini harus dihapus dulu
    if (peta.Layers["temp"] != null)
    {
       FeatureLayer ftr = (FeatureLayer)peta.Layers["temp"];
       ftr.Modifiers.Clear();
       ftr.Table.Close();
    }
    //close temp table jika ternyata, ada temp tabel sisa user laen
    MapInfo.Engine.Session.Current.Catalog.CloseTable("temp");

    MapInfo.Data.TableInfo ti = MapInfo.Data.TableInfoFactory.CreateTemp("temp");
    MapInfo.Data.Table tabel = MapInfo.Engine.Session.Current.Catalog.CreateTable(ti);

    DPoint center = new DPoint(x,y);
    Ellipse circle = new Ellipse(peta.GetDisplayCoordSys(),center,
       radius,radius,DistanceUnit.Kilometer,DistanceType.Spherical);
    MapInfo.Styles.AreaStyle circlestyle = new MapInfo.Styles.AreaStyle();
    circlestyle.Interior = new MapInfo.Styles.SimpleInterior(8,
       System.Drawing.Color.Aqua, System.Drawing.Color.Transparent,true);

    MapInfo.Data.Feature f = new MapInfo.Data.Feature(circle,circlestyle);
    tabel.InsertFeature(f);

    FeatureLayer fl = new FeatureLayer(tabel);
    peta.Layers.Add(fl);
 }

About Yuniar

Penulis sekarang lebih banyak bekerja menggunakan teknologi Microsoft .NET secara umum dan TIDAK lagi menggunakan aplikasi MapXtreme.net dari MapInfo. Karena itu mohon maaf, jika pertanyaan-pertanyaan mengenai MapXtreme sudah tidak bisa saya jawab lagi.

Posted on 31 Agustus 2009, in MapXtreme and tagged , , , , , . Bookmark the permalink. Tinggalkan komentar.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: