ThinkGeo.com    |     Documentation    |     Premium Support

4 question about CurrentExtent, Draw Circle and Encoding

hi sir,


today i have 3 questions.


Link of All Pictures that describe my errors pleas download: 4shared.com/file/1398616.../Pics.html

 




first question is with CurrentExtent function, for example see the first 2 pictures in the link previous, i want to show this city only when click some button.


this 2 images contain the lon,lat for 2 corners, so i write my function like that:


            //Map1.CurrentExtent = new RectangleShape(21.205, 40.114, 21.614, 39.713);

            Map1.CurrentExtent = new RectangleShape(39.713,21.614,40.114,21.205);


first line or the second navigate me somewhere not in the same place that i want, the first one navigate me to the 3rd picture.


so, do i make something wrong?


---------------------


second question is about encoding, i have some arabic text in my dbf, you can see it in picutre number (4).

when i try to open it with thinkgeo component it comes corrupted, i try to change the encoding using this line:


eduPOITextLayer.Encoding = Encoding.UTF8;


but it still give me  corrupted text but with different chars you can find it in picture number 5.


so what shall i do.




---------------------


third question that i have this values:


21,39,100


which represent the x,y and radius in km for some circle.

i don't know how can i draw this circle using code.


After drawing circle and in Map1_TrackShapeFinished i will have Feature object, i can read this value, but how can i draw it in form_load?


---------------------


4th question, is there any way to have set some value to the map component so it will assume that shift key is presed.

for example:


Map.ZoomToSelectedArea=True;


so by default, when he select some area it will zoom to it directly without press shift key?




thanks and sorry for my so much questions.



 


Hi Ahmed,
For the 1st question, we found that the extent of your map is around here (39.713, 21.614, 40.114, 21.205), the MapTools will give the world coordinates of the current mouse position, and try to use it like this:


Map1.MapTools.MouseCoordinate.Enabled = true;


For the 2nd one, please make sure that you have installed the Arabic language package in your machine. If it still can not work, please send us some sample data and we will test against it in our machine to see if there is anything else wrong.
For the 3rd one, just create an EllipseShape and add it to an InMemoryFeatureLayer in the Page_Load event. The code is like this:


EllipseShape myEllipseShape = new EllipseShape(new PointShape(21, 39), 100, 100, GeographyUnit.DecimalDegree, DistanceUnit.Kilometer);
InMemoryFeatureLayer myInMemoryFeatureLayer = new InMemoryFeatureLayer();
myInMemoryFeatureLayer.InternalFeatures.Add(new Feature(myEllipseShape));
myInMemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.SimpleColors.Red);
myInMemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

Map1.StaticOverlay.Layers.Add(myInMemoryFeatureLayer);


For the 4th question, there is no such property in the current map control. But you can implement this functionality by the following steps:
1. Hook the the TrackShapeFinished event for the map control like this:


protected override void OnInit(EventArgs e)
{
     base.OnInit(e);
     Map1.TrackShapeFinished += new EventHandler(Map1_TrackShapeFinished);
}


 
2. Set the TrackMode to Rectangle


Map1.EditOverlay.TrackMode = ThinkGeo.MapSuite.WebEdition.TrackMode.Rectangle;


 
3. Write some code to the Map1_TrackShapeFinished function:


void Map1_TrackShapeFinished(object sender, EventArgs e)
{
    Map1.CurrentExtent = Map1.EditOverlay.Features[0].GetBoundingBox();
    Map1.EditOverlay.Features.Clear();
}


Any more questions please let me know.
Thanks,
Sun

for the first question, yes that is what i am using, but when execute this function it takes me somewhere else, where i attach the snap shoot number 3, i read my MouseCoordinate many times with different values but still takes me somewhere unexpected.


but wait:)


when i am trying to build new application with this code only so i can send it to you to check, it works :)

i returned back to my code to see if there any conflict, and when i remove my code of adding markers, it works.

so what is the problem, it looks that all markers should appear in the view.


--------------


for the second question, do you mean the arabic package for windows, or there is some arabic package for web map itself.

anyway i am sure about arabic package for my windows, this is files:

4shared.com/file/140324000/34e20c30/POI.html


--------------


3rd question, it is still hidden, it shows me that it is added, but still hidden.




                        EllipseShape myEllipseShape = new EllipseShape(new PointShape(Convert.ToDouble(dataField[2]), Convert.ToDouble(dataField[1])), Convert.ToDouble(dataField[7]), Convert.ToDouble(dataField[7]), GeographyUnit.DecimalDegree, DistanceUnit.Kilometer);

                        InMemoryFeatureLayer myInMemoryFeatureLayer = new InMemoryFeatureLayer();

                        myInMemoryFeatureLayer.InternalFeatures.Add(new Feature(myEllipseShape));

                        myInMemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.SimpleColors.Red);

                        myInMemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

                        

                        LayerOverlay layerOverlayGEO = new LayerOverlay("GEOOverlay");


                        layerOverlayGEO.Layers.Add(myInMemoryFeatureLayer);

                        Map1.CustomOverlays.Add(layerOverlayGEO);


--------------


4th question, this is very great idea, but it is asp.net code, it will refresh all of my page, i didn't put it in update panel.


i have some code in my Map_MouseClick, which refresh my page for any action, my distance functions facing the same problem.

is it regular or there is something to do? it is not acting like distance function in how do i samples, if it is not reqular i will return back to the examples to understand what is the different.



Ahmed,



1st question; do you mean the markers conflict the current extent you set on the map? I’m not sure how to create your issue; could you provide us a sample which we can use for testing?



