Problems while Exporting Spatial Data From MapInfo to Oracle
Hi. I'm trying to make MapInfo layer available in web.
I've done 2 steps:
1. Export layer coordinates from MapInfo TAB file to Oracle Table.
2. Export labels from MapInfo TAB file to Oracle Table with right angle.
I've used OTT tool to create appropriate C++ classes for MDSYS.SDO_GEOMETRY type(sdo_geometry,sdo_point_type,...).
I've used MITAB Library(http://mitab.maptools.org/) to read coordinates and labels from TAB files.
Code for exporting coordinates looks like this:
for(
feature_id = mitab_c_next_feature_id(fh,-1);
feature_id != -1;
feature_id = mitab_c_next_feature_id(fh,feature_id)
)
{
mitab_feature mf = mitab_c_read_feature(fh,feature_id);
...
sdo_point_type* spt = new sdo_point_type(); spt->setX((Number)0);
spt->setY((Number)0);
spt->setZ((Number)NULL);
sdo_geometry* sg = new sdo_geometry();
OCCI_STD_NAMESPACE::vector< oracle::occi::Number > sdo_elem_info; sdo_elem_info.push_back((Number)1); sdo_elem_info.push_back((Number)2); sdo_elem_info.push_back((Number)1); OCCI_STD_NAMESPACE::vector< oracle::occi::Number > sdo_ordinates; int num_parts = mitab_c_get_parts(mf);
for(int i=0;i<num_parts;i++){
int coodrs_count = mitab_c_get_vertex_count(mf,i);
for(int j=0;j<coodrs_count;j++){
double x = mitab_c_get_vertex_x(mf,i,j);
double y = mitab_c_get_vertex_y(mf,i,j);
sdo_ordinates.push_back((Number)x);
sdo_ordinates.push_back((Number)y);
}
}
sg->setSdo_gtype((Number)2002);
sg->setSdo_srid((Number)MITabTools::getSRID(*tabFileName));
sg->setSdo_point(spt);
sg->setSdo_elem_info(sdo_elem_info);
sg->setSdo_ordinates(sdo_ordinates);
...
stmt->setObject(count+1,sg);
stmt->executeUpdate();
delete(sg);
}
Code for exporting labels looks like this:
for(feature_id = mitab_c_next_feature_id(fh,-1);feature_id != -1;feature_id = mitab_c_next_feature_id(fh,feature_id))
{
mitab_feature mf = mitab_c_read_feature(fh,feature_id);
double x,y,angle;
std::string stext;
double x2,y2;
x = mitab_c_get_vertex_x(mf,0,0);
y = mitab_c_get_vertex_y(mf,0,0);
//calculating second coordinates to make rigth oriented point
//2.2.2 Orienting Text Labels and Markers - MapViewer User’s Guide
angle = mitab_c_get_text_angle(mf);
stext = mitab_c_get_text(mf);
double a = tan(angle*PI/180);
double b = y-(x*a);
int const_val = 10;
int sign = ((cos(angle*PI/180)>0) ? 1:-1);
x2 = x+(sign*const_val);
y2 = (a*x2)+b;
stmt = con->createStatement(ressql);
try{
sdo_point_type* spt = NULL;
OCCI_STD_NAMESPACE::vector<oracle::occi::Number> sdo_elem_info;
sdo_elem_info.push_back((Number)1);
sdo_elem_info.push_back((Number)1);
sdo_elem_info.push_back((Number)1);
sdo_elem_info.push_back((Number)3);
sdo_elem_info.push_back((Number)1);
sdo_elem_info.push_back((Number)0);
OCCI_STD_NAMESPACE::vector<oracle::occi::Number> sdo_ordinates;
sdo_ordinates.push_back((Number)x);
sdo_ordinates.push_back((Number)y);
sdo_ordinates.push_back((Number)x2);
sdo_ordinates.push_back((Number)y2);
sdo_geometry* sg = new sdo_geometry();
sg->setSdo_gtype((Number)2001);
sg->setSdo_srid(262148);
sg->setSdo_point(spt);
sg->setSdo_elem_info(sdo_elem_info);
sg->setSdo_ordinates(sdo_ordinates);
stmt->setString(1,stext);
stmt->setObject(2,sg);
stmt->executeUpdate();
delete(sg);
...
Everything works fine: all geo features and labels are imported well.
But when it's rendered by MapViewer labels are not rotated in right angle
and there's a problems with some Layer features(http://bp1.blogger.com/_JA5sO2rLpvg/RnIhL-cagYI/AAAAAAAAAEU/tMGqC5ujGHg/s1600-h/MapInfo2OracleAfterExport.JPG), probably because of wrong coordinates, but in MapInfo everything is perfect, no bad polygons or something.
Any Ideas?