ThinkGeo.com    |     Documentation    |     Premium Support

Getting world coordinate back from RectangleShape or map image

Hi,


I'm wondering how to get the world coordinate back from ether RectangleShape or Map image


I use this to initialize the shape:



gRecShp =



new RectangleShape(double worldUpperLeftX, double worldUpperLeftY, double worldLowerRightX, double worldLowerRightY);

is there anyway to retrieve the worldUpperLeftX, worldUpperLeftY, worldLowerRightX, worldLowerRightY value from the gRecShp or from map image or mapengine?


 


Thanks


 


Paul




Paul,



I'm not sure I understand your questions. I guess you want to get four properties from rectangle shape.

double worldUpperLeftX = gRecShp.UpperLeftPoint.X;
double worldUpperLeftY = gRecShp.UpperLeftPoint.Y;
double worldLowerRightX = gRecShp.LowerRightPoint.X;
double worldLowerRightY = gRecShp.LowerRightPoint.Y;

Please let me know if there is any misunderstanding.



Thanks,

Howard



I tried looking at that before:


gRecShp = new RectangleShape(worldUpperLeftX, worldUpperLeftY, worldLowerRightX, worldLowerRightY);

proj4Projection.Open(); 

gRecShp = proj4Projection.ConvertToExternalProjection(gRecShp); 

double NewworldUpperLeftX = gRecShp.UpperLeftPoint.X;

double NewworldUpperLeftY = gRecShp.UpperLeftPoint.Y;

double NewworldLowerRightX = gRecShp.LowerRightPoint.X;

double NewworldLowerRightY = gRecShp.LowerRightPoint.Y;


------------------------------------ :


Pass in:


worldUpperLeftX = -81.42617


worldUpperLeftY = 43.06596


worldLowerRightX = -81.07266


worldLowerRightY = 42.89287


Result:


NewworldUpperLeftX = -9064319.78164653


NewworldUpperLeftY = -5322017.026602678


NewworldLowerRightX  = -9024967.2284562


NewworldLowerRightY  = 5295679.7583188415


I want to get bacy the set value.


the main reason for looking at this is that the map I'm getting is getting shifted a little bit when moving vertically. (horizontally is okay).



 


Hi Paul,
So you mean to convert the projected RectangleShape back to the original RectangleShape? We have another method called ConvertToInternalProjection to do this thing:


RectangleShape originalRectangleShape = proj4Projection.ConvertToInternalProjection(gRecShp);


 
But you will find that the result may be not exactly same as the original one. In fact, you can not get the original RectangleShape once you have projected it by some specific projection. The logic of ConvertToExternalProjection and ConvertToInternalProjection is like this: projected every point of the RectangleShape, and then we get four projected points which may be not able to construct a RectangleShape directly, so we will return the bounding box of these four points. 
Any more questions please let me know.
Thanks,
Sun

question on this project... current in our ThinkGeo application we're using project:


proj4Projection.ExternalProjectionParametersString = Proj4Projection.GetGoogleMapParametersString();

proj4Projection.InternalProjectionParametersString = Proj4Projection.GetEpsgParametersString(4326);


is this Google map project the same as map projection EQUIDISTANT?


if not what is a project that we can use like EQUIDISTANT?


 


Thanks


 


Paul



correction:


is this Google map projection the same as map projection EQUIDISTANT?


if not what is a projection that we can use like EQUIDISTANT?


 


the reason for this, is that the map that our application get back, seems to be shifting (streets are not alligned) when moving north or south. (moving East or West seems to be okay)


Would projection affect that? if not, what would might cause this?


 


Paul



Paul, 
  
 Projection sure affects your issue. Different projection works in different map units. One projection only affects one specific extent; it’s not accurate outside the specific area. 
  
 If possible, please provide us your projection parameter and you application code. 
  
 Thanks, 
 Howard

this is the mapsuite code:


if (proj4Projection == null)

{

    proj4Projection = new Proj4Projection();

}


proj4Projection.ExternalProjectionParametersString = Proj4Projection.GetGoogleMapParametersString();

proj4Projection.InternalProjectionParametersString = Proj4Projection.GetEpsgParametersString(4326);


gRecShp = new RectangleShape(worldUpperLeftX, worldUpperLeftY, worldLowerRightX, worldLowerRightY);


proj4Projection.Open();


gRecShp = proj4Projection.ConvertToExternalProjection(gRecShp);


gimgWidth = imageWidth;

gimgHeight = imageHeight;


 


on our application we just use the returned image without any conversion.  in the past, we have used EQUIDISTANT project with other map solution without an issue.  So I thought it would be the google map projection.


 


Paul



get image request with these values:


worldUpperLeftX  -122.68154 double

worldUpperLeftY  49.23188 double

worldLowerRightX -122.63204 double

worldLowerRightY 49.20873 double

imageWidth  1141  int

imageHeight  801  int




//create bitmap

bitmap = new Bitmap(imageWidth, imageHeight, PixelFormat.Format24bppRgb);


//draw map into bitmap

mapEngine.CurrentExtent = ExtentHelper.GetDrawingExtent(gRecShp, gimgWidth, gimgHeight);

mapEngine.DrawStaticLayers(bitmap, GeographyUnit.Meter);


in the attached example image (map_sample.tiff):

the red points are the passin value


the blue points are the value converted back from projection using:

RectangleShape TempShape = proj4Projection.ConvertToInternalProjection(gRecShp);


the points seems to be alligned...


but the question is the left and right points, how come they are not in the corner of the image, but shifted little bit inward?


Thanks


Paul



1405-map_sample.zip (178 KB)

Paul, 
  
 We are not the expert of the "EQUIDISTANT projection"; so we need to do some research on this; we will let you know when we have an update. 
  
 Thanks, 
 Howard