MapXtreme Demo Uygulaması

Geçtiğimiz yaz yazdığım bir projeydi. Bir firmanın (ismi lazım değil ama baş harfi Başarsoft) mülakat için az laf çok kod ayaklarında verdiği bir web uygulaması. C# , ASP.NET ve MapInfo MapXtreme kullanarak yaptığım GIS amaçlı bir proje. Pitney Bowes’taki abilerimiz ablalarımız iyi güzel yapmışlar, sağolsunlar ama dökümantasyonları biraz karmaşık gelmişti bana. Gerçi bunda kodu yazdığım zaman yazın sıcağından bunalmış, uzun zaman tatile hasret kalmışken tatilin ortasında kod yazmış ve daha önce GIS işleriyle pek uğraşmamış olmamında etkisi olabilir, bilemiyorum.

Neyse aşağıda kaynak kodlarımı, videosunu paylaşıyorum. Zira bu 4 oldu mail vasıtası ile insanlar böyle bir talepte bulunuyor. Ayrıca yeri gelmişken söylemek lazım, firma bugün yarın diyerek beni 3 haftadan fazla bir süre bekletmiş, “olumlu veya olumsuz muhakkak bir geri dönüş yaparız” demelerine rağmen yapmamış, ve kodu yazarken de aklınıza takılan bir yer olursa X arkadaşımıza mail atabilirsiniz demelerine rağmen ilk soruya cevap verdikten sonra bu X şahsı herhangi bir şekilde mailime cevap göndermemiştir.

Mülakatı yaptığım Şule hanım da şaka gibi bir ücrete, “servis dolu olursa kendin gidersin, biz ücretini veremeyiz” gibi bir yaklaşımla Başarsoft’un personeline verdiği değeri göstermişti gerçi. Anlaşılan ucuz atlatmışım, çok şükür!

Kaynak kodları:

1. myWebForm.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="myWebForm.aspx.cs" Inherits="myWebForm" %>

<%@ Register assembly="MapInfo.WebControls, Version=7.0.0.200, Culture=neutral, PublicKeyToken=0a9556cc66c0af57" namespace="MapInfo.WebControls" tagprefix="cc1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
 <title></title>
 <style type="text/css">
 .style1
 {
 width: 358px;
 }
 .style2
 {
 height: 165px;
 }
 </style>
</head>
<body>
 <form id="form1" runat="server">
 <table style="width: 74%; height: 579px;">
 <tr>
 <td class="style1" rowspan="2">
 <cc1:MapControl ID="MapControl1" runat="server" Height="571px" Width="550px" />
 </td>
 <td class="style2">
 İl Adı :&nbsp;&nbsp;&nbsp;
 <asp:DropDownList ID="DropDownList1" runat="server" Height="22px"
 >
 </asp:DropDownList>
&nbsp;&nbsp;
 <asp:Button ID="Button1" runat="server" Text="İlçeleri Göster" Width="106px"
 onclick="Button1_Click" />
 <br />
 İlçe Adı : <asp:DropDownList ID="DropDownList2" runat="server">
 </asp:DropDownList>
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 <asp:Button ID="Button2" runat="server" onclick="Button2_Click"
 Text="İlçeye Zoom" />
 </td>
 </tr>
 <tr>
 <td>
 İlçe Kapalı Alanı Koordinat Listesi:<br />
 <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
 <br />
 <asp:TextBox ID="TextBox1" runat="server" Height="381px" Width="303px"
 TextMode="MultiLine" ReadOnly="True"></asp:TextBox>
 </td>
 </tr>
 </table>
 <table style="position:absolute; left: 411px; top: 531px;">
 <tr>
 <td><cc1:ZoomInTool ID="ZoomInTool1" runat="server" MapControlID="MapControl1"/></td>
 <td><cc1:ZoomOutTool ID="ZoomOutTool1" runat="server" MapControlID="MapControl1" /></td>
 <td><cc1:CenterTool ID="CenterTool1" runat="server" MapControlID="MapControl1" /></td>
 <td><cc1:PanTool ID="PanTool1" runat="server" MapControlID="MapControl1" /></td>
 </tr>
 </table>
 </form>
</body>
</html>

 

