Arquivos de sites

MongoDB – Erro: Can’t extract geo keys

E ai galera, estou me aventurando no mundo NoSQL com o sr. MongoDB

E ao criar meu primeiro índice para fazer pesquisas por proximidade, tomei meu primeiro erro, e tive que ir atrás para resolve-lo 😦

Oque aconteceu, peguei latitudes e longitudades pelo google maps, lá pros lados da austrália…
type: "Point", coordinates: [ -33.91991, 151.257018 ]
adicionei ao meu documento e tentei gerar o índice e tomei o erro abaixo:

db.xxx.createIndex({ xxx : "2dsphere"})

“ok” : 0,
“errmsg” : “Can’t extract geo keys… longitude/latitude is out of bounds, lng: … lat: …”,
“code” : 16755,
“codeName” : “Location16755”

Dando uma pesquisada, descobri é que o google maps disponibiliza os valores na ordem diferente (latitude/longitude) da qual o MongoDB espera (longitude/latitude)… para resolver o problema apenas precisei inverter os valores inseridos e o índice foi criado sem problemas 😀

Os valores da Longitude deve estar entre -180° e +180° e a Latitude entre -90° e 90°!!! (Y)

Espero que tenha ajudado!

Fonte: go-oleg / Paul T. Rawkeen – Stackoverflow.com

Anúncios

jQuery – Primeiros passos; Hello, world!

Para usar jQuery, você precisa incluí-lo nas páginas onde deseja tirar proveito dele. Você pode fazer isso baixando o jQuery do site dele em www.jquery.com. Lá tem geralmente a escolha entre uma versão de “Produção” (Production) e uma versão de “Desenvolvimento” (Development).

A versão de “Produção” é para o seu site real na web, por que ela foi reduzida e comprimida para ocupar o mínimo de espaço, o que é importante para os seus visitantes, do qual o navegador terá que baixar o arquivo do jQuery juntamente com o resto do seu website. Para teste e desenvolvimento, a versão “Desenvolvimento” é melhor. Ela não foi reduzida ou comprimida, então quando você encontrar um erro, você pode na verdade ver onde no jQuery isso aconteceu.

Uma vez que o arquivo JavaScript do jQuery foi baixado, você terá que referenciá-lo em suas páginas, usando a tag HTML <script>. O jeito mais fácil é colocar o arquivo do jQuery baixado no mesmo diretório da página onde deseja usá-lo e então referenciá-lo assim, na sessão <head> do seu documento:

<script type="text/javascript" src="jquery-1.5.1.js"></script>

Uma parte da sua página deve agora se parecer com isso:

<head>
<title>jQuery test</title>
<script type="text/javascript" src="jquery-1.5.1.js"></script>
</head>

Uma abordagem mais moderna, ao invés de você mesmo baixar e hospedar o jQuery, é incluí-lo de um CDN – Content Delivery Network (Rede de Fornecimento de Conteúdo). Tanto a Google quanto a Microsoft hospedam várias versões de jQuery e outros frameworks JavaScript. Isso lhe salva de ter que baixar e armazenar o framework jQuery, mas isso tem uma vantagem muito maior: Porque o arquivo vem de uma URL popular que outros websites podem utilizar também, há possibilidades de que quando as pessoas cheguem ao seu website e o navegador delas solicitar o framework jQuery, isso pode já estar no cachê, porque outro website está usando exatamente a mesma versão e arquivo. Além disso, a maioria dos CDN’s terão certeza de que uma vez que o usuário solicitou um arquivo dele, isso será fornecido por um servidor mais perto dele, então seus usuários Europeus não terão que transportar o arquivo por todo o caminho a partir dos Estados Unidos e assim por diante.

Você pode usar o jQuery de um CDN do mesmo jeito como você faria com a versão baixada, apenas a URL que muda. Por exemplo, para incluir o jQuery 1.5.1 a partir do Google, você deveria escrever o seguinte:

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>

Eu sugiro que você use essa abordagem, a não ser que você tenha uma razão específica para você mesmo hospedar o jQuery. Aqui vai um link de informação do CDN do jQuery a partir do Google:

http://code.google.com/intl/da/apis/libraries/devguide.html#jquery

Ou se você preferir usar a partir da Microsoft:

http://www.asp.net/ajaxlibrary/cdn.ashx#jQuery_Releases_on_the_CDN_0

Vamos ao Hello, world!

Todo tutorial de programação decente começará com um exemplo “Hello, world!” e este tutorial é também um desses. No capítulo anterior, nó aprendemos como incluir o jQuery na nossa página, de modo que nós podemos começar a usar todos esses grandes recursos. Você precisa conhecer um pouco mais sobre como jQuery trabalha, antes de você começar a escrever seu próprio código, mas apenas para ter certeza que tudo está funcionando, e para você ver como é simples o jQuery, vamos começar com um pequeno exemplo:

<div id="divTest1"></div>
<script type="text/javascript">
$("#divTest1").text("Hello, world!");
</script>

Ok, então temos uma tag div com o id “divTest1”. No código JavaScript nós usamos o atalho $ para acessar o jQuery, então nós selecionamos todos os elementos com um id “divTest1” (há apenas um porém) e setamos seu texto para “Hello, world!”. Você pode não saber o suficiente sobre jQuery para entender porque e como isso funciona, mas como você progredirá através deste tutorial, todos esses elementos serão explicados em detalhes.

Mesmo uma tarefa tão simples como essa deve na verdade necessitar de um bom número extra de keystrokes se você tivesse que fazer isso em JavaScript puro, sem ajuda do jQuery:

<div id="divTest2"></div>
<script type="text/javascript">
document.getElementById("divTest2").innerHTML = "Hello, world!";
</script>

E isso seria ainda maior se nosso elemento HTML não tivesse um ID, por exemplo, apenas uma classe.

Normalmente, entretanto, você espera pelo documento entrar no estado READY (Pronto) antes de você começar manipular seu conteúdo. Os exemplos acima funcionarão na maioria dos navegadores e provavelmente até mesmo funcionará quando você fizer mais coisas avançadas, mas determinadas tarefas podem falhar se você tentar fazê-las antes do documento estar carregado (loaded) e pronto (ready). Felizmente, o jQuery faz isso muito fácil também.

Fonte: jquery-tutorial.net / jquery-tutorial.net

Tutorial Google Maps Android API v2

Antes de começar a trabalhar com a API, você vai precisar baixar a API  e obter a chave. Tanto a API quanto a chave estão disponíveis gratuitamente.

Configurando o ambiente

O Google Maps API Android V2 é distribuído como parte do Google Play services SDK . Siga os passos abaixo para instalar o Google Play Services SDK para o desenvolvimento com o Eclipse:

1. Selecione no menu do ecplise Window > Android SDK Manager

2. Vá até a parte inferior da lista de pacotes, selecione Extras> Google Play Services, e instale-o;

3. Copie o <android-sdk-folder>/extras/google/google_play_services/libproject/google-play-services_lib  library project para a pasta onde você criou seu projeto android;

4. Usando o Eclipse, importe o projeto de biblioteca em sua workspace. Clique em File> Import, selecione Android > Existing Android Code into Workspace  e vá para a cópia do projeto de biblioteca Google Play Service para importá-lo;

5. Vá em Properties do seu projeto (Clique com o botão direito no seu projeto) e selecione o menu “Android“;

6. Clique no botão [Add…] e na caixa de diálogo “Project Selection” selecione o projeto google-play-services-lib que foi importado anteriormente;

Tutorial Google Maps para Android

Nota: O Google Play Services não é compatível com o emulador Android

 

Obtendo a chave Map Api Key

O Google Maps API v2 Android usa um novo sistema de gerenciamento de chaves. Chaves existentes de um aplicativo Android Google Maps v1 não vão funcionar com a API v2.

Obter uma chave para a sua aplicação requer várias etapas. Estes passos são descritos aqui, e descritos em detalhe nas seções seguintes.

1. Recuperar informações sobre o certificado de sua aplicação (SHA-1 fingerprint).

