Arsip Blog

MapXtreme: Too Many Constants in Subexpressions (Maximum is 255)

Beberapa waktu lalu, Mas Ndereklangkung mengalami error ini ketika membuat aplikasi mapxtreme. Dia mencoba melakukan query untuk mencari objek peta. Parameter yang digunakan diambil dari database, diubah jadi string dan dimasukkan dalam query mapinfo
“Select * from Jabodetabek_Sales_Customers where acc_id in (” & xx & “)”
Namun malah muncul error “Unable to parse statement: Select * from Jabodetabek_Sales_Customers where acc_id in (‘5300027541′,’5300058807′,’5300062475′,’…’). Too Many Constants in Subexpressions (Maximum is 255). Ternyata query ‘IN’ di mapinfo hanya mampu menerima 255 parameter. Lebih dari itu akan muncul error

Salah satu cara mengatasi ini adalah memecah queri menjadi beberapa bagian. String parameter yang akan digunakan dalam query, (di contoh ini diambil dari database), kita simpan dalam StringCollection untuk memudahkan mengetahui jumlah parameter dan memisahkannya. xx adalah variabel stringCollection yang akan digunakan.
Read the rest of this entry

Iklan

Menggabungkan Tabel Database dengan Tabel Atribut di MapXtreme

Biasanya, dalam pembuatan aplikasi GIS sering dipisahkan antara tabel data dan peta. Informasi statistik yang sangat banyak tidak disimpan dalam tabel atribut peta, tetapi disimpan dalam database. Tabel atribut peta hanya menyimpan ID  dan keterangan singkat dari objek. Lalu bagaimana menghubungkan tabel di database dengan tabel atribut peta? Ada satu kolom yang biasanya digunakan sebagai referensi, sebut saja kolom ID. Kolom ini terdapat di tabel atribut peta dan juga di tabel database. Kolom inilah menjadi kunci penghubung antara tabel atribut peta dan tabel database.

Peta tematik merupakan satu contoh penerapan dari penggabungan data dari database ke tabel atribut peta. Peta tematik terbentuk berdasarkan data yang ada di tabel atribut peta. Jika data ada di database, maka data harus dipindahkan dan digabungkan ke tabel atribut kemudian peta tematik dibuat. Di artikel kali ini, saya mencoba mengupas penggabungan data dari database SQL server ke tabel atribut peta.

Read the rest of this entry

Update Data Atribut di MapXtreme

Di artikel sebelumnya, ada sedikit penjelasan tentang pencarian objek. Di artikel kali ini, metode pencarian tidak berdasarkan objek di peta. Objek dicari di tabel atribut tanpa mengetahui posisi objek di peta. Untuk melakukannya digunakan class

MapInfo.Data.SearchInfoFactory.SearchWhere

Read the rest of this entry

Menghapus Objek Point

Untuk menghapus objek point dari peta, pertama kita pilih objek yang akan dihapus. Kita bisa menerapkan metode klik langsung pada peta. Tentu ketika melakukan klik, kita bisa memperoleh informasi long-lat (xy). (Baca: Membuat tool untuk mendapatkan koordinat lokasi). Informasi xy ini digunakan untuk parameter metode searching objek terdekat.

SearchInfoFactory.SearchNearest(peta, poin, peta.GetDisplayCoordSys())

metode SearchNearest ini dilakukan, karena belum tentu lokasi klik tepat pada posisi objek karena adanya pengaruh toleransi pixel. Berbeda halnya jika kita melakukan seleksi objek dengan klik and drag.

Kemudian kita cari feature objek di tabel atribut peta berdasarkan SearchInfoFactory. Setelah feature ditemukan, hapus menggunakan metode berikut

Table.DeleteFeature(ftr)
Table.Pack(PackType.RemoveDeletedRecords)

Read the rest of this entry

Boundary Selection di MapXtreme