2. myWebForm.aspx.cs

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Configuration;
using System.Web.Security;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using MapInfo.Data;
using MapInfo.Mapping;
using MapInfo.WebControls;
using MapInfo.Engine;
using MapInfo.Geometry;
using ApplicationStateManager;

public partial class myWebForm : System.Web.UI.Page
{
 string alinanPlaka="";

 protected void Page_Load(object sender, EventArgs e)
 {
 if (IsPostBack) return;

 if (StateManager.IsManualState())
 {
 // If the StateManager doesn't exist in the session put it else get it.
 if (StateManager.GetStateManagerFromSession() == null)
 {
 //instanciate AppStateManager class
 AppStateManager myStateManager = new AppStateManager();
 //put state manager to session
 StateManager.PutStateManagerInSession(myStateManager);
 //put current map alias to state manager dictionary
 myStateManager.ParamsDictionary[StateManager.ActiveMapAliasKey] = this.MapControl1.MapAlias;
 }

 // Now Restore State
 StateManager.GetStateManagerFromSession().RestoreState();

 }

 string sorgu = "SELECT IlAdi FROM ILLER";
 MIConnection myConnection = new MIConnection();
 MICommand myCommand = new MICommand(sorgu, myConnection);
 myConnection.Open();
 MIDataReader myReader = myCommand.ExecuteReader();
 DropDownList1.Items.Clear();
 while (myReader.Read())
 {
 DropDownList1.Items.Add(new ListItem(
 myReader["IlAdi"].ToString()));
 }

 myConnection.Close();
 myReader.Close();

 }

 protected void Button1_Click(object sender, EventArgs e)
 {
 getIlce();
 zoom2City();
 }

 protected void Button2_Click(object sender, EventArgs e)
 {
 zoom2District();
 }

 public void zoom2District()
 {
 string districtName = Convert.ToString(DropDownList2.SelectedValue);
 string myQuery = "SELECT * FROM ILCELER WHERE IlceAdi = '" + districtName + "'";
 MIConnection districtZoomConn = new MIConnection();
 MICommand districtZoomComm = new MICommand(myQuery, districtZoomConn);
 districtZoomConn.Open();
 IResultSetFeatureCollection sonuc =
 districtZoomComm.ExecuteFeatureCollection();
 if (sonuc.Count != 0)
 {
 Map myMap = MapInfo.Engine.Session.Current.MapFactory[0];
 myMap.SetView(sonuc[0].Geometry.Envelope); 

 double x = sonuc[0].Geometry.Centroid.x;
 double y = sonuc[0].Geometry.Centroid.y;
 Point ilcepoints = new Point(myMap.GetDisplayCoordSys(), x, y);
 TextBox1.Text = "1.Nokta:" + sonuc[0].Geometry.Bounds.x1.ToString() + " " + sonuc[0].Geometry.Bounds.y1.ToString() + Environment.NewLine +
 "2.Nokta:" + sonuc[0].Geometry.Bounds.x2.ToString() + " " + sonuc[0].Geometry.Bounds.y2.ToString();

 TableInfoMem(x, y, myMap);
 }
 districtZoomConn.Close();
 }

