Hilfe bei Verwendung einer neuen Bibliothek (ProjNet4GeoAPI)

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von jan99.

    Hilfe bei Verwendung einer neuen Bibliothek (ProjNet4GeoAPI)

    Moin!

    ich möchte Koordinaten transformieren und dazu gibt es ProjNet4GeoAPI. Eine Beschreibung findet sich unter github.com/NetTopologySuite/Pr…oAPI/wiki/Well-Known-Text.

    Nun habe ich das via Nuget eingebunden und soweit werden mir auch keine Fehler angezeigt.

    Nun habe ich folgende Zeile

    VB.NET-Quellcode

    1. Dim points As New List(Of Double)(New Double() {ElementPkt.X, ElementPkt.Y})
    2. Dim tpoints As Double() = trans.MathTransform.Transform(Points)


    Der Aufbau der Zeile wird über die Autovervollständigung soweit auch angeboten.



    Aber mit dem Abschluss der Zeile wird folgendes angemerkt:

    Fehler bei der Überladungsauflösung, da keine zugreifbare "Transform" ohne einschränkende Konvertierung aufgerufen werden kann:
    "Public Function Transform(coordinateSequence As GeoAPI.Geometries.ICoordinateSequence) As GeoAPI.Geometries.ICoordinateSequence": Der mit dem Argument übereinstimmende Parameter "coordinateSequence" wird von "System.Collections.Generic.List(Of Double)" auf "GeoAPI.Geometries.ICoordinateSequence" reduziert.
    "Public Function Transform(coordinate As GeoAPI.Geometries.ICoordinate) As GeoAPI.Geometries.ICoordinate": Der mit dem Argument übereinstimmende Parameter "coordinate" wird von "System.Collections.Generic.List(Of Double)" auf "GeoAPI.Geometries.ICoordinate" reduziert.


    Mein Code sieht im wesentlichen so aus:

    VB.NET-Quellcode

    1. Imports GeoAPI.CoordinateSystems
    2. Imports GeoAPI.CoordinateSystems.Transformations
    3. Imports GeoAPI.Geometries
    4. Imports ProjNet.CoordinateSystems
    5. Imports ProjNet.CoordinateSystems.Transformations
    6. ' Definition der Transformation
    7. Dim csFact As CoordinateSystemFactory = New CoordinateSystemFactory()
    8. Dim ctFact As CoordinateTransformationFactory = New CoordinateTransformationFactory()
    9. Dim utm35ETRS As ICoordinateSystem = csFact.CreateFromWkt("PROJCS[""ETRS89 / ETRS-TM35"",GEOGCS[""ETRS89"",DATUM[""D_ETRS_1989"",SPHEROID[""GRS_1980"",6378137,298.257222101]],PRIMEM[""Greenwich"",0],UNIT[""Degree"",0.017453292519943295]],PROJECTION[""Transverse_Mercator""],PARAMETER[""latitude_of_origin"",0],PARAMETER[""central_meridian"",27],PARAMETER[""scale_factor"",0.9996],PARAMETER[""false_easting"",500000],PARAMETER[""false_northing"",0],UNIT[""Meter"",1]]")
    10. Dim utm33 As IProjectedCoordinateSystem = ProjectedCoordinateSystem.WGS84_UTM(33, True)
    11. Dim trans As ICoordinateTransformation = ctFact.CreateFromCoordinateSystems(utm35ETRS, utm33)
    12. Dim points As New List(Of Double)(New Double() {ElementPkt.X, _
    13. ElementPkt.Y})
    14. ' Durchführen der Transformation
    15. Dim tpoints As Double() = trans.MathTransform.Transform(Points)


    Kann mir einer beim Verständnis dieser Meldung oder auch beim weiteren Weg weiterhelfen?

    Gruß Jan
    @jan99 Wo hast Du denn die DLL her?
    Mein Feuerfuchs verweigert Deinen Link. :/
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Dksksm Das war auf Arbeit, zu Hause ging es. Nur sollte ich da noch Zeugs nachinstallieren, da hab ich abgebrochen.
    @jan99 So loss das sein. :thumbup:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Moin !

    hier nun meine Erkenntnisse von gestern.

    Die Installation ist über Nuget gekommen.

    Das mit der Fehlermeldung

    Fehler bei der Überladungsauflösung, da keine zugreifbare "Transform" ohne einschränkende Konvertierung aufgerufen werden kann:
    "Public Function Transform(coordinateSequence As GeoAPI.Geometries.ICoordinateSequence) As GeoAPI.Geometries.ICoordinateSequence": Der mit dem Argument übereinstimmende Parameter "coordinateSequence" wird von "System.Collections.Generic.List(Of Double)" auf "GeoAPI.Geometries.ICoordinateSequence" reduziert.
    "Public Function Transform(coordinate As GeoAPI.Geometries.ICoordinate) As GeoAPI.Geometries.ICoordinate": Der mit dem Argument übereinstimmende Parameter "coordinate" wird von "System.Collections.Generic.List(Of Double)" auf "GeoAPI.Geometries.ICoordinate" reduziert.


    soll daher kommen, dass ich mit Double als Übergabewerte gearbeitet habe - obwohl vorgeschlagen. Besser soll der Weg über Coordinate (ICoordinate wird als veraltet gekennzeichnet) sein.

    Hier nun mein Ergebnis für eine Transformation von Gauß-Krüger 3 Grad / Streifen 4 nach WGS84 mit einer für meine Aufgabe ausreichenden Genauigkeit.

    VB.NET-Quellcode

    1. Imports GeoAPI.CoordinateSystems
    2. Imports GeoAPI.CoordinateSystems.Transformations
    3. Imports GeoAPI.Geometries
    4. Imports ProjNet.CoordinateSystems
    5. Imports ProjNet.CoordinateSystems.Transformations
    6. ...
    7. Dim csFact As CoordinateSystemFactory = New CoordinateSystemFactory()
    8. Dim ctFact As CoordinateTransformationFactory = New CoordinateTransformationFactory()
    9. Dim gcs_WGS84 As ProjNet.CoordinateSystems.GeographicCoordinateSystem = ProjNet.CoordinateSystems.GeographicCoordinateSystem.WGS84
    10. Dim EPSG31468 As ICoordinateSystem = csFact.CreateFromWkt("PROJCS[""DHDN / 3-degree Gauss-Kruger zone 4 (E-N)"",GEOGCS[""DHDN"",DATUM[""Deutsches_Hauptdreiecksnetz"",SPHEROID[""Bessel 1841"",6377397.155,299.1528128,AUTHORITY[""EPSG"",""7004""]],TOWGS84[598.1,73.7,418.2,0.202,0.045,-2.455,6.7],AUTHORITY[""EPSG"",""6314""]],PRIMEM[""Greenwich"",0,AUTHORITY[""EPSG"",""8901""]],UNIT[""degree"",0.0174532925199433,AUTHORITY[""EPSG"",""9122""]],AUTHORITY[""EPSG"",""4314""]],PROJECTION[""Transverse_Mercator""],PARAMETER[""latitude_of_origin"",0],PARAMETER[""central_meridian"",12],PARAMETER[""scale_factor"",1],PARAMETER[""false_easting"",4500000],PARAMETER[""false_northing"",0],UNIT[""metre"",1,AUTHORITY[""EPSG"",""9001""]],AXIS[""Easting"",EAST],AXIS[""Northing"",NORTH],AUTHORITY[""EPSG"",""5678""]]")
    11. Dim trans As ICoordinateTransformation = ctFact.CreateFromCoordinateSystems(EPSG31468, gcs_WGS84)
    12. Dim OldCoordinate As New GeoAPI.Geometries.Coordinate(ElementPkt.X, ElementPkt.Y)
    13. Dim NewCoordinate As GeoAPI.Geometries.Coordinate
    14. ' Durchführen der Transformation
    15. NewCoordinate = trans.MathTransform.Transform(OldCoordinate)
    16. Dim LatTrans As Double = NewCoordinate.Y
    17. Dim LonTrans As Double = NewCoordinate.X


    Vielleicht kann einer von Euch damit etwas anfangen - dann konnte ich wenigstens auch einmal helfen.

    Gruß Jan