Simple Edit

TatukGIS Internet Server Samples



Status bar 

Caption:text
eText:text
eInt:integer
eFloat:number
eDecimal:number
eData:date
eYesNo:True|False
Source code

This TatukGIS Internet Server sample (specifically the sample code) shows how to provide basic editing capability.


SimpleEdit.aspx    Top

                    
<%@ Page Language="VB" Debug="False" %>
<%@ Register TagPrefix="ttkGIS" Namespace="TatukGIS.IS" Assembly="TatukGIS.IS" %>
<%@ import Namespace="TatukGIS.IS" %>
<%@ import Namespace="TatukGIS.IS.API" %>

<script runat="server">

    Private Utils As XGIS_Utils
    
    Private Function isReservedName(ByVal _name As String) As Boolean
        Dim fname As String = _name.ToUpper()
        If fname = "UID" Then
            Return True
        End If
    End Function

    Private Sub clearFields()
        Dim i As Integer
        Dim ll As XGIS_LayerVector

        ll = GIS.API.Get("LayerEdit")

        For i = 0 To ll.Fields.Count - 1
            Dim fname As String = ll.FieldInfo(i).Name
            If isReservedName(fname) Then Continue For
            
            Dim edt As TextBox
            edt = pnlEdit.FindControl("edtUser" + fname)
            edt.Text = ""
        Next
    End Sub
    
    Sub GIS_Load(ByVal sender As Object, ByVal e As EventArgs)
        Utils = new XGIS_Utils
        
        Dim i As Integer
        Dim ll As XGIS_LayerVector
        
        GIS.Open(Page.MapPath("Data\TestEdit.ttkgp"))
        
        GIS.SetParameters("btnFullExtent.Hint", "Full Extent")
        GIS.SetParameters("btnZoom.Hint", "Zoom by rectangle")
        GIS.SetParameters("btnZoomEx.Hint", "Dynamic zoom")
        GIS.SetParameters("btnDrag.Hint", "Drag")
        GIS.SetParameters("btnSelect.Hint", "Select")
        GIS.SetParameters("btnLine.Hint", "measure distance")
        GIS.SetParameters("btnPolygon.Hint", "Measure area")
        GIS.SetParameters("btnEdit.Hint", "Edit feature")
        
        GIS.SetParameters("btnFullExtent.Pos", "(10,10)")
        GIS.SetParameters("btnZoom.Pos", "(40,10)")
        GIS.SetParameters("btnZoomEx.Pos", "(70,10)")
        GIS.SetParameters("btnDrag.Pos", "(100,10)")
        GIS.SetParameters("btnSelect.Pos", "(130,10)")
        GIS.SetParameters("btnLine.Pos", "(180,10)")
        GIS.SetParameters("btnPolygon.Pos", "(210,10)")
        GIS.SetParameters("btnEdit.Pos", "(250,10)")

        ' add fields
        ll = GIS.API.Get("LayerEdit")
        For i = 0 To ll.Fields.Count - 1
            Dim fname As String = ll.FieldInfo(i).Name

            If isReservedName(fname) Then Continue For

            Dim lbl As New Label()
            lbl.Text = fname + ":"
            lbl.Width = 120
            pnlEdit.Controls.Add(lbl)

            Dim edt As New TextBox()
            edt.ID = "edtUser" + fname
            If ll.FieldInfo(i).FieldType = XGIS_FieldType.XgisFieldTypeString Then
                edt.Width = 150
            Else
                edt.Width = 100
            End If
            pnlEdit.Controls.Add(edt)

            If ll.FieldInfo(i).FieldType = XGIS_FieldType.XgisFieldTypeString Then
                pnlEdit.Controls.Add(New LiteralControl("text"))
            End If
            If ll.FieldInfo(i).FieldType = XGIS_FieldType.XgisFieldTypeFloat Then
                pnlEdit.Controls.Add(New LiteralControl("number"))
            End If
            If ll.FieldInfo(i).FieldType = XGIS_FieldType.XgisFieldTypeNumber Then
                If ll.FieldInfo(i).Decimal = 0 Then
                    pnlEdit.Controls.Add(New LiteralControl("integer"))
                Else
                    pnlEdit.Controls.Add(New LiteralControl("number"))
                End If
            End If
            If ll.FieldInfo(i).FieldType = XGIS_FieldType.XgisFieldTypeBoolean Then
                pnlEdit.Controls.Add(New LiteralControl("True|False"))
            End If
            If ll.FieldInfo(i).FieldType = XGIS_FieldType.XgisFieldTypeDate Then
                pnlEdit.Controls.Add(New LiteralControl("date"))
            End If
            pnlEdit.Controls.Add(New LiteralControl("<br />"))
        Next

        
    End Sub
    
    
    Sub GIS_Click(sender As Object, e As ImageClickEventArgs)
        If (GIS.Flash = True) Or (GIS.Mode = XgisMode.Edit) Then
            GIS_BeginEdit(sender, e)
        Else
            GIS_Identify(sender, e)
        End If
    End Sub
    
    Sub GIS_Identify(ByVal sender As Object, ByVal e As ImageClickEventArgs)
    End Sub


    Sub GIS_BeginEdit(ByVal sender As Object, ByVal e As ImageClickEventArgs)
        Dim i As Integer
        Dim utl As New TatukGIS.IS.API.XGIS_Utils
        Dim shp As TatukGIS.IS.API.XGIS_Shape
        Dim ll As XGIS_LayerVector
        
        ll = GIS.API.Get("LayerEdit")
        
        shp = ll.Locate(GIS.API.ScreenToMap(utl.Point(e.X, e.Y)), 10 / GIS.Zoom)
        
        If Not shp Is Nothing Then
            For i = 0 To ll.Fields.Count - 1
                Dim fname As String = ll.FieldInfo(i).Name
                  
                If isReservedName(fname) Then Continue For
                
                Dim edt As TextBox
                edt = pnlEdit.FindControl("edtUser" + fname)
                edt.Text = shp.GetField(fname)
            Next

            Session("EditedShape") = shp.Uid
            GIS.EditShape(shp)

        End If
    End Sub

    
    Protected Sub btnSave_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim i As Integer
        Dim shp As XGIS_Shape
        Dim ll As XGIS_LayerVector
        
        ll = GIS.API.Get("LayerEdit")

        If Session("EditedShape") Is Nothing Then
            Try
                shp = Utils.GisCreateShapeFromWKT(WKT.Value)
                If Not shp Is Nothing Then
                    shp = ll.AddShape(shp)
                End If
            Catch
                shp = Nothing
            End Try
        Else
            shp = ll.GetShape(Session("EditedShape"))
            If Not shp Is Nothing Then
                shp = shp.MakeEditable()
                shp.ImportFromWKT(WKT.Value)
            End If
        End If
        If Not shp Is Nothing Then
            For i = 0 To ll.Fields.Count - 1
                Dim fname As String = ll.FieldInfo(i).Name
                
                If isReservedName(fname) Then Continue For
                
                Dim edt As TextBox
                edt = pnlEdit.FindControl("edtUser" + fname)
                Try
                    shp.SetField(fname, edt.Text)
                    edt.BackColor = Drawing.Color.White
                Catch
                    edt.BackColor = Drawing.Color.Red
                    Exit Sub
                End Try
            Next
            
            GIS.EndEdit()
            ll.SaveData()

            GIS.Update()
        End If

        Session("EditedShape") = Nothing

        clearFields()
    End Sub

    Protected Sub btnPoint_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        clearFields()
    End Sub

    Protected Sub btnLine_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        clearFields()
    End Sub

    Protected Sub bntPolygon_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        clearFields()
    End Sub

    Protected Sub btnDelete_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim ll As XGIS_LayerVector
        ll = GIS.API.Get("LayerEdit")

        If Not Session("EditedShape") Is Nothing Then
            Dim shp As XGIS_Shape
            shp = ll.GetShape(Session("EditedShape"))
            If Not shp Is Nothing Then
                shp.MakeEditable.Delete()
                ll.SaveData()
            End If

            Session("EditedShape") = Nothing

            GIS.EndEdit()
            GIS.Update()
        Else
            GIS.EndEdit()
        End If

        clearFields()
    End Sub