 public void TableInfoMem(double x, double y, Map map)
 {
 MapInfo.Data.MIConnection connection = new MapInfo.Data.MIConnection();
 connection.Open();

 //create memtable
 MapInfo.Data.TableInfoMemTable men1 = new MapInfo.Data.TableInfoMemTable("memtable1");
 //create column object for column creation
 MapInfo.Data.Column col1 = new MapInfo.Data.Column();
 //create column to store X coordinates:
 col1 = MapInfo.Data.ColumnFactory.CreateDoubleColumn("X");
 //add it to the mem table
 men1.Columns.Add(col1);
 //create column to store Y coordinates:
 col1 = MapInfo.Data.ColumnFactory.CreateDoubleColumn("Y");
 //add it to the memtable
 men1.Columns.Add(col1);
 //create column to store style information
 col1 = MapInfo.Data.ColumnFactory.CreateStyleColumn();
 //add it to the memtable
 men1.Columns.Add(col1);
 //create object column:
 col1 = MapInfo.Data.ColumnFactory.CreateFeatureGeometryColumn(map.GetDisplayCoordSys());
 //add it to the memtable
 men1.Columns.Add(col1);
 //set memtable to temp status
 men1.Temporary = true;
 //create a table based on the temptable's structure

 MapInfo.Data.Table table1 = connection.Catalog.GetTable("memtable1");

 if (table1 == null)
 {
 table1 = connection.Catalog.CreateTable(men1);
 }

 //add the table to the map - this is where you will insert your points
 map.Load(new MapInfo.Mapping.MapTableLoader(table1));

 //create point...

 //create the feature geometry
 MapInfo.Geometry.FeatureGeometry pt1 = new MapInfo.Geometry.Point(map.GetDisplayCoordSys(), x, y);
 //create a point style
 MapInfo.Styles.CompositeStyle cs = new MapInfo.Styles.CompositeStyle(new MapInfo.Styles.SimpleVectorPointStyle(37, System.Drawing.Color.Red, 25));

 //Create feature to be inserted...
 MapInfo.Data.Feature ftr = new MapInfo.Data.Feature(table1.TableInfo.Columns);
 ftr.Geometry = pt1;
 ftr.Style = cs;
 ftr["X"] = x.ToString();
 ftr["Y"] = y.ToString();

 //insert feature into table 

 table1.BeginAccess(MapInfo.Data.TableAccessMode.Write);
 table1.InsertFeature(ftr);
 table1.EndAccess();

 connection.Close();

 //create Dpoint from x,y coordinates
 MapInfo.Geometry.DPoint dpt1 = new MapInfo.Geometry.DPoint(x, y);

 //////change center of map to the recently inserted point, and adjust zoom to specific level...
 ////double dist = 500;//your specified zoom level
 ////MapInfo.Geometry.Distance v_Zoom = new MapInfo.Geometry.Distance(dist, MapInfo.Geometry.DistanceUnit.Mile);
 ////MapInfo.Geometry.DPoint v_Center = dpt1;

 }

 public void zoom2City()
 {
 string cityName = Convert.ToString(DropDownList1.SelectedValue);
 string myQuery = "SELECT * FROM ILLER WHERE IlAdi = '" +cityName+ "'";
 MIConnection zoomConn = new MIConnection();
 MICommand zoomComm = new MICommand(myQuery,zoomConn);
 zoomConn.Open();
 IResultSetFeatureCollection sonuc =
 zoomComm.ExecuteFeatureCollection();
 if (sonuc.Count != 0) {
 MapInfo.Engine.Session.Current.MapFactory[0].SetView(sonuc[0].Geometry.Envelope);
 }
 zoomConn.Close();

 }

 public void getIlce() {

 string chosenDropDownListContent = Convert.ToString(DropDownList1.SelectedValue);

 string ilPlakaSorgusu = "SELECT PlakaNo from ILLER where IlAdi = '" + chosenDropDownListContent + "'";

 MIConnection connect_ilPlaka = new MIConnection();
 MICommand command_İlPlaka = new MICommand(ilPlakaSorgusu, connect_ilPlaka);
 connect_ilPlaka.Open();

 MIDataReader reader_ilPlaka = command_İlPlaka.ExecuteReader();

 while (reader_ilPlaka.Read())
 {
 alinanPlaka = (reader_ilPlaka["PlakaNo"].ToString());
 }

 reader_ilPlaka.Close();
 connect_ilPlaka.Close();

 string sorgu2 = "SELECT IlceAdi from Ilceler WHERE PlakaNo = '" + alinanPlaka + "'";

 MIConnection connectIlce = new MIConnection();
 MICommand commandIlce = new MICommand(sorgu2, connectIlce);
 connectIlce.Open();
 MIDataReader readerIlce = commandIlce.ExecuteReader();
 DropDownList2.Items.Clear();
 while (readerIlce.Read())
 {
 DropDownList2.Items.Add(new ListItem(
 readerIlce["IlceAdi"].ToString()));
 }

 readerIlce.Close();
 connectIlce.Close();
 }

 // At the time of unloading the page, save the state
 private void Page_UnLoad(object sender, System.EventArgs e)
 {
 if (StateManager.IsManualState())
 {
 StateManager.GetStateManagerFromSession().SaveState();
 }
 }

}

Ve bu da videosu:

 

Yorum bırakın

Filed under Projelerim

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s