Skip to Main Content

Database Software

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Problems while Exporting Spatial Data From MapInfo to Oracle

537992Jun 15 2007
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?
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Jul 13 2007
Added on Jun 15 2007
0 comments
624 views