relations.aspx Top
<%@ Page Language="VB" Debug="True" %>
<%@ Register TagPrefix="ttkGIS" Namespace="TatukGIS.IS" Assembly="TatukGIS.IS" %>
<%@ import Namespace="System.Data" %>
<script runat="server">
Dim GisUtils As API.XGIS_Utils
Dim shpA As API.XGIS_Shape
Dim shpB As API.XGIS_Shape
Dim Table as DataTable = New DataTable()
Dim CheckTable as DataTable = New DataTable()
Sub GIS_FullExtent_Click(sender As Object, e As ImageClickEventArgs)
GIS.FullExtent
End Sub
Sub GIS_ZoomIn_Click(sender As Object, e As ImageClickEventArgs)
GIS.ZoomIn
End Sub
Sub GIS_ZoomOut_Click(sender As Object, e As ImageClickEventArgs)
GIS.ZoomOut
End Sub
Sub GIS_Smaller_Click(sender As Object, e As ImageClickEventArgs)
GIS.Width = Unit.Pixel( GIS.Width.Value - 54 )
GIS.Height = Unit.Pixel( GIS.Height.Value - 40 )
End Sub
Sub GIS_Larger_Click(sender As Object, e As ImageClickEventArgs)
GIS.Width = Unit.Pixel( GIS.Width.Value + 54 )
GIS.Height = Unit.Pixel( GIS.Height.Value + 40 )
End Sub
Sub Page_Load(sender As Object, e As EventArgs)
GisUtils = New API.XGIS_Utils
InitRelationTable()
If not Page.IsPostBack() then
CheckButton.Visible = False
ViewRelations.Visible = False
end if
GIS.ImageType = XgisImageType.PNG24
End Sub
Sub GIS_Load(sender As Object, e As EventArgs)
GIS.Open( GisUtils.GisSamplesDataDir + "topology2.shp" )
GIS.FullExtent()
End Sub
Sub GIS_Click(sender As Object, e As ImageClickEventArgs)
Dim ptg As API.XGIS_Point
Dim shp As API.XGIS_Shape
'let's locate a shape after click
ptg = GIS.API.ScreenToMap(GisUtils.Point(e.x, e.y))
shp = GIS.API.Locate(ptg, 5 / GIS.Zoom) '5 pixels precision
'remember shapes uid
If Not shp Is Nothing then
Select Case GetShape.SelectedItem.Value
Case "A"
session("shpA") = shp.Uid
ViewRelations.Visible = False
Case "B"
session("shpB") = shp.Uid
ViewRelations.Visible = False
Case Else
End select
end if
if (Not session("shpA") Is Nothing) AND (Not session("shpB") Is Nothing) then
CheckButton.Visible = True
end if
End Sub
Sub GIS_Paint(sender As Object, e As PaintEventArgs)
Dim ll As API.XGIS_LayerSHP
ll = GIS.API.Get("topology2")
ll.Params.Area.OutlineColor = RGB(180, 180, 180)
ll.Params.Area.Color = RGB(220, 220, 220)
'colour shapes A and B if necessary
if Not session("shpA") Is Nothing then
'get shapeA from uid and add some params
shpA = ll.GetShape(session("shpA"))
shpA = shpA.MakeEditable()
shpA.IsSelected() = true
shpA.Params.Area.Color = System.Convert.ToUInt32(RGB(0, 100, 250))
shpA.Params.Labels.Value = "Shape A"
shpA.Params.Labels.Color = System.Convert.ToUInt32(RGB(255, 255, 255))
shpA.Params.Labels.FontColor = System.Convert.ToUInt32(RGB(0, 0, 250))
shpA.Params.Labels.Position = API.XGIS_LabelPositions.XgisLabelPositionUpLeft
GetShape.Items(0).Text = "Shape A: SELECTED (blue when selected)"
end if
if Not session("shpB") Is Nothing then
'get shapeB from uid and add some params
shpB = ll.GetShape(session("shpB"))
shpB = shpB.MakeEditable()
shpB.IsSelected() = true
shpB.Params.Area.Color = System.Convert.ToUInt32(RGB(0, 220, 0))
shpB.Params.Labels.Value = "Shape B"
shpB.Params.Labels.Color = System.Convert.ToUInt32(RGB(255, 255, 255))
shpB.Params.Labels.FontColor = System.Convert.ToUInt32(RGB(0, 250, 0))
shpB.Params.Labels.Position = API.XGIS_LabelPositions.XgisLabelPositionDownRight
GetShape.Items(1).Text = "Shape B: SELECTED (green when selected)"
end if
GIS.Draw()
End Sub
Sub CheckButton_Click(sender As Object, e As EventArgs)
Dim ll As API.XGIS_LayerSHP
ll = GIS.API.Get("topology2")
shpA = Nothing
shpB = Nothing
if Not session("shpA") Is Nothing then
shpA = ll.GetShape(session("shpA"))
shpA = shpA.MakeEditable()
end if
if Not session("shpB") Is Nothing then
shpB = ll.GetShape(session("shpB"))
shpB = shpB.MakeEditable()
end if
'define table with check relations
CheckTable.Columns.Add("Desc", GetType(string))
dim dr as DataRow
if (Not shpA is Nothing) and (Not shpB is Nothing)
dim i as integer
for i=0 to 11
'check all defined relations
if shpA.Relate(shpB, Table.Rows(i).Item("Relation")) then
'relation exist
dr = CheckTable.NewRow()
dr(0) = Table.Rows(i).Item("Desc")
CheckTable.Rows.Add(dr)
End If
next
ViewRelations.Visible = True
ViewRelations.DataSource = CheckTable.DefaultView
DataBind()
CheckButton.Visible = False
end if
End Sub
Sub InitRelationTable() 'Prepare relations list
Table.Columns.Add("Desc", GetType(string))
Table.Columns.Add("Relation", GetType(string))
dim dr as DataRow
dr = Table.NewRow()
dr(0) = "A EQUALITY B"
dr(1) = "T*F***FF*"
Table.Rows.Add(dr)
dr = Table.NewRow()
dr(0) = "A DISJOINTS B"
dr(1) = "FF*FF****"
Table.Rows.Add(dr)
dr = Table.NewRow()
dr(0) = "A INTERSECTS B BY INTERIORS"
dr(1) = "T********"
Table.Rows.Add(dr)
dr = Table.NewRow()
dr(0) = "Interior of A INTERSECTS the boundary of B"
dr(1) = "*T*******"
Table.Rows.Add(dr)
dr = Table.NewRow()
dr(0) = "Boundary of A INTERSECTS the Interior of B"
dr(1) = "***T*****"
Table.Rows.Add(dr)
dr = Table.NewRow()
dr(0) = "Boundary of A INTERSECTS the Boundary of B"
dr(1) = "****T****"
Table.Rows.Add(dr)
dr = Table.NewRow()
dr(0) = "TOUCH - Boundary of A intersects with interior of B"
dr(1) = "F**T*****"
Table.Rows.Add(dr)
dr = Table.NewRow()
dr(0) = "TOUCH - Boundary of A intersects boundary of B"
dr(1) = "F***T***"
Table.Rows.Add(dr)
dr = Table.NewRow()
dr(0) = "A OVERLAPS B"
dr(1) = "T*T***T**"
Table.Rows.Add(dr)
dr = Table.NewRow()
dr(0) = "A CROSSES B"
dr(1) = "T*T******"
Table.Rows.Add(dr)
dr = Table.NewRow()
dr(0) = "A WITHIN B"
dr(1) = "T*F**F***"
Table.Rows.Add(dr)
dr = Table.NewRow()
dr(0) = "A CONTAINS B"
dr(1) = "T*****FF*"
Table.Rows.Add(dr)
End Sub
</script>
<html>
<head>
<title>TatukGIS IS Sample</title>
<link href="style.css" type="text/css" rel="stylesheet" />
</head>
<body>
<a name="top">
<h1>Topology Relations
</h1>
<h2 class="comment"><a href="../../samplesAPI.htm">TatukGIS Internet Server Samples</a>
</h2>
<form runat="server">
<table cellspacing="0" cellpadding="0" border="0">
<tbody>
<tr>
<td>
<asp:ImageButton id="GIS_FullExtent" onclick="GIS_FullExtent_Click" runat="server" ImageUrl="/TatukGIS_IS8/img/fullextent.gif"></asp:ImageButton>
<asp:ImageButton id="GIS_ZoomIn" onclick="GIS_ZoomIn_Click" runat="server" ImageUrl="/TatukGIS_IS8/img/zoomin.gif"></asp:ImageButton>
<asp:ImageButton id="GIS_ZoomOut" onclick="GIS_ZoomOut_Click" runat="server" ImageUrl="/TatukGIS_IS8/img/zoomout.gif"></asp:ImageButton>
</td>
<td>
</td>
<td align="right">
<asp:ImageButton id="GIS_Smaller" onclick="GIS_Smaller_Click" runat="server" ImageUrl="/TatukGIS_IS8/img/smaller.gif"></asp:ImageButton>
<asp:ImageButton id="GIS_Larger" onclick="GIS_Larger_Click" runat="server" ImageUrl="/TatukGIS_IS8/img/larger.gif"></asp:ImageButton>
</td>
</tr>
<tr>
<td colspan="3">
<p>
<ttkGIS:XGIS_VIEWERIS id="GIS" onclick="GIS_Click" runat="server" Height="280px" Width="360px" OnLoad="GIS_Load" BorderColor="CornflowerBlue" BorderWidth="1px" OnPaint="GIS_Paint"></ttkGIS:XGIS_VIEWERIS>
</p>
</td>
</tr>
<tr>
<td colspan="32">
<p>
<asp:RadioButtonList id="GetShape" runat="server">
<asp:ListItem Value="A" Selected="True" >
<font class="navy">SELECT SHAPE A</font>
</asp:ListItem>
<asp:ListItem Value="B" cssClass="navy">
<font class="green">SELECT SHAPE B</font>
</asp:ListItem>
</asp:RadioButtonList>
</p>
<p>
<asp:Button id="CheckButton" onclick="CheckButton_Click" runat="server" Font-Bold="True" Text="Check Relations"></asp:Button>
<asp:Repeater id="ViewRelations" runat="server">
<HeaderTemplate>
<asp:Label id="Label1" runat="server" cssclass="bold">Relations between shapes A and
B:</asp:Label>
<ol>
</HeaderTemplate>
<ItemTemplate>
<li class="normal">
<%# Container.DataItem("Desc") %>
</ItemTemplate>
<FooterTemplate>
</ol>
</FooterTemplate>
</asp:Repeater>
</p>
</td>
</tr>
</tbody>
</table>
</form>
</a>
</body>
</html>