ThinkGeo.com    |     Documentation    |     Premium Support

Splitting features around map-wrap

Hi all,


I'm working with a layer that wraps around my map.  Instead of the polygons that cross the edge of the map wrapping 'behind it', they wrap in front of it, making lines streak across the map.  To resolve this, I attempted to create a rectangleshape that covers the 'west' half of the layer, and then display the difference and intercept of each feature and the shape as two objects, eliminating the lines that cross the wrap.  Unfortunatley, this didnt' work quite as planned, as I keep recieveing an error stating: {"no outgoing dirEdge found [ (-180, 90, NaN) ]"}.  I have no idea how to correct this, or if there's any easier way to do what I'm trying to do.  Has anyone experienced this before?  Thanks for the help!


-Dustin



Also, if it helps, my code is as follows: 



layer.Open(); 
layer.EditTools.BeginTransaction(); 
layer.EditTools.GetDifference(feature.Id, square); 
layer.EditTools.CommitTransaction();
layer.Close();


Dustin, 


It seems you encountered some problem when calculating the difference. Can you try the following code to see whether the problem still happened, if so, can you pasted out the wkt1 and wkt2 string.

RectangleShape baseShape = new RectangleShape(0, 180, 180, 0);
BaseShape baseShape2 = features.GetShape();
string wkt1 = baseShape.GetWellKnownText();
string wkt2 = baseShape2.GetWellKnownText();
MultipolygonShape m1 = baseShape.GetDifference((AreaBaseShape)baseShape2);

Any more questions just let me know.


 
Thanks.
 
Yale

Thanks for the help, Yale, but even with your code I’m still getting errors on the map.  This time, I’m receiving two.   
 1) found null Directed Edge 
 2) Directed Edge visited twice during ring building at (0, 15.1500833796554, NaN) 
  
 And as for the strings you requested above: 
  
 wkt1:“MULTIPOLYGON(((-179 -22,-179.31 -21.6,-179.61 -21.2,-179.92 -20.81,179.78 -20.41,179.48 -20.01,179.18 -19.61,178.88 -19.21,178.59 -18.8,178.29 -18.4,178 -18,177.5 -18.01,177 -18.01,176.5 -18.01,176 -18.02,175.5 -18.02,175 -18.02,174.5 -18.01,174 -18.01,173.5 -18.01,173 -18,172.8 -18.4,172.61 -18.8,172.41 -19.2,172.21 -19.6,172.01 -20,171.81 -20.4,171.61 -20.8,171.41 -21.2,171.2 -21.6,171 -22,171.29 -22.4,171.59 -22.8,171.88 -23.21,172.18 -23.61,172.48 -24.01,172.78 -24.41,173.08 -24.81,173.38 -25.2,173.69 -25.6,174 -26,174.6 -26.01,175.2 -26.02,175.8 -26.03,176.4 -26.03,177 -26.03,177.6 -26.03,178.2 -26.03,178.8 -26.02,179.4 -26.01,-180 -26,-179.9 -25.6,-179.79 -25.2,-179.69 -24.8,-179.59 -24.4,-179.49 -24,-179.39 -23.6,-179.29 -23.2,-179.2 -22.8,-179.1 -22.4,-179 -22)))” 
  
 wkt2:“POLYGON((0 180,180 180,180 0,0 0,0 180))” 
  
 Does this show you anything?  Thanks again! 
 -Dustin

Dustin, 


You are welcome! I tried your data and it seems OK. Which version you are trying to use?
 
Following is my code:
 

string wkt1 = "MULTIPOLYGON(((-179 -22,-179.31 -21.6,-179.61 -21.2,-179.92 -20.81,179.78 -20.41,179.48 -20.01,179.18 -19.61,178.88 -19.21,178.59 -18.8,178.29 -18.4,178 -18,177.5 -18.01,177 -18.01,176.5 -18.01,176 -18.02,175.5 -18.02,175 -18.02,174.5 -18.01,174 -18.01,173.5 -18.01,173 -18,172.8 -18.4,172.61 -18.8,172.41 -19.2,172.21 -19.6,172.01 -20,171.81 -20.4,171.61 -20.8,171.41 -21.2,171.2 -21.6,171 -22,171.29 -22.4,171.59 -22.8,171.88 -23.21,172.18 -23.61,172.48 -24.01,172.78 -24.41,173.08 -24.81,173.38 -25.2,173.69 -25.6,174 -26,174.6 -26.01,175.2 -26.02,175.8 -26.03,176.4 -26.03,177 -26.03,177.6 -26.03,178.2 -26.03,178.8 -26.02,179.4 -26.01,-180 -26,-179.9 -25.6,-179.79 -25.2,-179.69 -24.8,-179.59 -24.4,-179.49 -24,-179.39 -23.6,-179.29 -23.2,-179.2 -22.8,-179.1 -22.4,-179 -22)))" ;
string wkt2 = "POLYGON((0 180,180 180,180 0,0 0,0 180))";
BaseShape baseShape1 = BaseShape.CreateShapeFromWellKnownData(wkt1);
BaseShape baseShape2 = BaseShape.CreateShapeFromWellKnownData(wkt2);

AreaBaseShape areaBasShape1 = (AreaBaseShape)baseShape1;
AreaBaseShape areaBasShape2 = (AreaBaseShape)baseShape2;
MultipolygonShape m = areaBasShape1.GetDifference(areaBasShape2);
string resultWkt = m.GetWellKnownText();

 
Following is my result wkt string:
 
MULTIPOLYGON(((-179 -22,-179.1 -22.4,-179.2 -22.8,-179.29 -23.2,-179.39 -23.6,-179.49 -24,-179.59 -24.4,-179.69 -24.8,-179.79 -25.2,-179.9 -25.6,-180 -26,179.4 -26.01,178.8 -26.02,178.2 -26.03,177.6 -26.03,177 -26.03,176.4 -26.03,175.8 -26.03,175.2 -26.02,174.6 -26.01,174 -26,173.69 -25.6,173.38 -25.2,173.08 -24.81,172.78 -24.41,172.48 -24.01,172.18 -23.61,171.88 -23.21,171.59 -22.8,171.29 -22.4,171 -22,171.2 -21.6,171.41 -21.2,171.61 -20.8,171.81 -20.4,172.01 -20,172.21 -19.6,172.41 -19.2,172.61 -18.8,172.8 -18.4,173 -18,173.5 -18.01,174 -18.01,174.5 -18.01,175 -18.02,175.5 -18.02,176 -18.02,176.5 -18.01,177 -18.01,177.5 -18.01,178 -18,178.29 -18.4,178.59 -18.8,178.88 -19.21,179.18 -19.61,179.48 -20.01,179.78 -20.41,-179.92 -20.81,-179.61 -21.2,-179.31 -21.6,-179 -22)))
 
 
Any more questions just let me know.
 
Thanks.
 
Yale