ThinkGeo.com    |     Documentation    |     Premium Support

Can I translate an entire layer?

Hello.


I'm loading a shapefile that was converted from a DWG file, and adding it as a layer over the cntry02 and cover shapes from the World Map Kit. They don't line up very well, I'm assuming because my shapefile is far more detailed at it's zoom level. Is there a way I can translate the entire layer? I've tried looping through the features and using TranslateByOffset, but nothing changes. Thanks 


 


 



layer.Open()


layer.FeatureSource.BeginTransaction()


 



Dim Features As Collection(Of Feature)For Each Feature In FeaturesNext

layer.FeatureSource.CommitTransaction()


layer.Close()



Features = layer.FeatureSource.GetAllFeatures(ReturningColumnsType.AllColumns)


 


BaseShape.TranslateByOffset(Feature, 0.5, -0.5, GeographyUnit.Meter, DistanceUnit.Mile)


layer.FeatureSource.UpdateFeature(Feature)


 



Eric,


The best way to translate a layer is creating a custom projection, Here is the code showing how to create a custom projection.



Class MyProjection
        Inherits Projection
        Private offsetValue As Double

        Public Sub New(offset As Double)
                 offsetValue = offset
        End Sub

        Protected Overrides Function ConvertToExternalProjectionCore(x As Double(), y As Double()) As Vertex()
                 Dim vertexs As Vertex() = New Vertex(x.Length - 1) {}
                 For i As Integer = 0 To x.Length - 1
                          vertexs(i) = New Vertex(x(i) + offsetValue, y(i) + offsetValue)
                 Next
                 Return vertexs
        End Function

        Protected Overrides Function ConvertToInternalProjectionCore(x As Double(), y As Double()) As Vertex()
                 Dim vertexs As Vertex() = New Vertex(x.Length - 1) {}
                 For i As Integer = 0 To x.Length - 1
                          vertexs(i) = New Vertex(x(i) - offsetValue, y(i) - offsetValue)
                 Next
                 Return vertexs
        End Function
End Class

and you can set the projection like: layer.FeatureSource.Projection = new MyProjection(5);


Thanks,


Edgar



Makes sense.


Thank you



Hello Eric, 
  
 Let me know if you have more queries. 
  
 Regards, 
  
 Gary