</script>

<html  xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>TatukGIS IS LITE Sample - Wisconsin Thematic Map</title>
    <link href="style.css" type="text/css" rel="stylesheet" />
</head>

<script type="text/javascript">
    function doEndEdit()
    {
        var res = GIS.Editor.CurrentShape.ExportToWkt() ;
        var obj = document.getElementById( "WKT" );
        obj.value = res;
    }
    
    function doCreatePoint()
    {
        GIS.Editor.EndEdit();
        GIS.Editor.CreateEmptyShape("gisShapeTypePoint");
    }
    
    function doCreateLine()
    {
        GIS.Editor.EndEdit();
        GIS.Editor.CreateEmptyShape("gisShapeTypeArc");
    }
    
    function doCreatePolygon()
    {
        GIS.Editor.EndEdit();
        GIS.Editor.CreateEmptyShape("gisShapeTypePolygon");
    }
    
<html>
<head>
    <title>TatukGIS IS Sample</title>
    <link href="style.css" type="text/css" rel="stylesheet" />
</head>
<body>
    <a name="top"></a>
    <h1>Simple Edit
    </h1>
    <h2 class="comment"><a href="../../samplesAPI.htm">TatukGIS Internet Server Samples</a>
    </h2>

    <form id="Form1" runat="server" action="">
      <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
        <br />
        <ttkGIS:XGIS_ViewerIS id="GIS" onclick="GIS_Click" runat="server" Width="408px" Height="300px" OnLoad="GIS_Load" BorderColor="CornflowerBlue" BorderWidth="1px" ImageType="PNG24" Flash="True"></ttkGIS:XGIS_ViewerIS>
        <br />
        <asp:Label ID="lblStatus" runat="server" Text="Status bar" Width="408px" Font-Size="XX-Small"></asp:Label> <br />
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                <asp:Button ID="btnSave" runat="server" OnClick="btnSave_Click" Text="Save" OnClientClick="doEndEdit();" />
                <asp:Button ID="btnDelete" runat="server" Text="Delete" OnClick="btnDelete_Click" />
                <asp:Button ID="btnPoint" runat="server" Text="New Point" OnClick="btnPoint_Click" OnClientClick="doCreatePoint();" />
                <asp:Button ID="btnLine" runat="server" Text="New Line" OnClick="btnLine_Click" OnClientClick="doCreateLine();" />
                <asp:Button ID="bntPolygon" runat="server" Text="New Polygon" OnClick="bntPolygon_Click" OnClientClick="doCreatePolygon();" /><br />
        <asp:HiddenField ID="WKT" runat="server" />
        <asp:Panel ID="pnlEdit" runat="server" Height="50px" Width="408px">
        </asp:Panel>
            </ContentTemplate>
        </asp:UpdatePanel>
    </form>


</body>

<script type="text/javascript">
    function doMouseMove(X,Y )
    {
        var map= GIS.ScreenToMap( X, Y );

        var dlen= GIS.Editor.CurrentShape.Length();
        var darea= GIS.Editor.CurrentShape.Area();
        var slen="";
        var sarea="";
        if(dlen>0)
        {
            if(darea>0)
            {
                slen="Perimeter: ";
            }
            else
            {
                slen="Distance: ";
            }
            if(dlen>10000)
            {
                slen+=(dlen/1000).toFixed(2)+"km";
            }
            else
            {
                slen+=(dlen).toFixed(2)+"m";
            }
        }
        if(darea>0)
        {
            sarea="Area: ";
            if(darea>100000000)
            {
                sarea+=(darea/10000000).toFixed(2)+"km2";
            }
            else {
                sarea+=(darea/10000).toFixed(2)+"ha";
            }
        }

        lblStatus.innerHTML=
            "(X: "+map.X.toFixed(0)+"  Y: "+map.Y.toFixed(0)+")  "+
            slen+"  "+sarea;
    }
        
    GIS.OnMouseMove=doMouseMove;
</script>

</html>