OsmAnd/DataExtractionOSM/src/rtree/RTreeClient.java
Victor Shcherb 45b8c23ee8 implement new version of vector index
git-svn-id: https://osmand.googlecode.com/svn/trunk@592 e29c36b1-1cfa-d876-8d93-3434fc2bb7b8
2010-10-27 10:36:07 +00:00

359 lines
9 KiB
Java

/*
PROGRAMME:
PROGRAMMER:
DATE:
PROJECT:
MODIFIED DATE:
*/
package rtree;
import java.io.*;
import java.net.*;
import java.util.List;
public class RTreeClient
{
private Socket socket;
public RTreeClient(String host,int port)
{
try
{
socket=new Socket(host,port);
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void insert(Element element) throws RTreeException
{
try
{
String command="insert";
Object obj[]={element};
sendRequest(command,obj);
}
catch(RTreeException e)
{
throw e;
}
}
public void delete(LeafElement element) throws RTreeException
{
try
{
String command="delete";
Object obj[]={element};
sendRequest(command,obj);
}
catch(RTreeException e)
{
throw e;
}
}
public List overlaps(Rect rect) throws RTreeException
{
try
{
String command="overlaps";
Object obj[]={rect};
Object[] response=sendRequest(command,obj);
return (List) response[0];
}
catch(RTreeException e)
{
throw e;
}
}
public List nonDisjoint(Rect rect) throws RTreeException
{
try
{
String command="nondisjoint";
Object obj[]={rect};
Object[] response=sendRequest(command,obj);
return (List) response[0];
}
catch(RTreeException e)
{
throw e;
}
}
public List containedBy(Rect rect) throws RTreeException
{
try
{
String command="containedby";
Object obj[]={rect};
Object[] response=sendRequest(command,obj);
return (List) response[0];
}
catch(RTreeException e)
{
throw e;
}
}
public List equal(Rect rect) throws RTreeException
{
try
{
String command="equal";
Object obj[]={rect};
Object[] response=sendRequest(command,obj);
return (List) response[0];
}
catch(RTreeException e)
{
throw e;
}
}
public List meet(Rect rect) throws RTreeException
{
try
{
String command="meet";
Object obj[]={rect};
Object[] response=sendRequest(command,obj);
return (List) response[0];
}
catch(RTreeException e)
{
throw e;
}
}
public List contains(Rect rect) throws RTreeException
{
try
{
String command="contains";
Object obj[]={rect};
Object[] response=sendRequest(command,obj);
return (List) response[0];
}
catch(RTreeException e)
{
throw e;
}
}
public List getAllElements() throws RTreeException
{
try
{
String command="getallelements";
Object[] response=sendRequest(command,null);
//List v=(List)response[0];
return (List) response[0];
}
catch(RTreeException e)
{
throw e;
}
}
public Rect getTreeMBR() throws RTreeException
{
try
{
String command="gettreembr";
Object[] response=sendRequest(command,null);
return (Rect) response[0];
}
catch(RTreeException e)
{
throw e;
}
}
public ABL[] nearestSearch(Point pt,long ln,int in) throws RTreeException
{
try
{
String command="nearest";
Object obj[]={pt,new Long(ln),new Integer(in)};
Object[] response=sendRequest(command,obj);
if(response!=null)
{
ABL abl[]=new ABL[response.length];
for(int i=0;i<response.length;i++)
{
abl[i]=(ABL)response[i];
}
return abl;
}
else
return null;
}
catch(RTreeException e)
{
throw e;
}
}
public List nearestSearch(Point pt,long ln) throws RTreeException
{
try
{
String command="nearestsearch";
Object obj[]={pt,new Long(ln)};
Object[] response=sendRequest(command,obj);
return (List) response[0];
}
catch(RTreeException e)
{
throw e;
}
}
private Object[] sendRequest(String command,Object[] param) throws RTreeException
{
try
{
ByteArrayOutputStream bout=new ByteArrayOutputStream ();
ObjectOutputStream out=new ObjectOutputStream (bout);
// ObjectOutputStream out=new ObjectOutputStream(socket.getOutputStream());
OutputStream fout=socket.getOutputStream ();
out.writeObject(command);
if(param!=null)
{
out.writeObject(new Integer (param.length));
for(int i=0;i<param.length;i++)
{
out.writeObject(param[i]);
}
}
else
{
out.writeObject(new Integer(0));
}
// out.flush();
out.close();
//long time = System.currentTimeMillis();
fout.write(bout.toByteArray());
fout.flush();
// InputStream in=socket.getInputStream();
/*
while(in.available()==0)
{
Thread.sleep(10);
}
int rTotal=in.available();
System.out.println("RTotal..........."+rTotal);
byte[] bb=new byte[in.available()];
in.read(bb,0,in.available());
byte ln[]=new byte[10];
System.arraycopy(bb,0,ln,0,10);
ByteArrayInputStream lin=new ByteArrayInputStream(ln);
ObjectInputStream loin=new ObjectInputStream(lin);
int total=loin.readInt();
byte bbf[]=new byte[rTotal];
System.out.println(total+"..."+bbf.length);
System.arraycopy(bb,10,bbf,0,rTotal-10);
int pos=bbf.length;
System.out.println("Postion................."+pos);
while(rTotal<total)
{
int avail=in.available();
while(avail==0)
{
avail=in.available();
}
byte temp[]=new byte[avail];
in.read(temp,0,avail);
byte temp1[]=new byte[avail+bbf.length];
System.arraycopy(bbf,0,temp1,0,bbf.length);
System.arraycopy(temp,0,temp1,bbf.length,temp.length);
bbf=temp1;
rTotal+=avail;
System.out.println(bbf.length+"______________________");
System.arraycopy(temp,0,bbf,pos,temp.length);
pos+=avail;
Thread.sleep(10);
}
*/
InputStream in=socket.getInputStream();
//System.out.println("RTreeClient.sendRequest : time to receive response "
//+ (System.currentTimeMillis() - time));
//time = System.currentTimeMillis();
byte bbf[]=new byte[100];
int i=0;
int total=-1;
while(true)
{
int val=in.read(bbf,i,1);
if(val==-1)
break;
i++;
if(i==10)
{
byte ln[]=new byte[10];
System.arraycopy(bbf,0,ln,0,10);
ByteArrayInputStream lin=new ByteArrayInputStream(ln);
ObjectInputStream loin=new ObjectInputStream(lin);
total=loin.readInt();
byte temp[]=new byte[total];
System.arraycopy(bbf,0,temp,0,bbf.length);
bbf=temp;
}
if(i>=total && total!=-1)
{
//System.out.println("read completed..."+bbf.length);
break;
}
}
byte tby[]=new byte[bbf.length-10];
System.arraycopy(bbf,10,tby,0,tby.length);
ByteArrayInputStream bin=new ByteArrayInputStream(tby);
ObjectInputStream oIn=new ObjectInputStream(bin);
Boolean bool=(Boolean) oIn.readObject();
//System.out.println("boolean.........."+bool);
Integer count=(Integer) oIn.readObject();
//System.out.println("count.........."+count);
if(bool.booleanValue())
{
Object[] obj=new Object[count.intValue()];
for(int j=0;j<count.intValue();j++)
{
obj[j]=oIn.readObject();
}
// oIn.close();
//System.out.println("RTreeClient.sendRequest : time to process input data "
// + (System.currentTimeMillis() - time));
return obj;
}
else
{
throw (Exception) oIn.readObject();
}
}
catch(Exception e)
{
e.printStackTrace();
throw new RTreeException(e.getMessage());
}
}
/**
public static void main(String args[])
{
try
{
RTreeClient cln=new RTreeClient("localhost",7001);
System.out.println("Connection established1...");
Rect rect=cln.getTreeMBR();
System.out.println("........."+rect);
List v=cln.getAllElements();//contains(new Rect(0,0,1000,1000));
System.out.println(v.size());
System.out.println(v.get(0));
}
catch(Exception e)
{
e.printStackTrace();
}
} */
}