A chave do Google Maps API é baseada em um pequeno formulário de certificado digital do seu aplicativo, conhecido como SHA-1 fingerprint. A fingerprint é uma seqüência de texto único, gerado a partir do algoritmo comumente usado SHA-1 hashing. Porque a fingerprint é única, o Google Maps pode usa-lo como uma forma de identificar a sua aplicação.

Você pode gerar a chave a partir de dois tipos de certificados:

Debug certificate: 

O certificado é apenas para uso de um aplicativo que você está testando, você não pode publicar um aplicativo que está assinado com um certificado de depuração. O certificado de depuração é descrito com mais detalhes na seção Signing in Debug Mode da Documentação de desenvolvedor Android. Você pode gerar uma chave de API a partir deste certificado, mas apenas usar a chave para o teste, nunca para a produção.

Exibindo o fingerprint para chave de debug:
1.1 Localize o arquivo de debug keystore. O nome do arquivo é debug.keystore, e é criado a primeira vez que você cria seu projeto. Por padrão, ele é armazenado no mesmo diretório do seu dispositivo AVD:
Usando o Eclipse selcione Windows > Prefs > Android > Build  para verificar o caminho completo (Default debug keystore);
1.2 Usando o Terminal do windows (cmd) navegue até a pasta bin do jdk da sua máquina para ter acesso aos comandos Keytool
1.3 Execute a seguinte linha de comando subistituindo o caminho do arquivo debug.keystore pelo seu visualizado anteriormente:
keytool -list -v -keystore "C:\Users\your_user_name\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android
Caso você tenha ma exceção de formato no keystore, você deve alterar as configurações regionais do seu Windows colocando Formato e Local para Estados Unidos

1.4 Você deverá ver uma saída semelhante a esta e dentre as informações você já pode ver seu SHA-1 fingerprint

 Alias name: androiddebugkey  Creation date: Jan 01, 2013  Entry type: PrivateKeyEntry  Certificate chain length: 1  Certificate[1]:  Owner: CN=Android Debug, O=Android, C=US  Issuer: CN=Android Debug, O=Android, C=US  Serial number: 4aa9b300  Valid from: Mon Jan 01 08:04:04 UTC 2013 until: Mon Jan 01 18:04:04 PST 2033  Certificate fingerprints:       MD5:  AE:9F:95:D0:A6:86:89:BC:A8:70:BA:34:FF:6A:AC:F9       SHA1: BB:0D:AC:74:D3:21:E1:43:07:71:9B:62:90:AF:A1:66:6E:44:5D:75       Signature algorithm name: SHA1withRSA       Version: 3

Release certificate:

  •  Este certificado pode ser usado com o aplicativo que você queira publicar em produção.

Depois de decidir qual o certificado correto para suas necessidades, você pode obter a chave seguindo este outro tutorial…
2. Registrar um projeto no Google APIs Console e adicionar a API do Google Maps como um serviço para o projeto.

2.1 Acesse Google APIs Console

2.3 Se você não usou o Google APIs Console antes, você será solicitado a criar um projeto que você usará para controlar o uso do Google Maps API Android. Clique em Create Project e crie um novo projeto chamado Projeto API. Na próxima página, este nome aparece no canto superior esquerdo. Para renomear ou gerenciar o projeto, clique em seu nome.
Se você já está usando o Google APIs Console, você vai ver imediatamente uma lista de seus projetos existentes e os serviços disponíveis. Ainda é uma boa ideia usar um novo projeto para o Google Maps API Android, portanto, selecione o nome do projeto no canto superior esquerdo e, em seguida, clique em Create.

3. Uma vez que você tem um projeto definido, você pode solicitar uma ou mais chaves.

3.1Você deverá ver uma lista de APIs e serviços na janela principal. Se você não estiver vendo isso, selecione Services da barra de navegação à esquerda.

3.2 Na lista de serviços exibidos no centro da página, role para baixo até ver o Google Maps API v2 Android. Clique no indicador de “interruptor”, de modo que ele está ligado.