2nd question; please provide us the shape file. We guess there are some settings affect your encoding.



3rd question; please provide a exact value to us. We guess the ellipse is too small to display on the map or the extent is not right. Could you provide us the dataField[1], [2], [7] and the extent you set?



4th question; if you want to implement it on the client side, we need to write code on both client and server side.

•    Paste the code on the server side in the Page_Load method.Map1.EditOverlay.TrackMode = ThinkGeo.MapSuite.WebEdition.TrackMode.Rectangle;
Map1.OnClientDrawEnd = "Map1ClientDrawEnd";



•    Paste the following code on the client side in the head tag.var tgMap = null;
var OnMapCreated = function(map) {
    tgMap = map;
};
var Map1ClientDrawEnd = function(feature) {
    if (tgMap) {
        var editOverlay = tgMap.getLayersByName('EditOverlay')[0];
        editOverlay.destroyFeatures(editOverlay.features);
        tgMap.zoomToExtent(feature.geometry.bounds);
    }
};

Hope it helps and looking forward your feedback.



Thanks,

Howard

 



first question, yes that it what i was mean, this is an exmaple:


4shared.com/file/1405740..._Copy.html

 


------


second, this is the link:

4shared.com/file/140324000/34e20c30/POI.html


------


3rd question, this is the values:


dataField[1] = 30.995303

dataField[2] = 41.031397

dataField[7] = 400


------


4th question: thanks, now it is clear.



for the second question again, this file contain some POI with Arabic And English Name: 
 4shared.com/file/140974800/538af19e/_2__POI.html 
  
 it works fine with english, but with arabic it becomes (???) with ASCII encoding, and corrupted with UTF8 or UTF7, empty text with Unicode, and with UTF32 gives this error: 
  
 An Item with this key has already been added.  
  
 so, what shall i do in this, and in the remaining question? 
 thanks.

Hi Ahmed,


For the first extent question, we have recreated it and we found that setting the AutoPan property to false solves this problem. The code could be like this:

CustomPopup cpop = new CustomPopup("ID", m.Position, "Weclome Welcome");
m.Popup = cpop;
m.Popup.IsVisible = false;
m.Popup.AutoPan = false;
m.Popup.AutoSize = true;
markerOverlay.Markers.Add(m);

 
This is a feature of OpenLayers and we will do more research about this to clarify if this is a bug or just designed to do this.
For the second question, we have tested against the shape file “EduInsts.shp” in our machine; it works fine without setting any encoding the shape file layer. We tested this both using Windows 7 and Windows XP; please take a look at the screenshots below:
Windows XP result:

Windows 7 result:

regional and language setting:

For the third question, you need to set the IsBaseOverlay property to false of the overlay which contains the ellipse shape. This is because only the first overlay shows if you add several overlays to the CustomOverlays and never set the IsBaseOverlay property. The code could be like this:

EllipseShape myEllipseShape = new EllipseShape(new PointShape(30.995303, 41.031397), 400, GeographyUnit.DecimalDegree, DistanceUnit.Kilometer);
InMemoryFeatureLayer myInMemoryFeatureLayer = new InMemoryFeatureLayer();
myInMemoryFeatureLayer.InternalFeatures.Add(new Feature(myEllipseShape));
myInMemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.SimpleColors.Red);
myInMemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

LayerOverlay inMemoryOverlay = new LayerOverlay();
inMemoryOverlay.Layers.Add(myInMemoryFeatureLayer);
inMemoryOverlay.IsBaseOverlay = false;
Map1.CustomOverlays.Add(inMemoryOverlay);


 

Hope this helps.


Any more questions please let me know.



Thanks,
Sun

 



for fisrt and 3rd question, it is very great, now it is working, thanks. 
  
 for the second question, yes that is what is happen with me, but acctuly, this is not arabic, it is corrupted. 
 the arabic text must be like next: 
  
 اسم مدرسة تجريبي 
 اسم مؤقت لمدرسة 
 اسم مدرسة 
  
 this is the arabic chars 
 ء ا ب ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ك ل م ن ه و ي 
  
 but the current text is just corrupted text without even correct chars, this is not arabic.

mmmmm 
 actuly i try to import another arabic dbf file, it works directly correct. 
 the problem was from our way of creation the shape file, it must be encoded to dbf so it will be exported in a correct format later. 
  
 now my question is, can we have inside Encoding enum in addition to (UTF8, BigEndianUnicode … etc) can we have one for arabic (Windows-1256). 
  
 this suggestion is just to make it easy, Ii heard that you can have it in arcview tools but not by default. so is it posible to have it here also in new versions? 
  
 thanks again and sorry becouse i didn’t check more arabic dbf file before i ask.

Ahmed,


Sorry for the wrong answer about the Arabic question, we are not very familiar with it. To set the encoding to “Windows-1256”, please use this statement:

shapeLayer.Encoding = Encoding.GetEncoding("Windows-1256");

Any more questions please let me know.
Thanks,
Sun

Thanks :)

You are welcome, Ahmed. Please feel free to let me know if you have any more questions. 
  
 Thanks, 
  
 Sun

How to get the markers present inside the shape(rectangles,circles etc).

Hello Shivanna, 
  
 Sorry I’m not understanding your meaning very clearly, so I guess you have some markers and you want to show them, but what’s the connection to the shape? 
  
 If you have some logic connection that can let you pair the Marker and shape, I think you can get the shape’s boundingbox and get the centerpoint, then show the marker on the center. 
  
 If you have more information can guide me, could you please open a new post and post it there? 
  
 Regards, 
  
 Gary