OSMDataPrimitives.Spatial
                             
                            
                                3.0.0
                            
                        
                    dotnet add package OSMDataPrimitives.Spatial --version 3.0.0
NuGet\Install-Package OSMDataPrimitives.Spatial -Version 3.0.0
<PackageReference Include="OSMDataPrimitives.Spatial" Version="3.0.0" />
<PackageVersion Include="OSMDataPrimitives.Spatial" Version="3.0.0" />
<PackageReference Include="OSMDataPrimitives.Spatial" />
paket add OSMDataPrimitives.Spatial --version 3.0.0
#r "nuget: OSMDataPrimitives.Spatial, 3.0.0"
#:package OSMDataPrimitives.Spatial@3.0.0
#addin nuget:?package=OSMDataPrimitives.Spatial&version=3.0.0
#tool nuget:?package=OSMDataPrimitives.Spatial&version=3.0.0
OSMDataPrimitives
Intention
This pretty little project is intended to provide the 3 basic data types (nodes, ways and relations) of OpenStreetMap as .NET classes. I'm about to use it in some other projects.
Usage
To create new instances of an OsmNode:
using OSMDataPrimitives;
var node = new OsmNode(1, 52.123456, 12.654321) {
	UserId = 1,
	UserName = "username",
	Version = 1,
	Changeset = 1,
	Timestamp = DateTime.Now
};
node.Tags.Add("name", "foo");
node.Tags.Add("ref", "bar");
It's also easy to create new instances of an OsmWay:
var way = new OsmWay(1) {
	UserId = 1,
	UserName = "username",
	Version = 1,
	Changeset = 1,
	TimeStamp = DateTime.Now
};
way.Tags.Add("name", "first road");
way.Tags.Add("ref", "A1");
way.NodeRefs.Add(1);
way.NodeRefs.Add(2);
way.NodeRefs.Add(3);
way.NodeRefs.Add(4);
And last but not least an OsmRelation:
var relation = new OsmRelation(1) {
	UserId = 1,
	UserName = "username",
	Version = 1,
	Changeset = 1,
	TimeStamp = DateTime.Now
};
relation.Tags.Add("name", "my little country");
relation.Tags.Add("note", "just a test.");
relation.Members.Add(new OsmMember(MemberType.Way, 1, "outer"));
relation.Members.Add(new OsmMember(MemberType.Way, 2, "outer"));
To simply convert these OsmElement's to a XML-String or a XmlElement:
using OSMDataPrimitives;
using OSMDataPrimitives.Xml;
var node = new OsmNode(1, 52.123456, 12.654321) {
	UserId = 1,
	UserName = "username",
	Version = 1,
	Changeset = 1,
	Timestamp = DateTime.Now
};
node.Tags.Add("name", "foo");
node.Tags.Add("ref", "bar");
var xmlString = node.ToXmlString();
Console.WriteLine(xmlString);
/*
 * output:
 * <node id="1" lat="52.123456" lon="12.654321" version="1" uid="1" user="username" changeset="1" timestamp="2017-01-31T12:34:17Z"><tag k="name" v="foo" /><tag k="ref" v="bar" /></node>
 */
var xmlElement = node.ToXml();
Console.WriteLine(xmlElement.OuterXml);
/*
 * output (the same as above):
 * <node id="1" lat="52.123456" lon="12.654321" version="1" uid="1" user="username" changeset="1" timestamp="2017-01-31T12:36:09Z"><tag k="name" v="foo" /><tag k="ref" v="bar" /></node>
 */
It is also possible to build PostgreSQL queries for the OsmElement's:
var node = new OsmNode(1, 52.123456, 12.654321) {
	UserId = 1,
	UserName = "username",
	Version = 1,
	Changeset = 1,
	Timestamp = DateTime.Now
};
node.Tags.Add("name", "foo");
node.Tags.Add("ref", "bar");
NameValueCollection sqlParameters;
var sqlQuery = node.ToPostgreSQLInsert(out sqlParameters);
Console.WriteLine(sqlQuery);
/*
 * output:
 * INSERT INTO nodes (osm_id, lat, lon, tags) VALUES(@osm_id::bigint, @lat::double precision, @lon::double precision, @tags::hstore)
 *
 * The values for @osm_id, @lat, @lon and @tags are put into the sqlParameters-variable.
 */
// to add all the meta-data:
sqlQuery = node.ToPostgreSQLInsert(out sqlParameters, inclusiveMetaFields: true);
Console.WriteLine(sqlQuery);
/*
 * output:
 * INSERT INTO nodes (osm_id, version, changeset, uid, user, timestamp, lat, lon, tags) VALUES(@osm_id::bigint, @version::bigint, @changeset::bigint, @uid::bigint, @user, TIMESTAMP @timestamp, @lat::double precision, @lon::double precision, @tags::hstore)
License
| Product | Versions Compatible and additional computed target framework versions. | 
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. | 
- 
                                                    
net8.0
- OSMDataPrimitives (>= 3.0.0)
 
 - 
                                                    
net9.0
- OSMDataPrimitives (>= 3.0.0)
 
 
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated | 
|---|---|---|
| 3.0.0 | 186 | 11/18/2024 | 
| 2.2.2 | 252 | 2/1/2024 | 
| 2.2.1 | 153 | 1/30/2024 | 
| 2.2.0 | 155 | 1/29/2024 | 
| 2.1.3 | 235 | 1/8/2024 | 
| 2.1.2 | 249 | 11/22/2023 | 
| 2.1.1 | 189 | 11/22/2023 | 
| 2.1.0 | 140 | 11/20/2023 | 
| 2.0.0 | 303 | 4/3/2023 | 
| 1.3.0 | 598 | 11/19/2020 | 
| 1.2.2 | 666 | 7/3/2020 | 
| 1.2.0 | 1,271 | 11/14/2017 | 
| 1.0.12 | 1,284 | 6/21/2017 | 
| 1.0.11 | 1,240 | 3/3/2017 | 
| 1.0.10 | 1,256 | 2/15/2017 | 
| 1.0.8 | 1,259 | 2/9/2017 | 
changed target framework to .NET 8.0 - .NET 9.0