3.3 Aceite os termos de Serviços e estará pronto para ter uma Maps API Key.

3.4 Na barra de navegação à esquerda, clique em API Access.

3.5 Clique no botão [Create New Android Key…]

3.6 Na caixa de diálogo, digite o  SHA-1 fingerprint, em seguida, um ponto e vírgula, em seguida, o nome do pacote do aplicativo. Por exemplo:

BB:0D:AC:74:D3:21:E1:43:67:71:9B:62:91:AF:A1:66:6E:44:5D:75;com.frameworksystem.android.mapexample

O Google APIs Console responde exibindo-chave para aplicativos Android (com certificados), seguido por uma chave, por exemplo:

AIzaSyBdVl-cTICSwYKrZ95SuvNw7dbMuDt1KG0

4. Finalmente, você pode adicionar a sua chave para a sua aplicação e iniciar o desenvolvimento.

 

Adicionando a API Key em sua aplicação

O passo final é adicionar a chave da API para a sua aplicação.

1. Em AndroidManifest.xml, adicione o seguinte elemento como um filho do elemento <application>, inserindo-lo antes da tag de fechamento </ application>:

<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="your_api_key"/>

2. substitua “your_api_key” Pela sua chave API Key obtida anteriormente.

3. Adicione os seguintes elementos para o seu AndroidManifest.xml. Substitua com.frameworksystem.android.mapexample com o nome do pacote da sua aplicação.

<permission
        android:name="com.example.mapdemo.permission.MAPS_RECEIVE"
        android:protectionLevel="signature"/>
<uses-permission android:name="com.frameworksystem.android.mapexample.permission.MAPS_RECEIVE"/>

4. Especifique as seguintes permissões no AndroidManifest.xml substituindo com.frameworksystem.android.mapexample pelo pacote da sua aplicação:

 

<uses-permission android:name=”android.permission.INTERNET” />
<uses-permission android:name=”android.permission.ACCESS_COARSE_LOCATION” />
<uses-permission android:name=”android.permission.ACCESS_FINE_LOCATION” />
<uses-permission android:name=”android.permission.ACCESS_NETWORK_STATE” />
<uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE”/>
<uses-permission android:name=”com.google.android.providers.gsf.permission.READ_GSERVICES”/>

<permission
android:name=”br.com.cadastroindustrial.permission.MAPS_RECEIVE”
android:protectionLevel=”signature”/>
<uses-permission android:name=”com.frameworksystem.android.mapexample.permission.MAPS_RECEIVE”/>

<uses-feature
android:glEsVersion=”0x00020000″
android:required=”true”/>

Desenvolvendo um Mapa

 

1.  Implement a seguinte Activity:

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;

public class MainActivity extends Activity {
  private LatLng frameworkSystemLocation = new LatLng(-19.92550, -43.64058);
  private GoogleMap map;

  @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
        .getMap();
    Marker frameworkSystem = map.addMarker(new MarkerOptions()
                                               .position(frameworkSystemLocation)
                                               .title("Framework System"));
 // Move a câmera para Framework System com zoom 15.
    map.moveCamera(CameraUpdateFactory.newLatLngZoom(frameworkSystemLocation , 15));
    map.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null);
  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
  }

}

 

2. Implemente o seguinte layout para a Activity

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <fragment
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />

</RelativeLayout>

 

Observações !!!!! :

Pessoal, as estruturas de Fragment do android foram criadas na versão 3.0.
Para aplicações feitas com versões anteriores do android existe a biblioteca android-support-v4.jar que oferece suporte a estrutura de Fragment e outras novas implementações para as versões anteriores do android.

Para adicionar a biblioteca de suporte em sua aplicação, usando o eclipse vá em Properties do seu projeto (Clique com o botão direito no seu projeto) e selecione Android Tools > Add Support Library… marque Accept All e clique no botão [ Install ]

Feito isso sua Activity agora deve estender de FragmentActivity e para instanciar o objeto map (private GoogleMap map) deverá ser feito as seguintes alterações:

map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();

———————————————————————————————————-

fonte: Framework System – Geraldo Marcelo