Di mapxtreme kita bisa melakukan seleksi objek-objek yang ada dalam batas tertentu. Misalnya melakukan seleksi objek di suatu propinsi. Pada contoh kali ini, akan dilakukan seleksi objek jalan yang ada di propinsi. Pada peta jalan tidak ada informasi atribut yang menunjukkan lokasi jalan. Karena itu untuk melakukan seleksi kita menggunakan peta propinsi sebagai filter.

Pertama kita melakukan seleksi propinsi dari peta propinsi (INDONESIA_PROVINSI). Peta propinsi ini mempunyai kolom atribut “PROVINSI”.

MICom.CommandText = "select mi_geometry from INDONESIA_PROVINSI 
                     where PROVINSI = 'BALI’";

hasilnya dikonversi sebagai feature geometry.

Feature geometry ini digunakan sebagai parameter dari methoe SearchWithinGeometry.

Contoh kode selengkapnya:

Map peta = MapInfo.Engine.Session.Current.MapFactory[0];
MapInfo.Data.IResultSetFeatureCollection irfc = null;
MapInfo.Data.MIConnection micon = new MapInfo.Data.MIConnection();
MapInfo.Data.MICommand MICom = micon.CreateCommand();

//ambil batas provinsi dari peta provinsi
MICom.CommandText = "select mi_geometry from INDONESIA_PROVINSI where PROVINSI = 'BALI’";
micon.Open();
FeatureGeometry fg = MICom.ExecuteScalar() as FeatureGeometry;

//batas provinsi dijadikan batas geometri di peta jalan
MapInfo.Data.SearchInfo si = MapInfo.Data.SearchInfoFactory.SearchWithinGeometry(fg,
MapInfo.Data.ContainsType.Centroid);
irfc = micon.Catalog.Search("INDONESIA_STREET", si);

//ambil batas provinsi dari peta provinsi
MapInfo.Engine.Session.Current.Selections.DefaultSelection.Add(irfc);
//zoom ke provinsi yang di pilih
peta.SetView(fg);

Happy Coding!

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.

Read the rest of this entry

Membuka file ESRI di MapXtreme

MapXtreme bisa membuka atau menambahkan tabel dari shapefile secara langsung.
Langkang-langkah untuk membuka file ESRI (.shp)

  • Buat inisialisasi baru dari TableInfoShapefile
  • Masukkan lokasi file ke TablePath property
  • Tambahkan kolom geometry dan kolom atribut serta tipe kolom sesuai dengan kolom yang ada di shapefile
  • Contoh : VB.NET

    Dim ti As TableInfoShapefile = New TableInfoShapefile("EsriShape")
    ti.TablePath = "c:\Data\ESRI\Countries_region.shp"
    Dim CSysFactory As CoordSysFactory = Session.Current.CoordSysFactory
    ' data is stored in Robinson
    Dim coordSys As CoordSys = CSysFactory.CreateCoordSys("mapinfo:coordsys 12,62,7,0")
    ti.Columns.Add(ColumnFactory.CreateFeatureGeometryColumn(coordSys))
    
    ti.Columns.Add(ColumnFactory.CreateStringColumn("Country", 30))
    ti.Columns.Add(ColumnFactory.CreateStringColumn("Capital", 30))
    ti.Columns.Add(ColumnFactory.CreateDecimalColumn("Pop_1994", 11, 0))
    
    ti.Columns.Add(ColumnFactory.CreateDoubleColumn("Pop_Grw_Rt"))
    ti.Columns.Add(ColumnFactory.CreateDoubleColumn("Pop_Male"))
    ti.Columns.Add(ColumnFactory.CreateStyleColumn())
    ti.DefaultStyle = New AreaStyle(New SimpleLineStyle( _
    New LineWidth(2.0, LineWidthUnit.Pixel), PatternStyle.Solid, Color.Red), _
    New SimpleInterior(PatternStyle.Cross, Color.Red, Color.White))
    Dim table As Table = Session.Current.Catalog.OpenTable(ti)

    Source: MapXtreme developer guide