Hoje eu vou escrever sobre um novo recurso do Entity Framework, disponível a partir da versão 5, (já estamos na versão 6.0) conhecido como Spatial Data ou Dados geográficos.
A versão 5 do Entity Framework, a partir de agora citada apenas como EF5, além de um novo modelo de mapeamento Code First (Sem Designer nem XML), nova APi DBContext e melhorias no desempenho trouxe o recurso Spatial Data - Dados geográficos agora podem ser expostos em seu modelo usando o DbGeography e os tipos DbGeometry. Com isso podemos ter um campo do tipo DbGeography e através do namespace System.Data.Spatial manipular dados geográficos informando as coordenadas latitude e longitude.
Neste artigo vamos criar uma aplicação ASP .NET Web Forms para salvar a posição geográfica atual do usuário (latitute, longitude) no SQL Server, na coluna com tipo de dados Geography, usando o Entity Framework.
Se você marcar sua posição em um mapa mundi, ela será um simples ponto no mapa. Este ponto é composto por dois componentes : latitude e longitude que informam ao software GPS onde você está.
A partir desta informação outras informações podem ser obtidas como os locais mais próximos, tráfego terrestre, etc.
Recursos usados:
|
Criando a tabela no SQL Server 2012
Vamos criar um banco de dados Cadastro.mdf e a tabela Localizacao com a seguinte estrutura:
Nota: Você pode criar o banco de dados e as tabelas usando o IDE do Visual Studio na janela DataBase Explorer ou Server Explorer.
Criando o projeto no Visual Studio 2012 For Web
Abra o VS 2012 Express for Web e clique em New Project;
A seguir selecione a linguagem C# ou VB .NET e o template ASP .NET Empty Web Application; (este exemplo usa a linguagem C#)
Informe o nome ASP_PosicaoGeografica_EF e clique no botão OK;
Vamos agora criar um Entity Data Model em nosso projeto com base no banco de dados descrito no início do artigo.
No menu PROJECT clique em Add New Item;
A seguir e selecione o template Data -> ADO .NET Entity Data Model e informe o nome Cadastro.emdx e clique no botão Add;
Selecione o item Generate from database e clique no botão Next>;
Selecione a conexão com o banco de dados Cadastro.mdf e clique no botão Next>;
Selecione a tabela Localizacao. Marque as opções conforme mostra a figura abaixo e clique no botão Finish;
Será gerado o nosso Entity Data Model com o seguinte modelo de entidades mapeadas para as tabelas do banco de dados:
Agora no menu PROJECT clique em Add New Item;
A seguir e selecione o template Web Form e informe o nome Default.aspx e clique no botão Add;
Inclua uma tabela na página contendo 8 linhas e duas colunas.
A partir da ToolBox inclua no formulário os controles TextBox, Combobox , HiddenField e button conforme o leiaute da figura abaixo:
O código gerado no formulário pode ser visto a seguir:
<form id="form1" runat="server">
<table class="auto-style1">
<tr>
<td class="auto-style2" colspan="2"><strong>Macoratti .net</strong></td>
</tr>
<tr> <td colspan="2" style="background-color: #3399FF"> </td> </tr>
<tr>
<td>Nome do Local</td>
<td>
<asp:TextBox ID="txtNome" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td>Endereço</td>
<td>
<asp:TextBox ID="txtEndereco" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td>Cidade</td>
<td>
<asp:TextBox ID="txtCidade" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td>Estado</td>
<td>
<asp:TextBox ID="txtEstado" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td>País</td>
<td>
<asp:DropDownList ID="ddlPais" runat="server">
<asp:ListItem Value="1">Brasil</asp:ListItem>
<asp:ListItem Value="2">Argentina</asp:ListItem>
<asp:ListItem Value="3">Chile</asp:ListItem>
</asp:DropDownList>
</td>
</tr>
<tr>
<td> </td>
<td>
<asp:HiddenField ID="hdnLocalizacao" runat="server" />
</td>
</tr>
<tr>
<td> </td>
<td>
<asp:Button ID="btnSubmeter" runat="server" Text="Salvar" OnClick="btnSubmit_Click" Width="168px" Height="32px" />
</td>
</tr>
<tr>
<td colspan="2">
<asp:Label ID="lblmsg" runat="server" Font-Bold="True" Font-Names="Arial" ForeColor="#CC0000" Text="Label"></asp:Label>
</td>
</tr>
</table>
<div class="form">
</div>
</form>
|
Na tag <head> da página inclua a linha de código a seguir para usar biblioteca jQuery:
<script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.9.0.js"></script>
A seguir, ainda entre as tags <head> defina o script abaixo que irá obter a latitude e longitude exibindo-as na página:
<script type="text/javascript">
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition, showError);
}
else { $("#message").html("A Geolocalização não é suportada neste navegador."); }
function showPosition(position) { var latlondata = position.coords.latitude + "," + position.coords.longitude; var latlon = "Latitude : " + position.coords.latitude + " <br/> " + "Longitude : " + position.coords.longitude; $("#message").html(latlon); $("[id*=hdnLocalizacao]").val(position.coords.longitude + " " + position.coords.latitude); } function showError(error) { if (error.code == 1) { $("#message").html("Usuário negou a requisição para geolocalziação."); } else if (error.code == 2) { $("#message").html("Localização informada esta indisponível."); } else if (error.code == 3) { $("#message").html("A requisição para obter a localização do usuário expirou."); } else { $("#message").html("Erro desconhecido."); } } </script> |
No code-behind da página Default.aspx.cs inclua o código baixo que irá persistir as informações no Entity Framework:
using System;
using System.Data.Spatial;
namespace ASP_PosicaoGeografica_EF
{
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
using (var context = new CadastroEntities())
{
try
{
context.Localizacoes.Add(new Localizacao()
{
Nome = txtNome.Text,
Endereco = txtEndereco.Text,
Cidade = txtCidade.Text,
Estado = txtEstado.Text,
PaisId = Convert.ToInt32(ddlPais.SelectedValue),
Geolocalizacao = DbGeography.FromText("POINT( " + hdnLocalizacao.Value + ")")
});
context.SaveChanges();
lblmsg.Text = "Localização salva com sucesso " + hdnLocalizacao.Value.ToString();
}
catch (Exception ex)
{
lblmsg.Text = ex.Message;
}
}
}
}
}
|
Executando projeto vemos a seguir uma figura com um exemplo de um resultado obtido para um determinada localização:
Espiando o banco de dados e a tabela Localizacao vemos as informações persistidas conforme abaixo:
Este é um recurso interessante e fácil de implementar que pode lhe ajudar muito em determinados cenários.
Pegue o projeto completo aqui: ASP_PosicaoGeografica_EF.zip
Rom 7:4 Assim também vós, meus irmãos, fostes mortos quanto à lei mediante o corpo de Cristo, para pertencerdes a outro, àquele que ressurgiu dentre os mortos a fim de que demos fruto para Deus.
Rom 7:5 Pois, quando estávamos na carne, as paixões dos pecados, suscitadas pela lei, operavam em nossos membros para darem fruto para a morte.
Rom 7:6 Mas agora fomos libertos da lei, havendo morrido para aquilo em que estávamos retidos, para servirmos em novidade de espírito, e não na velhice da letra.
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
|
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#